task-signal-any-post-task-run-order.tentative.any.js (2897B)
1 // META: title=Scheduler: Tasks Run in Priority Order 2 // META: global=window,worker 3 4 promise_test(async t => { 5 const runOrder = []; 6 const schedule = (id, signal) => scheduler.postTask(() => { runOrder.push(id); }, {signal}); 7 8 const tasks = []; 9 tasks.push(schedule('B1', TaskSignal.any([], {priority: 'background'}))); 10 tasks.push(schedule('B2', TaskSignal.any([], {priority: 'background'}))); 11 tasks.push(schedule('UV1', TaskSignal.any([], {priority: 'user-visible'}))); 12 tasks.push(schedule('UV2', TaskSignal.any([], {priority: 'user-visible'}))); 13 tasks.push(schedule('UB1', TaskSignal.any([], {priority: 'user-blocking'}))); 14 tasks.push(schedule('UB2', TaskSignal.any([], {priority: 'user-blocking'}))); 15 16 await Promise.all(tasks); 17 18 assert_equals(runOrder.toString(),'UB1,UB2,UV1,UV2,B1,B2'); 19 }, 'scheduler.postTask() tasks run in priority order with a fixed priority composite signal'); 20 21 promise_test(async t => { 22 const runOrder = []; 23 const schedule = (id, priorityOrSignal) => { 24 if (priorityOrSignal instanceof TaskSignal) { 25 return scheduler.postTask(() => { runOrder.push(id); }, {signal: priorityOrSignal}); 26 } else { 27 return scheduler.postTask(() => { runOrder.push(id); }, {priority: priorityOrSignal}); 28 } 29 }; 30 31 const controller = new TaskController({priority: 'user-blocking'}); 32 const signal = TaskSignal.any([], {priority: controller.signal}); 33 34 const tasks = []; 35 tasks.push(schedule('B1', signal)); 36 tasks.push(schedule('B2', signal)); 37 tasks.push(schedule('UV1', 'user-visible')); 38 tasks.push(schedule('UV2', 'user-visible')); 39 tasks.push(schedule('UB1', 'user-blocking')); 40 tasks.push(schedule('UB2', 'user-blocking')); 41 42 controller.setPriority('background'); 43 44 await Promise.all(tasks); 45 46 assert_equals(runOrder.toString(),'UB1,UB2,UV1,UV2,B1,B2'); 47 }, 'scheduler.postTask() tasks run in priority order with a dynamic priority composite signal'); 48 49 promise_test(async t => { 50 const runOrder = []; 51 const schedule = (id, priorityOrSignal) => { 52 if (priorityOrSignal instanceof TaskSignal) { 53 return scheduler.postTask(() => { runOrder.push(id); }, {signal: priorityOrSignal}); 54 } else { 55 return scheduler.postTask(() => { runOrder.push(id); }, {priority: priorityOrSignal}); 56 } 57 }; 58 59 const parentSignal = TaskSignal.any([], {priority: 'background'}); 60 const signal = TaskSignal.any([], {priority: parentSignal}); 61 62 const tasks = []; 63 tasks.push(schedule('B1', signal)); 64 tasks.push(schedule('B2', signal)); 65 tasks.push(schedule('UV1', 'user-visible')); 66 tasks.push(schedule('UV2', 'user-visible')); 67 tasks.push(schedule('UB1', 'user-blocking')); 68 tasks.push(schedule('UB2', 'user-blocking')); 69 70 await Promise.all(tasks); 71 72 assert_equals(runOrder.toString(),'UB1,UB2,UV1,UV2,B1,B2'); 73 }, 'scheduler.postTask() tasks run in priority order with a composite signal whose source has fixed priority');