Manual-sync mirror of chromium.googlesource.com/external/github.com/WebKit/JetStream.git
Find a file
Keith Miller 06785cf861
Merge pull request #301 from kmiller68/v3.0-firewall-renames
Workaround firewall blocking on browserbench.org
2026-04-16 20:54:12 -04:00
.github/workflows Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
8bitbench Move and share TextEncoder/TextDecoder polyfill 2025-09-02 02:24:51 +02:00
ARES-6 Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
babylonjs Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
bigint Add UTF16 sources test (#162) 2025-08-26 16:15:25 +02:00
cdjs Cleanup performance.now shimming (#108) 2025-07-31 14:25:15 +02:00
class-fields Initial copy from WebKit/PerformanceTests/JetStream3 2024-10-30 09:45:46 -07:00
code-load Expose JetStream global to workloads (#139) 2025-08-15 13:13:16 +02:00
Dart Expose JetStream global to workloads (#139) 2025-08-15 13:13:16 +02:00
generators async-fs / sync-fs should generate all possible bytes 2025-11-12 16:23:34 -08:00
intl Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
jsdom-d3-startup Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
Kotlin-compose Expose JetStream global to workloads (#139) 2025-08-15 13:13:16 +02:00
mobx Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
Octane Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
prismjs Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
proxy Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
resources Skip animations with non-default parameters for v3.0 (#291) 2026-03-06 00:46:00 +01:00
RexBench Compress some large JS files 2025-10-02 16:25:27 -05:00
SeaMonster fix gaussian-blur input data (#207) 2025-10-22 09:21:56 +02:00
simple Avoid new Date and improve filename extraction in doxbee benchmarks (#231) 2025-10-29 09:11:06 +01:00
sqlite3 Move and share TextEncoder/TextDecoder polyfill 2025-09-02 02:24:51 +02:00
SunSpider Add UTF16 sources test (#162) 2025-08-26 16:15:25 +02:00
tests Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
threejs Add three.js benchmark (#75) 2025-08-05 21:57:16 +02:00
transformersjs Transformers.js line items shouldn't load resources in the benchmark 2025-11-12 12:12:46 -05:00
TypeScript Merge pull request #301 from kmiller68/v3.0-firewall-renames 2026-04-16 20:54:12 -04:00
utils Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
validatorjs Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
wasm Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
web-ssr Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
web-tooling-benchmark Merge pull request #301 from kmiller68/v3.0-firewall-renames 2026-04-16 20:54:12 -04:00
worker Add UTF16 sources test (#162) 2025-08-26 16:15:25 +02:00
WSL Initial copy from WebKit/PerformanceTests/JetStream3 2024-10-30 09:45:46 -07:00
.gitignore Include decompressed files in gitignore 2025-10-02 16:26:00 -05:00
.prettierignore Add prettier config (#176) 2025-10-08 09:45:04 +02:00
.prettierrc Add prettier config (#176) 2025-10-08 09:45:04 +02:00
__init__.py Initial copy from WebKit/PerformanceTests/JetStream3 2024-10-30 09:45:46 -07:00
cli.js Add --force-gc support (#248) 2025-12-18 18:51:23 +01:00
Governance.md add WebAssembly engine as a requirement 2026-01-15 14:07:42 -05:00
in-depth.html v3.0 release preparation (#296) 2026-03-26 13:07:01 +01:00
index.html v3.0 release preparation (#296) 2026-03-26 13:07:01 +01:00
JetStreamDriver.js Workaround firewall blocking on browserbench.org 2026-03-31 13:29:26 -07:00
LICENSE Initial copy from WebKit/PerformanceTests/JetStream3 2024-10-30 09:45:46 -07:00
netlify.toml Add netlify config 2025-10-02 16:26:00 -05:00
package-lock.json Remove unused global dependencies 2026-01-14 12:23:57 +01:00
package.json Add License headers (#278) (#299) 2026-03-30 15:26:26 +02:00
RAMification.py Initial copy from WebKit/PerformanceTests/JetStream3 2024-10-30 09:45:46 -07:00
README.md v3.0 release preparation (#296) 2026-03-26 13:07:01 +01:00

What is JetStream?

JetStream 3.0 is a JavaScript and WebAssembly benchmark suite. For more information see the index and in-depth pages of the deployed benchmark.

Open Governance

See Governance.md for more information.

Getting Started, Setup Instructions

  • Install Node.js and (optionally) jsvu for conveniently getting recent builds of engine shells.
  • npm install the necessary dependencies.
  • npm run server for starting a local development server, then browse to http://localhost:8010.
  • npm run test:shell for running the benchmark in engine shells, or alternatively running directly, e.g., via jsc cli.js.

See package.json and .github/workflows/test.yml for more details and available commands.

Shell Runner

For the shell runner, see the available options by passing --help to cli.js. (Note that this requires -- for JavaScriptCore and V8 to separate VM arguments from script arguments.):

$ v8 cli.js -- --help
JetStream Driver Help

Options:
    --help                 Print this help message.
    --iteration-count      Set the default iteration count.
...

Available tags:
   all
...

Available tests:
   8bitbench-wasm
...

Browser Runner

The browser version also supports passing parameters as URL query parameters, e.g., pass the test parameter (aliases are tests or testList) with a comma-separated list to run only specific workloads: https://webkit-jetstream-preview.netlify.app/?test=8bitbench-wasm,web-ssr. See utils/params.js and JetStreamDriver.js for more details.

Technical Details

The main file of the benchmark harness is JetStreamDriver.js, which lists the individual workloads and their parameters, implements measurement and scoring, etc. The individual workloads are in subdirectories.

Preloading and Compression

Network prefetching (in the browser). In order to avoid the CPU frequency spinning down between tests we prefetch all assets before any of the tests start in the browser. (In the CLI/shell runner we assume all assets are on disk.) Assets are saved in a blob URL so they can be cached on disk. This lowers the peak memory footprint of the benchmark to a sustainable level.

Large asset preloading. The JetStream driver (both in the browser and shell runners) preloads some large assets and source files. This avoids extensive disk I/O during the measurement window of the workloads.

Compression. In order to limit the repository size and network transfers, large assets (e.g., ML models, heavy JavaScript bundles in the order of 10s of MBs) are stored as compressed .z files on disk. Preloading handles the decompression of these assets (using DecompressionStream or a Wasm-based zlib polyfill) upfront so that decompression overhead does not affect the benchmark score.

Preloading, prefetching, and compression can be disabled, e.g., to inspect raw files or because it sometimes helps with debugging (e.g., to get proper URLs instead of blob URLs for resources).

  • Compression: Run npm run decompress to decompress all .z files before running the benchmark.
  • No prefetching for shells: Pass the --no-prefetch flag, e.g., jsc cli.js -- --no-prefetch.
  • No prefetching in browsers: Append the query parameter ?prefetchResources=false to the URL.

See JetStreamDriver.js and utils/compress.mjs for more details.

Score Calculation

Scores in JetStream are dimensionless floats, where a higher score is better. When scores are aggregated (e.g., multiple sub-scores for each workload, or to determine the total score of the full benchmark suite), we use the geometric mean. The geometric mean ensures that a multiplicative improvement of any individual score has the same effect on the aggregated score, regardless of the absolute value of the individual score. For example, an improvement by 5% of the sub score of benchmark A has the same effect on the total score as an improvement by 5% of the sub score of benchmark B.

See the in-depth.html and JetStreamDriver.js for more details.