Revision dd79be3ee575503e4e9595dfe8ce8141d8aedb72 authored by Hiroki Nakagawa on 22 March 2018, 05:53:36 UTC, committed by Chromium WPT Sync on 22 March 2018, 05:53:36 UTC
This CL supports ES Modules on DedicatedWorker behind the ModuleDedicatedWorker
flag and adds WPT tests.

With the flag, you can specify 'type' option on the constructor of
DedicatedWorker (i.e., new Worker) to start a dedicated worker as a module
script. On DedicatedWorkerGlobalScope, static import is available, but dynamic
import() hasn't been implemented yet.

Bug: 680046
Change-Id: I3aca350228ec07be7884c7a2eb8cd351e7fd6b6e
Reviewed-on: https://chromium-review.googlesource.com/967908
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544983}
1 parent 14f1aec
Raw File
callback-timeout-when-busy.html
<!DOCTYPE html>
<title>window.requestIdleCallback deals with timeouts correctly</title>
<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 whether requestIdleCallback with a timeout works when the event loop
  // is busy.
  var busy_loop_iterations_remaining = 10;  // Should take 20 * 40 = 400ms
  var idle_callback_scheduled;
  var idle_callback = this.step_func_done(function(deadline) {
    assert_false(deadline.didTimeout, "IdleDeadline.didTimeout MUST be false if requestIdleCallback wasn't scheduled due to a timeout");
    assert_equals(busy_loop_iterations_remaining, 0, "Busy event loop should be finished by the time we get scheduled");
  });

  var busy_loop_iterations_remaining = 10;  // Should take 20 * 40 = 400ms
  step_timeout(this.step_func(function busyLoop() {
    var start_time = performance.now();
    if (!idle_callback_scheduled) {
      idle_callback_scheduled = start_time;
      requestIdleCallback(idle_callback);
    }

    // Use up more than a frames worth of budget.
    while (performance.now() - start_time < 40) {
    }
    if (busy_loop_iterations_remaining > 0) {
      busy_loop_iterations_remaining--;
      step_timeout(busyLoop);
    }
  }));
}, 'requestIdleCallback not scheduled when event loop is busy.');

async_test(function() {
  // Check whether requestIdleCallback with a timeout works when the event loop
  // is busy.
  var busy_loop_iterations_remaining = 10;  // Should take 20 * 40 = 400ms
  var timeout = 200;
  var idle_callback_scheduled;
  var idle_callback = this.step_func_done(function(deadline) {
    var time_delta = performance.now() - idle_callback_scheduled;
    assert_true(time_delta >= timeout, "Should only have been run after timeout");
    assert_true(deadline.timeRemaining() == 0, "IdleDeadline.timeRemaining MUST be equal to zero if requestIdleCallback was scheduled due to a timeout");
    assert_true(deadline.didTimeout, "IdleDeadline.didTimeout MUST be true if requestIdleCallback was scheduled due to a timeout");
    assert_true(busy_loop_iterations_remaining > 0, "Busy event loop should still be going");
  });

  step_timeout(this.step_func(function busyLoop() {
    var start_time = performance.now();
    if (!idle_callback_scheduled) {
      idle_callback_scheduled = start_time;
      requestIdleCallback(idle_callback, { timeout: timeout });
    }

    // Use up more than a frames worth of budget.
    while (performance.now() - start_time < 40) {
    }
    if (busy_loop_iterations_remaining > 0) {
      busy_loop_iterations_remaining--;
      step_timeout(busyLoop);
    }
  }));
}, 'requestIdleCallback scheduled with timeout when event loop is busy.');

</script>
<h1>Test of requestIdleCallback timeout behavior</h1>
<div id="log"></div>
back to top