diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 84cdd5cd..7a4e2d4e 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -201,11 +201,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 = { }; @@ -216,36 +218,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; @@ -451,15 +423,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; @@ -2273,34 +2239,62 @@ for (const benchmark of BENCHMARKS) { } } -this.JetStream = new Driver(); - function processTestList(testList) { let benchmarkNames = []; + let benchmarks = []; if (testList instanceof Array) benchmarkNames = testList; else benchmarkNames = testList.split(/[\s,]/); - for (let name of benchmarkNames) { - name = name.toLowerCase(); + for (const name of benchmarkNames) { if (benchmarksByTag.has(name)) - globalThis.JetStream.enableBenchmarksByTag(name); + benchmarks.push(...findBenchmarksByTag(name)); else - globalThis.JetStream.enableBenchmarksByName(name); + benchmarks.push(findBenchmarkByName(name)); } + return benchmarks; +} + + +function findBenchmarkByName(name) { + const benchmark = benchmarksByName.get(name.toLowerCase()); + + if (!benchmark) + throw new Error(`Couldn't find benchmark named "${name}"`); + + return benchmark; } + +function findBenchmarksByTag(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 (globalThis.testList?.length) { - processTestList(globalThis.testList); + benchmarks = processTestList(globalThis.testList); } else { - globalThis.JetStream.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 f8efd23a..bda9de98 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 = findBenchmarksByTag("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(findBenchmarksByTag("Default")); + const driverB = new Driver(findBenchmarksByTag("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) { @@ -66,6 +62,16 @@ function assertEquals(actual, expected, message) { })(); +(function testDriverEnableDuplicateAndSort() { + const benchmarks = [...findBenchmarksByTag("wasm"), ...findBenchmarksByTag("wasm")]; + assertTrue(benchmarks.length > 0); + const uniqueBenchmarks = new Set(benchmarks); + assertFalse(uniqueBenchmarks.size == benchmarks.length); + const driver = new Driver(benchmarks); + assertEquals(driver.benchmarks.length, uniqueBenchmarks.size); +})(); + + (function testBenchmarkSubScores() { for (const benchmark of BENCHMARKS) { const subScores = benchmark.subScores();