// META: script=resources/profile-utils.js
promise_test(async t => {
assert_throws_js(TypeError, () => {
new Profiler({ sampleInterval: 10 });
});
}, 'max buffer size must be defined');
promise_test(async t => {
const profiler = new Profiler({
sampleInterval: 10,
maxBufferSize: 2,
});
// Force 3 samples with a max buffer size of 2.
for (let i = 0; i < 3; i++) {
ProfileUtils.forceSample();
}
const trace = await profiler.stop();
assert_equals(trace.samples.length, 2);
}, 'max buffer size is not exceeded');
promise_test(async t => {
const largeBufferProfiler = new Profiler({ sampleInterval: 10, maxBufferSize: Number.MAX_SAFE_INTEGER });
const smallBufferProfiler = new Profiler({ sampleInterval: 10, maxBufferSize: 1 });
const watcher = new EventWatcher(t, smallBufferProfiler, ['samplebufferfull']);
largeBufferProfiler.addEventListener('samplebufferfull', () => {
assert_unreached('samplebufferfull invoked on wrong profiler');
largeBufferProfiler.stop();
smallBufferProfiler.stop();
});
smallBufferProfiler.addEventListener('samplebufferfull', () => {
largeBufferProfiler.stop();
smallBufferProfiler.stop();
});
// Force two samples to be taken, which should exceed
// |smallBufferProfiler|'s buffer size.
for (let i = 0; i < 2; i++) {
ProfileUtils.forceSample();
}
// Ensure that |smallBufferProfiler|'s buffer size is exceeded.
await watcher.wait_for('samplebufferfull');
}, 'ensure samplebufferfull is fired on full profiler');