blob: e18704f609291c623eb328bcf52128a8c0e96cdd [file] [log] [blame]
-- Copyright 2026 The Chromium Authors
-- Use of this source code is governed by a BSD-style license that can be
-- found in the LICENSE file.
-- Mapping of JetStream 3 leaf benchmarks to their top-level groups and
-- worst-case counts. Each top-level group has its score calculated separately,
-- before all group scores are combined. Null top-level groups become ungrouped
-- benchmarks.
CREATE PERFETTO VIEW _chrome_jetstream_3_benchmark_name (
name STRING,
top_level_name STRING,
worst_case_count LONG
) AS
WITH data(name, top_level_name, worst_case_count) AS (
VALUES
('Air', NULL, 4),
('Basic', NULL, 4),
('ML', NULL, 4),
('Babylon', NULL, 4),
('cdjs', NULL, 3),
('first-inspector-code-load', NULL, 4),
('multi-inspector-code-load', NULL, 4),
('Box2D', NULL, 4),
('octane-code-load', NULL, 4),
('crypto', NULL, 4),
('delta-blue', NULL, 4),
('earley-boyer', NULL, 4),
('gbemu', NULL, 4),
('mandreel', NULL, 4),
('navier-stokes', NULL, 4),
('pdfjs', NULL, 4),
('raytrace', NULL, 4),
('regexp-octane', NULL, 4),
('richards', NULL, 4),
('splay', NULL, 4),
('typescript-octane', NULL, 2),
('FlightPlanner', NULL, 4),
('OfflineAssembler', NULL, 4),
('UniPoker', NULL, 4),
('validatorjs', NULL, 4),
('hash-map', NULL, 4),
('doxbee-promise', NULL, 4),
('doxbee-async', NULL, 4),
('ai-astar', NULL, 4),
('gaussian-blur', NULL, 4),
('stanford-crypto-aes', NULL, 4),
('stanford-crypto-pbkdf2', NULL, 4),
('stanford-crypto-sha256', NULL, 4),
('json-stringify-inspector', NULL, 2),
('json-parse-inspector', NULL, 2),
('bigint-noble-bls12-381', NULL, 1),
('bigint-noble-secp256k1', NULL, 4),
('bigint-noble-ed25519', NULL, 4),
('bigint-paillier', NULL, 2),
('bigint-bigdenary', NULL, 16),
('proxy-mobx', NULL, 12),
('proxy-vue', NULL, 4),
('mobx-startup', NULL, 3),
('jsdom-d3-startup', NULL, 2),
('web-ssr', NULL, 4),
('raytrace-public-class-fields', NULL, 4),
('raytrace-private-class-fields', NULL, 4),
('async-fs', NULL, 6),
('sync-fs', NULL, 6),
('lazy-collections', NULL, 4),
('js-tokens', NULL, 4),
('threejs', NULL, 4),
('HashSet-wasm', NULL, 4),
('quicksort-wasm', NULL, 4),
('gcc-loops-wasm', NULL, 4),
('tsf-wasm', NULL, 4),
('richards-wasm', NULL, 4),
('sqlite3-wasm', NULL, 2),
('Dart-flute-complex-wasm', NULL, 2),
('Dart-flute-todomvc-wasm', NULL, 2),
('Kotlin-compose-wasm', NULL, 1),
('transformersjs-bert-wasm', NULL, 4),
('transformersjs-whisper-wasm', NULL, 1),
('argon2-wasm', NULL, 3),
('babylonjs-startup-es5', NULL, 4),
('babylonjs-startup-es6', NULL, 4),
('babylonjs-scene-es5', NULL, 4),
('babylonjs-scene-es6', NULL, 4),
('bomb-workers', NULL, 4),
('segmentation', NULL, 3),
('8bitbench-wasm', NULL, 2),
('zlib-wasm', NULL, 4),
('dotnet-interp-wasm', NULL, 2),
('dotnet-aot-wasm', NULL, 2),
('j2cl-box2d-wasm', NULL, 4),
('prismjs-startup-es6', NULL, 4),
('prismjs-startup-es5', NULL, 4),
('acorn-wtb', NULL, 2),
('babel-wtb', NULL, 2),
('babel-minify-wtb', NULL, 2),
('babylon-wtb', NULL, 2),
('chai-wtb', NULL, 2),
('espree-wtb', NULL, 2),
('esprima-next-wtb', NULL, 2),
('lebab-wtb', NULL, 2),
('postcss-wtb', NULL, 2),
('prettier-wtb', NULL, 2),
('source-map-wtb', NULL, 2),
('RelativeTimeFormat-intl', 'intl', 1),
('PluralRules-intl', 'intl', 1),
('NumberFormat-intl', 'intl', 1),
('ListFormat-intl', 'intl', 1),
('DateTimeFormat-intl', 'intl', 1),
('tagcloud-SP', 'Sunspider', 4),
('string-unpack-code-SP', 'Sunspider', 4),
('regex-dna-SP', 'Sunspider', 4),
('n-body-SP', 'Sunspider', 4),
('date-format-xparb-SP', 'Sunspider', 4),
('date-format-tofte-SP', 'Sunspider', 4),
('crypto-sha1-SP', 'Sunspider', 4),
('crypto-md5-SP', 'Sunspider', 4),
('crypto-aes-SP', 'Sunspider', 4),
('base64-SP', 'Sunspider', 4),
('3d-raytrace-SP', 'Sunspider', 4),
('3d-cube-SP', 'Sunspider', 4)
)
SELECT name, COALESCE(top_level_name, name) AS top_level_name, worst_case_count FROM data;
-- Find the main thread of the JetStream 3 renderer.
CREATE PERFETTO FUNCTION chrome_jetstream_3_renderer_main_utid()
RETURNS TABLE(
-- The utid of the JetStream 3 renderer main thread.
utid LONG
) AS
WITH
start_event AS (
SELECT
name
FROM _chrome_jetstream_3_benchmark_name
LIMIT 1
)
SELECT
utid
FROM thread_track
WHERE
id IN (
SELECT
track_id
FROM slice
JOIN start_event
USING (name)
WHERE
category = 'blink.user_timing'
);
-- Find JetStream 3 iteration slices.
CREATE PERFETTO VIEW _chrome_jetstream_3_measure_slice AS
SELECT
id,
ts,
dur,
bench.name,
bench.top_level_name,
bench.worst_case_count,
CAST(SUBSTR(slice.name, INSTR(slice.name, '-iteration-') + 11) AS LONG) AS iteration
FROM slice
JOIN _chrome_jetstream_3_benchmark_name AS bench
ON slice.name GLOB bench.name || '-iteration-*'
WHERE category = 'blink.user_timing' AND dur > 0;
-- Find WSL slices.
CREATE PERFETTO VIEW _chrome_jetstream_3_wsl_slice AS
SELECT
id,
ts,
dur,
'WSL' AS name,
'WSL' AS top_level_name,
0 AS worst_case_count,
0 AS iteration,
slice.name AS subtest
FROM slice
WHERE category = 'blink.user_timing'
AND name GLOB 'WSL-*'
AND dur > 0;
-- Final list of JetStream 3 measures.
--
-- Classified into:
-- * 'First' (Iteration 0),
-- * 'Average' (Iteration 1..N)
-- * 'Worst' (slowest iterations).
--
-- Note: 'Average' includes all iterations except the first and the worst ones.
-- In the actual benchmark scoring, 'Average' includes 'Worst', but the measure
-- table avoids listing the same slice twice. For WSL, the subtest name is the
-- slice name (e.g., 'WSL-stdlib').
CREATE PERFETTO TABLE chrome_jetstream_3_measure (
-- The slice id.
id LONG,
-- The slice timestamp.
ts TIMESTAMP,
-- The slice duration.
dur DURATION,
-- The leaf benchmark name.
name STRING,
-- The top-level benchmark group name.
top_level_name STRING,
-- The iteration number.
iteration LONG,
-- The subtest classification ('First', 'Average', 'Worst', or WSL subtest name).
subtest STRING
) AS
WITH
iteration_ranked AS (
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
worst_case_count,
RANK() OVER (PARTITION BY name ORDER BY dur DESC) as rank_within_name
FROM _chrome_jetstream_3_measure_slice
WHERE iteration > 0
)
-- Worst: The slowest N iterations (excluding the first).
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
'Worst' AS subtest
FROM iteration_ranked
WHERE rank_within_name <= worst_case_count
UNION ALL
-- Average: All iterations (excluding the first and worst ones).
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
'Average' AS subtest
FROM iteration_ranked
WHERE rank_within_name > worst_case_count
UNION ALL
-- First: The first iteration (iteration 0).
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
'First' AS subtest
FROM _chrome_jetstream_3_measure_slice
WHERE iteration = 0
UNION ALL
-- WSL: Specific WSL slices.
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
subtest
FROM _chrome_jetstream_3_wsl_slice;
-- Calculate score for each subtest classification.
--
-- A subtest score is 5000 / arithmetic mean of durations in milliseconds.
CREATE PERFETTO VIEW _chrome_jetstream_3_subtest_score AS
WITH
expanded_measure AS (
SELECT * FROM chrome_jetstream_3_measure
UNION ALL
-- Include 'Worst' iterations in 'Average' calculation.
SELECT
id,
ts,
dur,
name,
top_level_name,
iteration,
'Average' AS subtest
FROM chrome_jetstream_3_measure
WHERE subtest = 'Worst'
)
SELECT
top_level_name,
name,
subtest,
5000.0 / (AVG(dur) / 1000000.0) AS score
FROM expanded_measure
GROUP BY top_level_name, name, subtest;
-- Calculate the score for each leaf benchmark.
--
-- A benchmark's score is the geometric mean of its subtest scores (First,
-- Average, Worst).
--
-- Note: some benchmarks might not have exactly these three subtests, e.g. WSL.
CREATE PERFETTO VIEW _chrome_jetstream_3_leaf_benchmark_score AS
SELECT
top_level_name,
name,
EXP(AVG(LN(score))) AS score
FROM _chrome_jetstream_3_subtest_score
GROUP BY top_level_name, name;
-- Calculate the score for each top-level benchmark.
---
-- If a benchmark is grouped, its score is the geometric mean of its children's
-- scores. Otherwise, for ungrouped benchmarks, their score is the top-level
-- score.
CREATE PERFETTO TABLE chrome_jetstream_3_benchmark_score (
-- The top-level benchmark group name.
top_level_name STRING,
-- The calculated score for the top-level benchmark.
score DOUBLE
) AS
SELECT
top_level_name,
EXP(AVG(LN(score))) AS score
FROM _chrome_jetstream_3_leaf_benchmark_score
GROUP BY top_level_name;
-- Overall JetStream 3 score.
--
-- The final score is the geometric mean of all top-level benchmark scores.
CREATE PERFETTO FUNCTION chrome_jetstream_3_score()
-- The overall JetStream 3 score.
RETURNS DOUBLE AS
SELECT
EXP(AVG(LN(score)))
FROM chrome_jetstream_3_benchmark_score;