Skip to content

Commit 6ec99e5

Browse files
ComputePressure: Turn sampleRate into sampleInterval (#45213)
Following specifications change[1], sampleRate in hertz is changed to sampleInterval in millisecond. w3c/compute-pressure#254 Bug: 330376756 Change-Id: Ibe909d537e462cd251d28c7d4d4702341dc33c0c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5381598 Reviewed-by: Fr Reviewed-by: Raphael Kubo Da Costa Commit-Queue: Arnaud Mandy Cr-Commit-Position: refs/heads/main@{#1275582} Co-authored-by: Arnaud Mandy
1 parent cc48615 commit 6ec99e5

16 files changed

+49
-53
lines changed

compute-pressure/compute_pressure_basic.https.any.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pressure_test(async (t, mockPressureService) => {
2121
t.add_cleanup(() => observer.disconnect());
2222
observer.observe('cpu');
2323
mockPressureService.setPressureUpdate('cpu', 'critical');
24-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
24+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
2525
});
2626
assert_true(changes.length === 1);
2727
assert_equals(changes[0].state, 'critical');
@@ -37,7 +37,7 @@ pressure_test((t, mockPressureService) => {
3737
const promise = observer.observe('cpu');
3838
observer.unobserve('cpu');
3939
mockPressureService.setPressureUpdate('cpu', 'critical');
40-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
40+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
4141

4242
return promise_rejects_dom(t, 'AbortError', promise);
4343
}, 'Removing observer before observe() resolves works');
@@ -57,7 +57,7 @@ pressure_test(async (t, mockPressureService) => {
5757
await Promise.all(observePromises);
5858

5959
mockPressureService.setPressureUpdate('cpu', 'critical');
60-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
60+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
6161

6262
return Promise.all(callbackPromises);
6363
}, 'Calling observe() multiple times works');
@@ -72,7 +72,7 @@ pressure_test(async (t, mockPressureService) => {
7272
t.add_cleanup(() => observer1.disconnect());
7373
observer1.observe('cpu');
7474
mockPressureService.setPressureUpdate('cpu', 'critical');
75-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
75+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
7676
});
7777
assert_true(observer1_changes.length === 1);
7878
assert_equals(observer1_changes[0][0].source, 'cpu');

compute-pressure/compute_pressure_detached_iframe.https.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
t.add_cleanup(() => observer.disconnect());
7070
observer.observe('cpu').catch(reject);
7171
mockPressureService.setPressureUpdate('cpu', 'critical');
72-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
72+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
7373
});
7474
assert_equals(changes[0].state, 'critical');
7575
}, 'Detaching frame while PressureObserver.observe() settles');
@@ -84,7 +84,7 @@
8484

8585
await observer.observe('cpu');
8686
mockPressureService.setPressureUpdate('cpu', 'critical');
87-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
87+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
8888

8989
iframe.remove();
9090

compute-pressure/compute_pressure_disconnect.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pressure_test(async (t, mockPressureService) => {
3131
t.add_cleanup(() => observer2.disconnect());
3232
observer2.observe('cpu').catch(reject);
3333
mockPressureService.setPressureUpdate('cpu', 'critical');
34-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
34+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
3535
});
3636

