blob: 1e5ef1cdffecf639363aa06b72665f54ccce1156 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
"use strict"
// https://w3c.github.io/hr-time/#time-origin
async_test(function(test) {
// Cache global time before starting worker
const globalTimeOrigin = performance.timeOrigin;
const globalNowBeforeWorkerStart = performance.now();
// Start worker and retrieve time
const workerScript = "postMessage({timeOrigin: performance.timeOrigin, now: performance.now()})";
const blob = new Blob([workerScript]);
let worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener("message", test.step_func_done(function(event) {
const workerTimeOrigin = event.data.timeOrigin;
const workerNow = event.data.now;
assert_not_equals(workerTimeOrigin, 0, "worker timeOrigin must not be 0");
assert_not_equals(performance.timeOrigin, 0, "Document timeOrigin must not be 0");
assert_equals(globalTimeOrigin, performance.timeOrigin, "timeOrigin should not be changed in same document mode");
assert_less_than(globalTimeOrigin, workerTimeOrigin, "Document timeOrigin must be earlier than worker timeOrigin");
// Document and worker's now() start from their respective timeOrigins.
const timeDiff = workerTimeOrigin - globalTimeOrigin; // convert worker's time to Document time.
assert_less_than(globalTimeOrigin + globalNowBeforeWorkerStart, globalTimeOrigin + timeDiff + workerNow, "Document old now is earlier than worker now.");
// Comparing timing between Document and worker threads could be delicate as it relies on the thread implementation and could be subject to race conditions.
}));
}, 'timeOrigin and now() should be correctly ordered between window and worker');
|