Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 1 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /scheduler/tentative/yield/yield-priority-idle-callbacks.html - WPT Dashboard Interop Dashboard
<!doctype html>
<title>Scheduler: yield inheritance in requestIdleCallback</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
// Queues a requestIdleCallback that schedules 2 user-visible tasks, 2
// background tasks, another requestIdleCallback, and then yields 3 times using
// `yieldParams`.
//
// Returns {tasks, ids} where `tasks` is an array of promises associated with
// the tasks and `ids` is an array of task ids appended to by the scheduled
// tasks.
function postTestTasks() {
const ids = [];
const task = new Promise(resolve => {
requestIdleCallback(async () => {
ids.push('i1');
const subtasks = [];
subtasks.push(scheduler.postTask(() => { ids.push('uv1'); }));
subtasks.push(scheduler.postTask(() => { ids.push('uv2'); }));
subtasks.push(scheduler.postTask(() => { ids.push('bg1'); }, {priority: 'background'}));
subtasks.push(scheduler.postTask(() => { ids.push('bg2'); }, {priority: 'background'}));
subtasks.push(new Promise(resolve => {
requestIdleCallback(() => {
ids.push('i2');
resolve();
});
}));
for (let i = 1; i <= 3; i++) {
await scheduler.yield();
ids.push('y' + i);
}
await Promise.all(subtasks);
resolve();
});
});
return {task, ids};
}
const expected_inherited_task_order = 'i1,uv1,uv2,y1,y2,y3,bg1,bg2,i2';
promise_test(async t => {
const {task, ids} = postTestTasks();
await task;
assert_equals(ids.join(), expected_inherited_task_order);
}, 'requestIdleCallback() yields at background priority when inheriting signal');
</script>