3737
assert_equals(

compute-pressure/compute_pressure_disconnect_idempotent.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pressure_test(async (t, mockPressureService) => {
2525
t.add_cleanup(() => observer2.disconnect());
2626
observer2.observe('cpu').catch(reject);
2727
mockPressureService.setPressureUpdate('cpu', 'critical');
28-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
28+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
2929
});
3030

3131
assert_equals(

compute-pressure/compute_pressure_disconnect_immediately.https.any.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pressure_test(async (t, mockPressureService) => {
2424
t.add_cleanup(() => observer2.disconnect());
2525
observer2.observe('cpu').catch(reject);
2626
mockPressureService.setPressureUpdate('cpu', 'critical');
27-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
27+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
2828
});
2929

3030
assert_equals(
@@ -55,7 +55,7 @@ pressure_test(async (t, mockPressureService) => {
5555
observer1.disconnect();
5656
await promise_rejects_dom(t, 'AbortError', promise);
5757
mockPressureService.setPressureUpdate('cpu', 'critical');
58-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
58+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
5959
});
6060

6161
assert_equals(

compute-pressure/compute_pressure_duplicate_updates.https.any.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ pressure_test(async (t, mockPressureService) => {
1212
observer_changes.push(changes);
1313
if (++n === 2)
1414
resolve(observer_changes);
15-
}, {sampleRate: 5.0});
15+
}, {sampleInterval: 200});
1616
observer.observe('cpu');
1717
const updatesDelivered = mockPressureService.updatesDelivered();
1818
mockPressureService.setPressureUpdate('cpu', 'critical');
19-
mockPressureService.startPlatformCollector(/*sampleRate*/ 5.0);
19+
mockPressureService.startPlatformCollector(/*sampleInterval*/ 200);
2020
// Deliver 2 updates.
2121
await t.step_wait(
2222
() => mockPressureService.updatesDelivered() >= (updatesDelivered + 2),

compute-pressure/compute_pressure_multiple.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pressure_test(async (t, mockPressureService) => {
2424
});
2525

2626
mockPressureService.setPressureUpdate('cpu', 'critical');
27-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
27+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
2828

2929
const [changes1, changes2, changes3] =
3030
await Promise.all([changes1_promise, changes2_promise, changes3_promise]);

compute-pressure/compute_pressure_observe_idempotent.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pressure_test(async (t, mockPressureService) => {
1212
observer.observe('cpu').catch(reject);
1313
observer.observe('cpu').catch(reject);
1414
mockPressureService.setPressureUpdate('cpu', 'critical');
15-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
15+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
1616
});
1717

1818
assert_equals(update[0].state, 'critical');

compute-pressure/compute_pressure_options.https.any.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,24 @@
33
'use strict';
44

55
test(t => {
6-
assert_throws_js(RangeError, () => {
7-
new PressureObserver(() => {}, {sampleRate: 0});
8-
});
9-
}, 'PressureObserver constructor requires a non-zero sampleRate');
6+
const observer = new PressureObserver(() => {}, {sampleInterval: 0});
7+
assert_equals(typeof observer, 'object');
8+
}, 'PressureObserver constructor doesnt throw error for sampleInterval value 0');
9+
1010

1111
test(t => {
12-
assert_throws_js(RangeError, () => {
13-
new PressureObserver(() => {}, {sampleRate: -2});
12+
assert_throws_js(TypeError, () => {
13+
new PressureObserver(() => {}, {sampleInterval: -2});
1414
});
15-
}, 'PressureObserver constructor requires a positive sampleRate');
15+
}, 'PressureObserver constructor requires a positive sampleInterval');
1616

1717
test(t => {
18-
const observer = new PressureObserver(() => {}, {sampleRate: 0.5});
19-
assert_equals(typeof observer, 'object');
20-
}, 'PressureObserver constructor doesnt throw error on positive sampleRate');
18+
assert_throws_js(TypeError, () => {
19+
new PressureObserver(() => {}, {sampleInterval: 2 ** 32});
20+
});
21+
}, 'PressureObserver constructor requires a sampleInterval in unsigned long range');
2122

2223
test(t => {
2324
const observer = new PressureObserver(() => {}, {});
2425
assert_equals(typeof observer, 'object');
25-
}, 'PressureObserver constructor succeeds on empty sampleRate');
26+
}, 'PressureObserver constructor succeeds on empty sampleInterval');

compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
'use strict';
77

