diff --git a/dom/base/test/test_timeout_clamp.html b/dom/base/test/test_timeout_clamp.html index e6cb8d87a98c..4f73762c40ac 100644 --- a/dom/base/test/test_timeout_clamp.html +++ b/dom/base/test/test_timeout_clamp.html @@ -74,9 +74,10 @@ async function runTests() { // 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(); @@ -84,9 +85,10 @@ async function runTests() { // 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(); @@ -97,9 +99,10 @@ async function runTests() { 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(); @@ -107,15 +110,22 @@ async function runTests() { // 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);