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