88
pressure_test(async (t, mockPressureService) => {
9-
const sampleRateInHz = 10;
9+
const sampleIntervalInMs = 100;
1010
const readings = ['nominal', 'fair', 'serious', 'critical'];
1111
// Normative values for rate obfuscation parameters.
1212
// https://w3c.github.io/compute-pressure/#rate-obfuscation-normative-parameters.
@@ -17,10 +17,10 @@ pressure_test(async (t, mockPressureService) => {
1717
const observerChanges = [];
1818
const observer = new PressureObserver(changes => {
1919
observerChanges.push(changes);
20-
}, {sampleRate: sampleRateInHz});
20+
}, {sampleInterval: sampleIntervalInMs});
2121

2222
observer.observe('cpu');
23-
mockPressureService.startPlatformCollector(sampleRateInHz);
23+
mockPressureService.startPlatformCollector(sampleIntervalInMs);
2424
let i = 0;
2525
// mockPressureService.updatesDelivered() does not necessarily match
2626
// pressureChanges.length, as system load and browser optimizations can

compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.https.window.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
'use strict';
77

88
pressure_test(async (t, mockPressureService) => {
9-
const sampleRateInHz = 25;
9+
const sampleIntervalInMs = 40;
1010
const readings = ['nominal', 'fair', 'serious', 'critical'];
1111
// Normative values for rate obfuscation parameters.
1212
// https://w3c.github.io/compute-pressure/#rate-obfuscation-normative-parameters.
@@ -31,10 +31,10 @@ pressure_test(async (t, mockPressureService) => {
3131
}
3232
}
3333
observerChanges.push(changes);
34-
}, {sampleRate: sampleRateInHz});
34+
}, {sampleInterval: sampleIntervalInMs});
3535

3636
observer.observe('cpu');
37-
mockPressureService.startPlatformCollector(sampleRateInHz);
37+
mockPressureService.startPlatformCollector(sampleIntervalInMs);
3838
let i = 0;
3939
// mockPressureService.updatesDelivered() does not necessarily match
4040
// pressureChanges.length, as system load and browser optimizations can

compute-pressure/compute_pressure_take_records.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pressure_test(async (t, mockPressureService) => {
2020

2121
observer.observe('cpu');
2222
mockPressureService.setPressureUpdate('cpu', 'critical');
23-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
23+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
2424
});
2525
assert_equals(changes[0].state, 'critical');
2626

compute-pressure/compute_pressure_timestamp.https.any.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
pressure_test(async (t, mockPressureService) => {
88
const readings = ['nominal', 'fair', 'serious', 'critical'];
99

10-
const sampleRate = 4.0;
10+
const sampleInterval = 250;
1111
const pressureChanges = await new Promise(async resolve => {
1212
const observerChanges = [];
1313
const observer = new PressureObserver(changes => {
1414
observerChanges.push(changes);
15-
}, {sampleRate});
15+
}, {sampleInterval});
1616
observer.observe('cpu');
1717

18-
mockPressureService.startPlatformCollector(sampleRate * 2);
18+
mockPressureService.startPlatformCollector(sampleInterval / 2);
1919
let i = 0;
2020
// mockPressureService.updatesDelivered() does not necessarily match
2121
// pressureChanges.length, as system load and browser optimizations can
@@ -34,27 +34,24 @@ pressure_test(async (t, mockPressureService) => {
3434

3535
assert_equals(pressureChanges.length, 4);
3636
assert_greater_than_equal(
37-
pressureChanges[1][0].time - pressureChanges[0][0].time,
38-
(1 / sampleRate * 1000));
37+
pressureChanges[1][0].time - pressureChanges[0][0].time, sampleInterval);
3938
assert_greater_than_equal(
40-
pressureChanges[2][0].time - pressureChanges[1][0].time,
41-
(1 / sampleRate * 1000));
39+
pressureChanges[2][0].time - pressureChanges[1][0].time, sampleInterval);
4240
assert_greater_than_equal(
43-
pressureChanges[3][0].time - pressureChanges[2][0].time,
44-
(1 / sampleRate * 1000));
41+
pressureChanges[3][0].time - pressureChanges[2][0].time, sampleInterval);
4542
}, 'Faster collector: Timestamp difference between two changes should be higher or equal to the observer sample rate');
4643

