blob: 3199b06fde24bfb2ad533d98d037fea1e2bbf919 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src='../resources/runner.js'></script>
</head>
<body>
<script>
// serviceWorkerPerfTools is defined in service_worker_perf.js.
serviceWorkerPerfTools.enable();
let isDone = false;
function testDone() {
isDone = true;
serviceWorkerPerfTools.quit();
}
function addIframe(url) {
return new Promise((resolve) => {
var frame = document.createElement('iframe');
frame.src = url;
frame.onload = () => { resolve(frame); };
document.body.appendChild(frame);
});
}
function waitForWorkerActive(worker) {
return new Promise((resolve) => {
worker.addEventListener('statechange', () => {
if (worker.state == 'activated')
resolve();
});
});
}
async function runTest() {
const script = '/service_worker/resources/fetch-service-worker.js';
const scope = '/service_worker/resources/';
const client = '/service_worker/resources/simple.html';
const resource = '/service_worker/resources/data/1K_0.txt';
const registration = await navigator.serviceWorker.register(
script, { scope: scope });
await waitForWorkerActive(registration.installing);
const frame = await addIframe(client);
while (!isDone) {
await serviceWorkerPerfTools.stopWorkers();
const startTime = performance.now();
const response = await frame.contentWindow.fetch(resource);
PerfTestRunner.measureValueAsync(performance.now() - startTime);
}
return;
}
PerfTestRunner.startMeasureValuesAsync({
description: 'Measure the performance of fetch with service worker' +
' not started.',
unit: 'ms',
run: runTest,
done: testDone,
iterationCount: 30
});
</script>
</body>
</html>