diff options
Diffstat (limited to '')
-rw-r--r-- | testing/web-platform/tests/requestidlecallback/callback-idle-periods.html | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/testing/web-platform/tests/requestidlecallback/callback-idle-periods.html b/testing/web-platform/tests/requestidlecallback/callback-idle-periods.html new file mode 100644 index 0000000000..3c2de61bfe --- /dev/null +++ b/testing/web-platform/tests/requestidlecallback/callback-idle-periods.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>window.requestIdleCallback callback behavior during idle periods.</title> +<meta name="timeout" content="long"> +<link rel="author" title="Ross McIlroy" href="mailto:rmcilroy@chromium.org" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +async_test(function() { + // Check that if an idle callback calls requestIdleCallback, the new callback + // doesn't get the same deadline (i.e., runs in a new idle period). + var previous_deadline = undefined; + var idle_callbacks_remaining = 10; + var rIC = this.step_func(function(deadline) { + var now = performance.now(); + var remaining = deadline.timeRemaining(); + var new_deadline = now + remaining; + if (previous_deadline != undefined) { + assert_true(new_deadline > previous_deadline, "A requestIdleCallback scheduled during an idle period should be called back with a deadline greater than that in the current idle period."); + } + + // Schedule a new requestIdleCallback. + if (--idle_callbacks_remaining > 0) { + previous_deadline = new_deadline; + requestIdleCallback(rIC); + } else { + this.done(); + } + }); + + // Spin an empty rAF loop to cause an idle period each frame. + var idle_task_posted = false; + requestAnimationFrame(function rAFLoop() { + if (!idle_task_posted) { + requestIdleCallback(rIC); + idle_task_posted = true; + } + requestAnimationFrame(rAFLoop); + }); +}, 'Check that if an idle callback calls requestIdleCallback the new callback doesn\'t run in the current idle period.'); +</script> +<h1>Test of requestIdleCallback idle period behavior</h1> +<p>This test validates that window.requestIdleCallback deals with callbacks during idle periods correctly.</p> +<div id="log"></div> |