Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 40 additions & 46 deletions JetStreamDriver.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = { };
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
26 changes: 16 additions & 10 deletions tests/unit-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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++) {
Expand All @@ -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) {
Expand All @@ -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();
Expand Down
Loading