tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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');