Skip to content

Commit 1a02912

Browse files
committed
wipi
1 parent 4f874f4 commit 1a02912

File tree

4 files changed

+72
-16
lines changed

4 files changed

+72
-16
lines changed

JetStreamDriver.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,18 @@ class Driver {
279279
}
280280

281281
benchmark.updateUIAfterRun();
282+
console.log(benchmark.name)
282283

283284
if (isInBrowser) {
285+
globalThis.dispatchEvent(new CustomEvent("JetStreamBenchmarkDone", {
286+
detail: {
287+
name: benchmark.name,
288+
results: {
289+
score: benchmark.score,
290+
...benchmark.subScores(),
291+
}
292+
}
293+
}));
284294
const cache = JetStream.blobDataCache;
285295
for (const file of benchmark.plan.files) {
286296
const blobData = cache[file];

package-lock.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"eslint": "^8.38.0",
3434
"http-server": "^14.1.1",
3535
"prettier": "^2.8.3",
36-
"selenium-webdriver": "^4.8.0",
36+
"selenium-webdriver": "^4.28.1",
3737
"es-main":"^1.3.0",
3838
"local-web-server": "^5.4.0"
3939
}

tests/run.mjs

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#! /usr/bin/env node
22
/* eslint-disable-next-line no-unused-vars */
33
import serve from "./server.mjs";
4-
import { Builder, Capabilities } from "selenium-webdriver";
4+
import { Builder, Capabilities, Browser, logging} from "selenium-webdriver";
55
import commandLineArgs from "command-line-args";
66
import commandLineUsage from "command-line-usage";
77
import assert from "assert";
@@ -64,7 +64,6 @@ switch (BROWSER) {
6464
printHelp(`Invalid browser "${BROWSER}", choices are: "safari", "firefox", "chrome", "edge"`);
6565
}
6666
}
67-
6867
process.on("unhandledRejection", (err) => {
6968
console.error(err);
7069
process.exit(1);
@@ -78,28 +77,75 @@ const PORT = options.port;
7877
const server = await serve(PORT);
7978

8079
async function testEnd2End() {
81-
const driver = await new Builder().withCapabilities(capabilities).build();
80+
var pref = new logging.Preferences();
81+
pref.setLevel('browser', logging.Level.ALL);
82+
pref.setLevel('driver', logging.Level.ALL);
83+
pref.setLevel('performance', logging.Level.ALL);
84+
const driver = await new Builder()
85+
.withCapabilities(capabilities)
86+
.setLoggingPrefs(pref)
87+
.build();
8288
let results;
8389
try {
90+
console.log("Preparing JetStream");
8491
await driver.get(`http://localhost:${PORT}/index.html?worstCaseCount=2&iterationCount=3`);
8592
await driver.executeAsyncScript((callback) => {
86-
globalThis.addEventListener("JetStreamReady", callback);
93+
globalThis.addEventListener("JetStreamReady", () => callback());
8794
// We might not get a chance to install the on-ready listener, thus
8895
// we also check if the runner is ready synchronously.
8996
if (globalThis?.JetStream?.isReady)
9097
callback()
9198
});
92-
await driver.manage().setTimeouts({ script: 60_000 });
93-
results = await driver.executeAsyncScript((callback) => {
94-
globalThis.addEventListener("JetStreamDone", event => callback(event.detail));
95-
JetStream.start();
96-
});
99+
results = await benchmarkResults(driver)
97100
} finally {
98101
console.log("\nTests complete!");
99-
console.log(results)
100102
driver.quit();
101103
server.close();
102104
}
103105
}
104106

107+
async function benchmarkResults(driver) {
108+
console.log("Starting JetStream");
109+
await driver.manage().setTimeouts({ script: 60_000 });
110+
await driver.executeScript(() => {
111+
globalThis.JetStreamDone = false;
112+
globalThis.JetStreamResults = [];
113+
globalThis.addEventListener("JetStreamDone", event => {
114+
globalThis.JetStreamDone = true;
115+
});
116+
globalThis.addEventListener("JetStreamBenchmarkDone", event => {
117+
globalThis.JetStreamResults.push(event.detail);
118+
});
119+
JetStream.start();
120+
});
121+
122+
await new Promise(resolve => pollIncrementalResults(driver, resolve));
123+
const resultString = await driver.executeScript(() => {
124+
if (globalThis.JetStreamDone)
125+
return JSON.stringify(JetStream.resultsObject());
126+
});
127+
return JSON.parse(resultString);
128+
}
129+
130+
const UPDATE_INTERVAL = 250;
131+
async function pollIncrementalResults(driver, resolve) {
132+
const internalId = setInterval(async function logResult() {
133+
const {done, results} = await driver.executeAsyncScript((callback) => {
134+
callback({
135+
done: globalThis.JetStreamDone,
136+
results: JSON.stringify(globalThis.JetStreamResults.splice(0, Infinity))
137+
});
138+
});
139+
JSON.parse(results).forEach(logBenchmarkResult);
140+
if (done) {
141+
clearInterval(internalId);
142+
resolve()
143+
}
144+
}, UPDATE_INTERVAL)
145+
}
146+
147+
function logBenchmarkResult(benchmarkResult) {
148+
console.log(benchmarkResult.name, benchmarkResult.results)
149+
}
150+
105151
setImmediate(testEnd2End);

0 commit comments

Comments
 (0)