Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / dom / timer-throttling-hidden-page.html
blob7b652ff1f1e024dae9540c7615c7db3eddd4ca47
1 <html>
2 <head>
3 <script src="../../resources/js-test.js"></script>
4 <script>
5 description('<a href="https://bugs.webkit.org/show_bug.cgi?id=98474">Bug 98474</a>: Throttle DOM timers on hidden pages and <a href="http://crbug.com/400343">bug 400343</a> prerender pages.');
7 var jsTestIsAsync = true;
8 var previousTime = 0;
9 var timerCount = 0;
10 var firstTimerWhileNotVisible = true;
11 var isPageVisible = true;
12 var timeoutInterval = 100;
13 var tolerance = 20;
14 var timerAlignmentInterval = 1000;
16 function testTimer()
18 var time = Date.now();
19 if (!isPageVisible) {
20 if (firstTimerWhileNotVisible) {
21 firstTimerIntervalWhilePageNotVisible = time - previousTime;
22 var minValue = timeoutInterval - tolerance;
23 shouldBeGreaterThanOrEqual("firstTimerIntervalWhilePageNotVisible", minValue.toString());
24 var maxValue = timeoutInterval + timerAlignmentInterval + tolerance;
25 shouldBeTrue("firstTimerIntervalWhilePageNotVisible <= " + maxValue);
26 firstTimerWhileNotVisible = false;
27 } else {
28 timerIntervalWhilePageNotVisible = time - previousTime;
29 shouldBeCloseTo("timerIntervalWhilePageNotVisible", timerAlignmentInterval, tolerance);
31 } else {
32 timerIntervalWhilePageVisible = time - previousTime;
33 shouldBeCloseTo("timerIntervalWhilePageVisible", timeoutInterval, tolerance);
36 timerCount++;
37 previousTime = time;
39 if (timerCount == 1) {
40 testRunner.setPageVisibility("hidden");
41 isPageVisible = false;
42 } else if (timerCount == 3) {
43 testRunner.setPageVisibility("visible");
44 isPageVisible = true;
45 } else if (timerCount == 5) {
46 testRunner.setPageVisibility("prerender");
47 isPageVisible = false;
48 firstTimerWhileNotVisible = true;
49 } else if (timerCount == 7) {
50 testRunner.setPageVisibility("visible");
51 isPageVisible = true;
52 } else if (timerCount >= 8){
53 finishJSTest();
54 return;
56 previousTime = Date.now();
57 setTimeout(testTimer, timeoutInterval);
60 function runTest()
62 if (!window.testRunner) {
63 debug('This test requires testRunner');
64 return;
67 var timeoutIntervalSpans = document.getElementsByClassName('timeoutInterval');
68 for (var i = 0; i < timeoutIntervalSpans.length; i++)
69 timeoutIntervalSpans[i].innerText = timeoutInterval;
71 document.getElementById('alignmentInterval').innerText = timerAlignmentInterval / 1000;
73 testRunner.dumpAsText();
74 previousTime = Date.now();
75 setTimeout(testTimer, timeoutInterval);
77 </script>
78 </head>
79 <body onload="runTest()">
80 <p>
81 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", "visible", "prerender" and then back to "visible". Due to page timer throttling, the timer should fire close to <span id="alignmentInterval"></span>s when page is hidden or prerender. And it should fire close to <span class="timeoutInterval"></span>ms, when the page is visible.
82 </p>
83 </body>
84 </html>