compute_pressure_timestamp.https.window.js (1998B)
1 // META: timeout=long 2 // META: variant=?globalScope=window 3 // META: variant=?globalScope=dedicated_worker 4 // META: script=/resources/testdriver.js 5 // META: script=/resources/testdriver-vendor.js 6 // META: script=/common/utils.js 7 // META: script=/common/dispatcher/dispatcher.js 8 // META: script=./resources/common.js 9 // META: script=./resources/sync-pressure-observer.js 10 11 'use strict'; 12 13 pressure_test(async (t) => { 14 await create_virtual_pressure_source('cpu'); 15 t.add_cleanup(async () => { 16 await remove_virtual_pressure_source('cpu'); 17 }); 18 19 const changes = await new Promise((resolve, reject) => { 20 const observer = new PressureObserver(resolve); 21 t.add_cleanup(() => observer.disconnect()); 22 observer.observe('cpu').catch(reject); 23 update_virtual_pressure_source('cpu', 'critical').catch(reject); 24 }); 25 26 assert_less_than(changes[0].time, performance.now()); 27 }, 'Timestamp from update should be tied to the global object\'s time origin'); 28 29 pressure_test(async (t) => { 30 await create_virtual_pressure_source('cpu'); 31 t.add_cleanup(async () => { 32 await remove_virtual_pressure_source('cpu'); 33 }); 34 35 const readings = ['critical', 'critical']; 36 const syncObserver = new SyncPressureObserver(t); 37 38 // When disconnect() is called, PressureRecord in [[LastRecordMap]] for cpu 39 // should be cleared. The effect we observe in this test is the "has change 40 // in data" algorithm passing with the same state twice. 41 for (let i = 0; i < readings.length; ++i) { 42 await syncObserver.observer().observe('cpu', {sampleInterval: 500}); 43 await update_virtual_pressure_source('cpu', readings[i]); 44 await syncObserver.waitForUpdate(); 45 syncObserver.observer().disconnect(); 46 } 47 48 const pressureChanges = syncObserver.changes(); 49 assert_equals(pressureChanges.length, readings.length); 50 assert_equals(pressureChanges[0][0].state, 'critical'); 51 assert_equals(pressureChanges[1][0].state, 'critical'); 52 }, 'disconnect() should update [[LastRecordMap]]'); 53 54 mark_as_done();