4744
pressure_test(async (t, mockPressureService) => {
4845
const pressureChanges = [];
49-
const sampleRate = 1.0;
46+
const sampleInterval = 1000;
5047
const observer = new PressureObserver(changes => {
5148
pressureChanges.push(changes);
52-
}, {sampleRate});
49+
}, {sampleInterval});
5350

5451
await new Promise(async resolve => {
5552
observer.observe('cpu');
5653
mockPressureService.setPressureUpdate('cpu', 'critical');
57-
mockPressureService.startPlatformCollector(sampleRate);
54+
mockPressureService.startPlatformCollector(sampleInterval);
5855
await t.step_wait(() => pressureChanges.length == 1);
5956
observer.disconnect();
6057
resolve();
@@ -63,7 +60,7 @@ pressure_test(async (t, mockPressureService) => {
6360
await new Promise(async resolve => {
6461
observer.observe('cpu');
6562
mockPressureService.setPressureUpdate('cpu', 'serious');
66-
mockPressureService.startPlatformCollector(sampleRate * 4);
63+
mockPressureService.startPlatformCollector(sampleInterval / 4);
6764
await t.step_wait(() => pressureChanges.length == 2);
6865
observer.disconnect();
6966
resolve();
@@ -74,6 +71,5 @@ pressure_test(async (t, mockPressureService) => {
7471
// should be deleted. So the second PressureRecord is not discarded even
7572
// though the time interval does not meet the requirement.
7673
assert_less_than(
77-
pressureChanges[1][0].time - pressureChanges[0][0].time,
78-
(1 / sampleRate * 1000));
74+
pressureChanges[1][0].time - pressureChanges[0][0].time, sampleInterval);
7975
}, 'disconnect() should update [[LastRecordMap]]');

compute-pressure/compute_pressure_update_toJSON.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pressure_test(async (t, mockPressureService) => {
77
const observer = new PressureObserver(resolve);
88
observer.observe('cpu');
99
mockPressureService.setPressureUpdate('cpu', 'critical');
10-
mockPressureService.startPlatformCollector(/*sampleRate=*/ 5.0);
10+
mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200);
1111
});
1212
assert_true(changes.length === 1);
1313
const json = changes[0].toJSON();

compute-pressure/idlharness.https.any.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ idl_test(['compute-pressure'], ['dom', 'html'], async idl_array => {
1111
PressureObserver: ['observer'],
1212
});
1313

14-
self.observer = new PressureObserver(() => {}, {sampleRate: 1.0});
14+
self.observer = new PressureObserver(() => {}, {sampleInterval: 1000});
1515
});

resources/chromium/mock-pressure-service.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ class MockPressureService {
5858
return {status: this.pressureStatus_};
5959
}
6060

61-
startPlatformCollector(sampleRate) {
62-
if (sampleRate === 0)
61+
startPlatformCollector(sampleInterval) {
62+
if (sampleInterval === 0)
6363
return;
6464

6565
if (this.pressureServiceReadingTimerId_ != null)
@@ -80,7 +80,6 @@ class MockPressureService {
8080
// |epochDeltaInMs| equals to base::Time::kTimeTToMicrosecondsOffset.
8181
const epochDeltaInMs = unixEpoch - windowsEpoch;
8282

83-
const timeout = (1 / sampleRate) * 1000;
8483
this.pressureServiceReadingTimerId_ = self.setInterval(() => {
8584
if (this.pressureUpdate_ === null || this.observers_.length === 0)
8685
return;
@@ -90,7 +89,7 @@ class MockPressureService {
9089
for (let observer of this.observers_)
9190
observer.onPressureUpdated(this.pressureUpdate_);
9291
this.updatesDelivered_++;
93-
}, timeout);
92+
}, sampleInterval);
9493
}
9594

9695
stopPlatformCollector() {

0 commit comments

Comments
 (0)