From dfc6a7822fedff6e4c485c40a701dff2ece68250 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 14:46:04 +0200 Subject: [PATCH 1/6] Add benchmarks argument to Driver --- JetStreamDriver.js | 82 +++++++++++++++++++++------------------------ tests/unit-tests.js | 24 +++++++------ 2 files changed, 52 insertions(+), 54 deletions(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 7e0eb620..2ffbb84b 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -216,11 +216,13 @@ const fileLoader = (function() { })(); class Driver { - constructor() { + constructor(benchmarks) { this.isReady = false; this.isDone = false; this.errors = []; - this.benchmarks = new Set(); + // Make benchmark list unique and sort it. + this.benchmarks = Array.from(new Set(benchmarks)); + this.benchmarks.sort((a, b) => a.plan.name.toLowerCase() < b.plan.name.toLowerCase() ? 1 : -1); // TODO: Cleanup / remove / merge `blobDataCache` and `loadCache` vs. // the global `fileLoader` cache. this.blobDataCache = { }; @@ -231,36 +233,6 @@ class Driver { this.counter.failedPreloadResources = 0; } - enableBenchmark(benchmark) { - // TODO: Remove, make `this.benchmarks` immutable and set it once in the - // ctor instead of this and the global `addBenchmarksBy*` functions. - this.benchmarks.add(benchmark); - } - - enableBenchmarksByName(name) { - const benchmark = benchmarksByName.get(name.toLowerCase()); - - if (!benchmark) - throw new Error(`Couldn't find benchmark named "${name}"`); - - this.enableBenchmark(benchmark); - } - - enableBenchmarksByTag(tag, excludeTags) { - const benchmarks = benchmarksByTag.get(tag.toLowerCase()); - - if (!benchmarks) { - const validTags = Array.from(benchmarksByTag.keys()).join(", "); - throw new Error(`Couldn't find tag named: ${tag}.\n Choices are ${validTags}`); - } - - for (const benchmark of benchmarks) { - if (excludeTags && benchmark.hasAnyTag(...excludeTags)) - continue - this.enableBenchmark(benchmark); - } - } - async start() { let statusElement = false; let summaryElement = false; @@ -466,15 +438,9 @@ class Driver { }); } - initializeBenchmarks() { - this.benchmarks = Array.from(this.benchmarks); - this.benchmarks.sort((a, b) => a.plan.name.toLowerCase() < b.plan.name.toLowerCase() ? 1 : -1); - } - async initialize() { if (isInBrowser) window.addEventListener("error", (e) => this.pushError("driver startup", e.error)); - this.initializeBenchmarks(); await this.prefetchResources(); this.prepareToRun(); this.isReady = true; @@ -2344,12 +2310,12 @@ for (const benchmark of BENCHMARKS) { } } -this.JetStream = new Driver(); function processTestList(testList) { let benchmarkNames = []; + let benchmarks = []; if (testList instanceof Array) benchmarkNames = testList; @@ -2359,21 +2325,49 @@ function processTestList(testList) for (let name of benchmarkNames) { name = name.toLowerCase(); if (benchmarksByTag.has(name)) - globalThis.JetStream.enableBenchmarksByTag(name); + benchmarks.push(...enableBenchmarksByTag(name)); else - globalThis.JetStream.enableBenchmarksByName(name); + benchmarks.push(enableBenchmarkByName(name)); } + return benchmarks; +} + + +function enableBenchmarkByName(name) { + const benchmark = benchmarksByName.get(name.toLowerCase()); + + if (!benchmark) + throw new Error(`Couldn't find benchmark named "${name}"`); + + return benchmark; } +function enableBenchmarksByTag(tag, excludeTags) { + let benchmarks = benchmarksByTag.get(tag.toLowerCase()); + if (!benchmarks) { + const validTags = Array.from(benchmarksByTag.keys()).join(", "); + throw new Error(`Couldn't find tag named: ${tag}.\n Choices are ${validTags}`); + } + if (excludeTags) { + benchmarks = benchmarks.filter(benchmark => { + return !benchmark.hasAnyTag(...excludeTags); + }); + } + return benchmarks; +} + +let benchmarks = []; const defaultDisabledTags = []; // FIXME: add better support to run Worker tests in shells. if (!isInBrowser) defaultDisabledTags.push("WorkerTests"); if (typeof testList !== "undefined") { - processTestList(testList); + benchmarks = processTestList(testList); } else if (customTestList.length) { - processTestList(customTestList); + benchmarks = processTestList(customTestList); } else { - globalThis.JetStream.enableBenchmarksByTag("Default", defaultDisabledTags) + benchmarks = enableBenchmarksByTag("Default", defaultDisabledTags) } + +this.JetStream = new Driver(benchmarks); \ No newline at end of file diff --git a/tests/unit-tests.js b/tests/unit-tests.js index 7260a3f6..f7d9a9e0 100644 --- a/tests/unit-tests.js +++ b/tests/unit-tests.js @@ -38,10 +38,8 @@ function assertEquals(actual, expected, message) { (function testDriverBenchmarksOrder() { - const driver = new Driver(); - driver.enableBenchmarksByTag("all"); - assertEquals(driver.benchmarks.size, BENCHMARKS.length); - driver.initializeBenchmarks(); + const benchmarks = enableBenchmarksByTag("all"); + const driver = new Driver(benchmarks); assertEquals(driver.benchmarks.length, BENCHMARKS.length); const names = driver.benchmarks.map(b => b.name.toLowerCase()).sort().reverse(); for (let i = 0; i < names.length; i++) { @@ -51,12 +49,10 @@ function assertEquals(actual, expected, message) { (function testEnableByTag() { - const driverA = new Driver(); - const driverB = new Driver(); - driverA.enableBenchmarksByTag("Default"); - driverB.enableBenchmarksByTag("default"); - assertTrue(driverA.benchmarks.size > 0); - assertEquals(driverA.benchmarks.size, driverB.benchmarks.size); + const driverA = new Driver(enableBenchmarksByTag("Default")); + const driverB = new Driver(enableBenchmarksByTag("default")); + assertTrue(driverA.benchmarks.length > 0); + assertEquals(driverA.benchmarks.length, driverB.benchmarks.length); const enabledBenchmarkNames = new Set( Array.from(driverA.benchmarks).map(b => b.name)); for (const benchmark of BENCHMARKS) { @@ -64,3 +60,11 @@ function assertEquals(actual, expected, message) { assertTrue(enabledBenchmarkNames.has(benchmark.name)); } })(); + +(function testDriverEnableDuplicateAndSort() { + const benchmarks = [...enableBenchmarksByTag("wasm"), ...enableBenchmarksByTag("wasm")]; + const uniqueBenchmarks = new Set(benchmarks); + assertFalse(uniqueBenchmarks.size, benchmarks.length); + const driver = new Driver(benchmarks); + assertEquals(driver.benchmarks.length, uniqueBenchmarks.size); +}) From dca4a9b0ab79d6c6a4edc63716985777ddca9ae2 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 14:47:26 +0200 Subject: [PATCH 2/6] add newline --- JetStreamDriver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 2ffbb84b..501ccc37 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2370,4 +2370,4 @@ if (typeof testList !== "undefined") { benchmarks = enableBenchmarksByTag("Default", defaultDisabledTags) } -this.JetStream = new Driver(benchmarks); \ No newline at end of file +this.JetStream = new Driver(benchmarks); From 3af9ea26bdffe1cec45fa2da82fdbfcf96e036e7 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 14:48:42 +0200 Subject: [PATCH 3/6] format --- JetStreamDriver.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 501ccc37..20f4b9d7 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2311,7 +2311,6 @@ for (const benchmark of BENCHMARKS) { } - function processTestList(testList) { let benchmarkNames = []; @@ -2332,7 +2331,6 @@ function processTestList(testList) return benchmarks; } - function enableBenchmarkByName(name) { const benchmark = benchmarksByName.get(name.toLowerCase()); From f0d331678de019c86b770336cd35dc1f8bbefdb8 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 14:48:58 +0200 Subject: [PATCH 4/6] formatting --- JetStreamDriver.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 20f4b9d7..cd04336b 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2331,6 +2331,7 @@ function processTestList(testList) return benchmarks; } + function enableBenchmarkByName(name) { const benchmark = benchmarksByName.get(name.toLowerCase()); @@ -2340,6 +2341,7 @@ function enableBenchmarkByName(name) { return benchmark; } + function enableBenchmarksByTag(tag, excludeTags) { let benchmarks = benchmarksByTag.get(tag.toLowerCase()); if (!benchmarks) { @@ -2354,6 +2356,7 @@ function enableBenchmarksByTag(tag, excludeTags) { return benchmarks; } + let benchmarks = []; const defaultDisabledTags = []; // FIXME: add better support to run Worker tests in shells. From 8e4031c44577c5dfcc2bbc0a4ab07919a2d88d0a Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 15:42:12 +0200 Subject: [PATCH 5/6] address comments --- JetStreamDriver.js | 10 +++++----- tests/unit-tests.js | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index cd04336b..6f1a52c1 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2324,15 +2324,15 @@ function processTestList(testList) for (let name of benchmarkNames) { name = name.toLowerCase(); if (benchmarksByTag.has(name)) - benchmarks.push(...enableBenchmarksByTag(name)); + benchmarks.push(...findBenchmarksByTag(name)); else - benchmarks.push(enableBenchmarkByName(name)); + benchmarks.push(findBenchmarkByName(name)); } return benchmarks; } -function enableBenchmarkByName(name) { +function findBenchmarkByName(name) { const benchmark = benchmarksByName.get(name.toLowerCase()); if (!benchmark) @@ -2342,7 +2342,7 @@ function enableBenchmarkByName(name) { } -function enableBenchmarksByTag(tag, excludeTags) { +function findBenchmarksByTag(tag, excludeTags) { let benchmarks = benchmarksByTag.get(tag.toLowerCase()); if (!benchmarks) { const validTags = Array.from(benchmarksByTag.keys()).join(", "); @@ -2368,7 +2368,7 @@ if (typeof testList !== "undefined") { } else if (customTestList.length) { benchmarks = processTestList(customTestList); } else { - benchmarks = enableBenchmarksByTag("Default", defaultDisabledTags) + benchmarks = findBenchmarksByTag("Default", defaultDisabledTags) } this.JetStream = new Driver(benchmarks); diff --git a/tests/unit-tests.js b/tests/unit-tests.js index f7d9a9e0..ab61868d 100644 --- a/tests/unit-tests.js +++ b/tests/unit-tests.js @@ -38,7 +38,7 @@ function assertEquals(actual, expected, message) { (function testDriverBenchmarksOrder() { - const benchmarks = enableBenchmarksByTag("all"); + const benchmarks = findBenchmarksByTag("all"); const driver = new Driver(benchmarks); assertEquals(driver.benchmarks.length, BENCHMARKS.length); const names = driver.benchmarks.map(b => b.name.toLowerCase()).sort().reverse(); @@ -49,8 +49,8 @@ function assertEquals(actual, expected, message) { (function testEnableByTag() { - const driverA = new Driver(enableBenchmarksByTag("Default")); - const driverB = new Driver(enableBenchmarksByTag("default")); + const driverA = new Driver(findBenchmarksByTag("Default")); + const driverB = new Driver(findBenchmarksByTag("default")); assertTrue(driverA.benchmarks.length > 0); assertEquals(driverA.benchmarks.length, driverB.benchmarks.length); const enabledBenchmarkNames = new Set( @@ -62,7 +62,7 @@ function assertEquals(actual, expected, message) { })(); (function testDriverEnableDuplicateAndSort() { - const benchmarks = [...enableBenchmarksByTag("wasm"), ...enableBenchmarksByTag("wasm")]; + const benchmarks = [...findBenchmarksByTag("wasm"), ...findBenchmarksByTag("wasm")]; const uniqueBenchmarks = new Set(benchmarks); assertFalse(uniqueBenchmarks.size, benchmarks.length); const driver = new Driver(benchmarks); From c41ccaeb4fd9ca17271c59d5d88e822e34257802 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Tue, 29 Jul 2025 19:07:52 +0200 Subject: [PATCH 6/6] remove toLowerCase --- JetStreamDriver.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 6f1a52c1..4250cb58 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2321,8 +2321,7 @@ function processTestList(testList) else benchmarkNames = testList.split(/[\s,]/); - for (let name of benchmarkNames) { - name = name.toLowerCase(); + for (const name of benchmarkNames) { if (benchmarksByTag.has(name)) benchmarks.push(...findBenchmarksByTag(name)); else