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.
7 tvcm.require('tvcm.raf');
9 tvcm.unittest.testSuite('tvcm.raf_test', function() {
10 var fakeNow = undefined;
11 function withFakeWindowPerformanceNow(func) {
12 var oldNow = window.performance.now;
14 window.performance.now = function() { return fakeNow; };
17 window.performance.now = oldNow;
21 test('runIdleTaskWhileIdle', function() {
22 withFakeWindowPerformanceNow(function() {
23 tvcm.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue.
26 tvcm.requestAnimationFrame(function() {
30 tvcm.requestIdleCallback(function() {
34 tvcm.forcePendingRAFTasksToRun(fakeNow);
37 tvcm.forcePendingRAFTasksToRun(fakeNow);
42 test('twoShortIdleCallbacks', function() {
43 withFakeWindowPerformanceNow(function() {
44 tvcm.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue.
48 tvcm.requestIdleCallback(function() {
52 tvcm.requestIdleCallback(function() {
57 tvcm.forcePendingRAFTasksToRun(fakeNow);
64 test('oneLongOneShortIdleCallback', function() {
65 withFakeWindowPerformanceNow(function() {
66 tvcm.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue.
70 tvcm.requestIdleCallback(function() {
74 tvcm.requestIdleCallback(function() {
79 tvcm.forcePendingRAFTasksToRun(fakeNow);
81 assertFalse(idle2Ran);
83 // Reset idle1Ran to verify that it dosn't run again.
86 // Now run. idle2 should now run.
87 tvcm.forcePendingRAFTasksToRun(fakeNow);
88 assertFalse(idle1Ran);
93 test('buggyPerformanceNowDoesNotBlockIdleTasks', function() {
94 withFakeWindowPerformanceNow(function() {
95 tvcm.forcePendingRAFTasksToRun(); // Clear current RAF task queue.
99 tvcm.requestIdleCallback(function() {
103 tvcm.requestIdleCallback(function() {
108 tvcm.forcePendingRAFTasksToRun(0);
109 assertTrue(idle1Ran);
110 assertFalse(idle2Ran);
112 // Reset idle1Ran to verify that it dosn't run again.
115 // Now run. idle2 should now run.
116 tvcm.forcePendingRAFTasksToRun(0);
117 assertFalse(idle1Ran);
118 assertTrue(idle2Ran);