1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
importScripts('/resources/testharness.js');
promise_test(function(test) {
var durationMsec = 100;
// There are limits to our accuracy here. Timers may fire up to a
// millisecond early due to platform-dependent rounding. In addition
// the performance API introduces some rounding as well to prevent
// timing attacks.
var accuracy = 1.5;
return new Promise(function(resolve) {
performance.mark('startMark');
setTimeout(resolve, durationMsec);
}).then(function() {
performance.mark('endMark');
performance.measure('measure', 'startMark', 'endMark');
var startMark = performance.getEntriesByName('startMark')[0];
var endMark = performance.getEntriesByName('endMark')[0];
var measure = performance.getEntriesByType('measure')[0];
assert_equals(measure.startTime, startMark.startTime);
assert_approx_equals(endMark.startTime - startMark.startTime,
measure.duration, 0.001);
assert_greater_than(measure.duration, durationMsec - accuracy);
assert_equals(performance.getEntriesByType('mark').length, 2);
assert_equals(performance.getEntriesByType('measure').length, 1);
performance.clearMarks('startMark');
performance.clearMeasures('measure');
assert_equals(performance.getEntriesByType('mark').length, 1);
assert_equals(performance.getEntriesByType('measure').length, 0);
});
}, 'User Timing');
promise_test(function(test) {
return fetch('sample.txt')
.then(function(resp) {
return resp.text();
})
.then(function(text) {
var expectedResources = ['testharness.js', 'sample.txt'];
assert_equals(performance.getEntriesByType('resource').length, expectedResources.length);
for (var i = 0; i < expectedResources.length; i++) {
var entry = performance.getEntriesByType('resource')[i];
assert_true(entry.name.endsWith(expectedResources[i]));
assert_equals(entry.workerStart, 0);
assert_greater_than(entry.startTime, 0);
assert_greater_than(entry.responseEnd, entry.startTime);
}
return new Promise(function(resolve) {
performance.onresourcetimingbufferfull = _ => {
resolve('bufferfull');
}
performance.setResourceTimingBufferSize(expectedResources.length);
fetch('sample.txt');
});
})
.then(function(result) {
assert_equals(result, 'bufferfull');
performance.clearResourceTimings();
assert_equals(performance.getEntriesByType('resource').length, 0);
})
}, 'Resource Timing');
done();
|