Bug 1442940 Turn off jitter for dom/base/test/test_timeout_clamp.html which is (likely) causing intermittents r?baku
MozReview-Commit-ID: 9nfiBbqsATT
--- a/dom/base/test/test_timeout_clamp.html
+++ b/dom/base/test/test_timeout_clamp.html
@@ -69,54 +69,64 @@ async function runTests() {
// Things like pushPrefEnv() can use setTimeout() internally which may give
// us a nesting level. Clear the nesting level to start so this doesn't
// confuse the test.
await clearNestingLevel();
// Verify a setTimeout() chain clamps correctly
let start = performance.now();
await delayByTimeoutChain(expectedClampIteration);
- let delta = performance.now() - start;
+ let stop = performance.now();
+ let delta = stop - start;
- ok(delta >= clampDelayMS, "setTimeout() chain clamped");
+ ok(delta >= clampDelayMS, "setTimeout() chain clamped: " + stop + " - " + start + " = " + delta);
ok(delta < (2*clampDelayMS), "setTimeout() chain did not clamp twice");
await clearNestingLevel();
// Verify setInterval() clamps correctly
start = performance.now();
await delayByInterval(expectedClampIteration);
- delta = performance.now() - start;
+ stop = performance.now();
+ delta = stop - start;
- ok(delta >= clampDelayMS, "setInterval() clamped");
+ ok(delta >= clampDelayMS, "setInterval() clamped: " + stop + " - " + start + " = " + delta);
ok(delta < (2*clampDelayMS), "setInterval() did not clamp twice");
await clearNestingLevel();
// Verfy a setTimeout() chain will continue to clamp past the first
// expected iteration.
const expectedDelay = (1 + expectedClampIteration) * clampDelayMS;
start = performance.now();
await delayByTimeoutChain(2 * expectedClampIteration);
- delta = performance.now() - start;
+ stop = performance.now();
+ delta = stop - start;
- ok(delta >= expectedDelay, "setTimeout() chain continued to clamp");
+ ok(delta >= expectedDelay, "setTimeout() chain continued to clamp: " + stop + " - " + start + " = " + delta);
await clearNestingLevel();
// Verfy setInterval() will continue to clamp past the first expected
// iteration.
start = performance.now();
await delayByTimeoutChain(2 * expectedClampIteration);
- delta = performance.now() - start;
+ stop = performance.now();
+ delta = stop - start;
- ok(delta >= expectedDelay, "setInterval() continued to clamp");
+ ok(delta >= expectedDelay, "setInterval() continued to clamp: " + stop + " - " + start + " = " + delta);
SimpleTest.finish();
}
-SpecialPowers.pushPrefEnv({ 'set': [["dom.min_timeout_value", clampDelayMS]]},
- runTests);
+// It appears that it's possible to get unlucky with time jittering and fail this test.
+// If start is jittered upwards, everything executes very quickly, and delta has
+// a very high midpoint, we may have taken between 10 and 10.002 seconds to execute; but
+// it will appear to be 9.998. Turn off jitter (and add logging) to test this.
+SpecialPowers.pushPrefEnv({ 'set': [
+ ["dom.min_timeout_value", clampDelayMS],
+ ["privacy.resistFingerprinting.reduceTimerPrecision.jitter", false],
+ ]}, runTests);
</script>
</body>
</html>