| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| <link rel="import" href="/base/raf.html"> |
| <script> |
| 'use strict'; |
| |
| tv.b.unittest.testSuite(function() { |
| var fakeNow = undefined; |
| function withFakeWindowPerformanceNow(func) { |
| var oldNow = window.performance.now; |
| try { |
| window.performance.now = function() { return fakeNow; }; |
| func(); |
| } finally { |
| window.performance.now = oldNow; |
| } |
| } |
| |
| test('runIdleTaskWhileIdle', function() { |
| withFakeWindowPerformanceNow(function() { |
| tv.b.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue. |
| |
| var rafRan = false; |
| tv.b.requestAnimationFrame(function() { |
| rafRan = true; |
| }); |
| var idleRan = false; |
| tv.b.requestIdleCallback(function() { |
| idleRan = true; |
| }); |
| fakeNow = 0; |
| tv.b.forcePendingRAFTasksToRun(fakeNow); |
| assert.isFalse(idleRan); |
| assert.isTrue(rafRan); |
| tv.b.forcePendingRAFTasksToRun(fakeNow); |
| assert.isTrue(idleRan); |
| }); |
| }); |
| |
| test('twoShortIdleCallbacks', function() { |
| withFakeWindowPerformanceNow(function() { |
| tv.b.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue. |
| |
| var idle1Ran = false; |
| var idle2Ran = false; |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 1; |
| idle1Ran = true; |
| }); |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 1; |
| idle2Ran = true; |
| }); |
| fakeNow = 0; |
| tv.b.forcePendingRAFTasksToRun(fakeNow); |
| assert.isTrue(idle1Ran); |
| assert.isTrue(idle2Ran); |
| }); |
| }); |
| |
| |
| test('oneLongOneShortIdleCallback', function() { |
| withFakeWindowPerformanceNow(function() { |
| tv.b.forcePendingRAFTasksToRun(100000); // Clear current RAF task queue. |
| |
| var idle1Ran = false; |
| var idle2Ran = false; |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 100; |
| idle1Ran = true; |
| }); |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 1; |
| idle2Ran = true; |
| }); |
| fakeNow = 0; |
| tv.b.forcePendingRAFTasksToRun(fakeNow); |
| assert.isTrue(idle1Ran); |
| assert.isFalse(idle2Ran); |
| |
| // Reset idle1Ran to verify that it dosn't run again. |
| idle1Ran = false; |
| |
| // Now run. idle2 should now run. |
| tv.b.forcePendingRAFTasksToRun(fakeNow); |
| assert.isFalse(idle1Ran); |
| assert.isTrue(idle2Ran); |
| }); |
| }); |
| |
| test('buggyPerformanceNowDoesNotBlockIdleTasks', function() { |
| withFakeWindowPerformanceNow(function() { |
| tv.b.forcePendingRAFTasksToRun(); // Clear current RAF task queue. |
| |
| var idle1Ran = false; |
| var idle2Ran = false; |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 100; |
| idle1Ran = true; |
| }); |
| tv.b.requestIdleCallback(function() { |
| fakeNow += 1; |
| idle2Ran = true; |
| }); |
| fakeNow = 10000; |
| tv.b.forcePendingRAFTasksToRun(0); |
| assert.isTrue(idle1Ran); |
| assert.isFalse(idle2Ran); |
| |
| // Reset idle1Ran to verify that it dosn't run again. |
| idle1Ran = false; |
| |
| // Now run. idle2 should now run. |
| tv.b.forcePendingRAFTasksToRun(0); |
| assert.isFalse(idle1Ran); |
| assert.isTrue(idle2Ran); |
| }); |
| }); |
| |
| }); |
| </script> |