chore(tests): update flaky timer test (#22701)

This test was flaky after landing the new timer rewrite.
This commit is contained in:
Matt Mastracci 2024-03-04 19:45:51 -07:00 committed by GitHub
parent d9fa2dd550
commit c99a0492b7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -228,24 +228,30 @@ Deno.test(function intervalCancelInvalidSilentFail() {
clearInterval(2147483647);
});
// If a repeating timer is dispatched, the next interval that should first is based on
// when the timer is dispatched, not when the timer handler completes.
Deno.test(async function callbackTakesLongerThanInterval() {
const { promise, resolve } = Promise.withResolvers<void>();
let timeEndOfFirstCallback: number | undefined;
const interval = setInterval(() => {
if (timeEndOfFirstCallback === undefined) {
// First callback
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 300);
timeEndOfFirstCallback = Date.now();
} else {
// Second callback should be nearly instantaneous
assert(Date.now() - timeEndOfFirstCallback < 10);
clearInterval(interval);
resolve();
const output: number[] = [];
let last = 0;
const id = setInterval(() => {
const now = performance.now();
if (last > 0) {
output.push(now - last);
if (output.length >= 10) {
resolve();
clearTimeout(id);
}
}
last = now;
while (performance.now() - now < 300) {
/* hot loop */
}
}, 100);
await promise;
const total = output.reduce((t, n) => t + n, 0) / output.length;
console.log(output);
assert(total < 350 && total > 299, "Total was out of range: " + total);
});
// https://github.com/denoland/deno/issues/11398