| // META: timeout=long |
| // META: variant=?globalScope=window |
| // META: variant=?globalScope=dedicated_worker |
| // META: script=/resources/testdriver.js |
| // META: script=/resources/testdriver-vendor.js |
| // META: script=/common/utils.js |
| // META: script=/common/dispatcher/dispatcher.js |
| // META: script=./resources/common.js |
| // META: script=./resources/sync-pressure-observer.js |
| |
| 'use strict'; |
| |
| pressure_test(async (t) => { |
| await create_virtual_pressure_source('cpu'); |
| t.add_cleanup(async () => { |
| await remove_virtual_pressure_source('cpu'); |
| }); |
| |
| const changes = await new Promise((resolve, reject) => { |
| const observer = new PressureObserver(resolve); |
| t.add_cleanup(() => observer.disconnect()); |
| observer.observe('cpu').catch(reject); |
| update_virtual_pressure_source('cpu', 'critical').catch(reject); |
| }); |
| |
| assert_less_than(changes[0].time, performance.now()); |
| }, 'Timestamp from update should be tied to the global object\'s time origin'); |
| |
| pressure_test(async (t) => { |
| await create_virtual_pressure_source('cpu'); |
| t.add_cleanup(async () => { |
| await remove_virtual_pressure_source('cpu'); |
| }); |
| |
| const readings = ['critical', 'critical']; |
| const syncObserver = new SyncPressureObserver(t); |
| |
| // When disconnect() is called, PressureRecord in [[LastRecordMap]] for cpu |
| // should be cleared. The effect we observe in this test is the "has change |
| // in data" algorithm passing with the same state twice. |
| for (let i = 0; i < readings.length; ++i) { |
| await syncObserver.observer().observe('cpu', {sampleInterval: 500}); |
| await update_virtual_pressure_source('cpu', readings[i]); |
| await syncObserver.waitForUpdate(); |
| syncObserver.observer().disconnect(); |
| } |
| |
| const pressureChanges = syncObserver.changes(); |
| assert_equals(pressureChanges.length, readings.length); |
| assert_equals(pressureChanges[0][0].state, 'critical'); |
| assert_equals(pressureChanges[1][0].state, 'critical'); |
| }, 'disconnect() should update [[LastRecordMap]]'); |
| |
| mark_as_done(); |