Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / tvcm / src / tvcm / raf_test.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7 <link rel="import" href="/tvcm/raf.html">
8 <script>
9 'use strict';
10
11 tvcm.unittest.testSuite(function() {
12   var fakeNow = undefined;
13   function withFakeWindowPerformanceNow(func) {
14     var oldNow = window.performance.now;
15     try {
16       window.performance.now = function() { return fakeNow; };
17       func();
18     } finally {
19       window.performance.now = oldNow;
20     }
21   }
22
23   test('runIdleTaskWhileIdle', function() {
24     withFakeWindowPerformanceNow(function() {
25       tvcm.forcePendingRAFTasksToRun(100000);  // Clear current RAF task queue.
26
27       var rafRan = false;
28       tvcm.requestAnimationFrame(function() {
29         rafRan = true;
30       });
31       var idleRan = false;
32       tvcm.requestIdleCallback(function() {
33         idleRan = true;
34       });
35       fakeNow = 0;
36       tvcm.forcePendingRAFTasksToRun(fakeNow);
37       assertFalse(idleRan);
38       assertTrue(rafRan);
39       tvcm.forcePendingRAFTasksToRun(fakeNow);
40       assertTrue(idleRan);
41     });
42   });
43
44   test('twoShortIdleCallbacks', function() {
45     withFakeWindowPerformanceNow(function() {
46       tvcm.forcePendingRAFTasksToRun(100000);  // Clear current RAF task queue.
47
48       var idle1Ran = false;
49       var idle2Ran = false;
50       tvcm.requestIdleCallback(function() {
51         fakeNow += 1;
52         idle1Ran = true;
53       });
54       tvcm.requestIdleCallback(function() {
55         fakeNow += 1;
56         idle2Ran = true;
57       });
58       fakeNow = 0;
59       tvcm.forcePendingRAFTasksToRun(fakeNow);
60       assertTrue(idle1Ran);
61       assertTrue(idle2Ran);
62     });
63   });
64
65
66   test('oneLongOneShortIdleCallback', function() {
67     withFakeWindowPerformanceNow(function() {
68       tvcm.forcePendingRAFTasksToRun(100000);  // Clear current RAF task queue.
69
70       var idle1Ran = false;
71       var idle2Ran = false;
72       tvcm.requestIdleCallback(function() {
73         fakeNow += 100;
74         idle1Ran = true;
75       });
76       tvcm.requestIdleCallback(function() {
77         fakeNow += 1;
78         idle2Ran = true;
79       });
80       fakeNow = 0;
81       tvcm.forcePendingRAFTasksToRun(fakeNow);
82       assertTrue(idle1Ran);
83       assertFalse(idle2Ran);
84
85       // Reset idle1Ran to verify that it dosn't run again.
86       idle1Ran = false;
87
88       // Now run. idle2 should now run.
89       tvcm.forcePendingRAFTasksToRun(fakeNow);
90       assertFalse(idle1Ran);
91       assertTrue(idle2Ran);
92     });
93   });
94
95   test('buggyPerformanceNowDoesNotBlockIdleTasks', function() {
96     withFakeWindowPerformanceNow(function() {
97       tvcm.forcePendingRAFTasksToRun();  // Clear current RAF task queue.
98
99       var idle1Ran = false;
100       var idle2Ran = false;
101       tvcm.requestIdleCallback(function() {
102         fakeNow += 100;
103         idle1Ran = true;
104       });
105       tvcm.requestIdleCallback(function() {
106         fakeNow += 1;
107         idle2Ran = true;
108       });
109       fakeNow = 10000;
110       tvcm.forcePendingRAFTasksToRun(0);
111       assertTrue(idle1Ran);
112       assertFalse(idle2Ran);
113
114       // Reset idle1Ran to verify that it dosn't run again.
115       idle1Ran = false;
116
117       // Now run. idle2 should now run.
118       tvcm.forcePendingRAFTasksToRun(0);
119       assertFalse(idle1Ran);
120       assertTrue(idle2Ran);
121     });
122   });
123
124 });
125 </script>