blob: 9743287700c59e867973d4436605cc260717084d [file] [log] [blame]
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('<a href="https://bugs.webkit.org/show_bug.cgi?id=98474">Bug 98474</a>: Throttle DOM timers on hidden pages.');
var jsTestIsAsync = true;
var previousTime = new Date().getTime();
var timerCount = 0;
var firstTimerWhileHidden = true;
var isPageVisible = true;
var timeoutInterval = 100;
var tolerance = 20;
var timerAlignmentInterval = 1000;
function testTimer()
{
var date = new Date();
var time = date.getTime();
if (!isPageVisible) {
if (firstTimerWhileHidden) {
firstTimerIntervalWhilePageHidden = time - previousTime;
var minValue = timeoutInterval - tolerance;
shouldBeGreaterThanOrEqual("firstTimerIntervalWhilePageHidden", minValue.toString());
var maxValue = timeoutInterval + timerAlignmentInterval + tolerance;
shouldBeTrue("firstTimerIntervalWhilePageHidden <= " + maxValue);
firstTimerWhileHidden = false;
} else {
timerIntervalWhilePageHidden = time - previousTime;
shouldBeCloseTo("timerIntervalWhilePageHidden", timerAlignmentInterval, tolerance);
}
} else {
timerIntervalWhilePageVisible = time - previousTime;
shouldBeCloseTo("timerIntervalWhilePageVisible", timeoutInterval, tolerance);
}
timerCount++;
previousTime = time;
if (timerCount == 1) {
testRunner.setPageVisibility("hidden");
isPageVisible = false;
} else if (timerCount == 3) {
testRunner.resetPageVisibility();
isPageVisible = true;
} else if (timerCount >= 4){
finishJSTest();
return;
}
setTimeout(testTimer, timeoutInterval);
}
function runTest()
{
if (!window.testRunner) {
debug('This test requires testRunner');
return;
}
testRunner.overridePreference("WebKitHiddenPageDOMTimerThrottlingEnabled", 1);
var timeoutIntervalSpans = document.getElementsByClassName('timeoutInterval');
for (var i = 0; i < timeoutIntervalSpans.length; i++)
timeoutIntervalSpans[i].innerText = timeoutInterval;
document.getElementById('alignmentInterval').innerText = timerAlignmentInterval / 1000;
testRunner.dumpAsText();
setTimeout(testTimer, timeoutInterval);
}
</script>
</head>
<body onload="runTest()">
<p>
This test measures the time taken to fire a <span class="timeoutInterval"></span>ms DOM Timer when the page visibility is set to "visible", "hidden" and then back to "visible". Due to hidden page timer throttling, the timer should fire close to <span id="alignmentInterval"></span>s when page is hidden. And it should fire close to <span class="timeoutInterval"></span>ms, when the page is visible.
</p>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>