2 <title>window.requestIdleCallback deals with timeouts correctly
</title>
3 <link rel=
"author" title=
"Ross McIlroy" href=
"mailto:rmcilroy@chromium.org" />
4 <link rel=
"help" href=
"http://www.w3.org/TR/requestidlecallback/"/>
5 <script src=
"../../../../resources/testharness.js"></script>
6 <script src=
"../../../../resources/testharnessreport.js"></script>
7 <link rel=
"stylesheet" href=
"../../resources/testharness.css" />
10 async_test(function() {
11 // Check whether requestIdleCallback with a timeout works when the event loop
13 var busy_raf_loop_iterations_remaining
= 10; // Should take 20 * 40 = 400ms
14 var idle_callback_scheduled
;
15 var idle_callback
= this.step_func(function(deadline
) {
16 assert_false(deadline
.didTimeout
, "IdleDeadline.didTimeout MUST be false if requestIdleCallback wasn't scheduled due to a timeout");
17 assert_equals(busy_raf_loop_iterations_remaining
, 0, "Busy rAF loop should be finished by the time we get scheduled");
21 var busy_raf_loop_iterations_remaining
= 10; // Should take 20 * 40 = 400ms
22 requestAnimationFrame(this.step_func(function busyRAFLoop() {
23 var start_time
= performance
.now();
24 if (!idle_callback_scheduled
) {
25 idle_callback_scheduled
= start_time
;
26 requestIdleCallback(idle_callback
);
29 // Use up the whole frame budget.
30 while (performance
.now() - start_time
< 40) { }
31 if (busy_raf_loop_iterations_remaining
> 0) {
32 busy_raf_loop_iterations_remaining
--;
33 requestAnimationFrame(busyRAFLoop
);
36 }, 'requestIdleCallback not scheduled when event loop is busy.');
38 async_test(function() {
39 // Check whether requestIdleCallback with a timeout works when the event loop
41 var busy_raf_loop_iterations_remaining
= 10; // Should take 20 * 40 = 400ms
43 var idle_callback_scheduled
;
44 var idle_callback
= this.step_func(function(deadline
) {
45 var time_delta
= performance
.now() - idle_callback_scheduled
;
46 assert_true(time_delta
>= timeout
, "Should only have been run after timeout");
47 assert_true(deadline
.timeRemaining() == 0, "IdleDeadline.timeRemaining MUST be equal to zero if requestIdleCallback was scheduled due to a timeout");
48 assert_true(deadline
.didTimeout
, "IdleDeadline.didTimeout MUST be true if requestIdleCallback was scheduled due to a timeout");
49 assert_true(busy_raf_loop_iterations_remaining
> 0, "Busy rAF loop should still be going");
53 requestAnimationFrame(this.step_func(function busyRAFLoop() {
54 var start_time
= performance
.now();
55 if (!idle_callback_scheduled
) {
56 idle_callback_scheduled
= start_time
;
57 requestIdleCallback(idle_callback
, timeout
);
60 // Use up the whole frame budget.
61 while (performance
.now() - start_time
< 40) { }
62 if (busy_raf_loop_iterations_remaining
> 0) {
63 busy_raf_loop_iterations_remaining
--;
64 requestAnimationFrame(busyRAFLoop
);
67 }, 'requestIdleCallback scheduled with timeout when event loop is busy.');
71 <p>This test validates that window.requestIdleCallback deals with timeouts correctly.
</p>