Source code

Revision control

Copy as Markdown

Other Tools

// This script relies on resources/resource-loaders.js. Include it before in order for the below
// methods to work properly.
// The resources used to trigger new entries.
const scriptResources = [
'resources/empty.js',
'resources/empty_script.js',
'resources/empty.js?id'
];
const waitForNextTask = () => {
return new Promise(resolve => {
step_timeout(resolve, 0);
});
};
const clearBufferAndSetSize = size => {
performance.clearResourceTimings();
performance.setResourceTimingBufferSize(size);
}
const forceBufferFullEvent = async () => {
clearBufferAndSetSize(1);
return new Promise(async resolve => {
performance.addEventListener('resourcetimingbufferfull', resolve);
// Load 2 resources to ensure onresourcetimingbufferfull is fired.
// Load them in order in order to get the entries in that order!
await load.script(scriptResources[0]);
await load.script(scriptResources[1]);
});
};
const fillUpTheBufferWithSingleResource = async (src = scriptResources[0]) => {
clearBufferAndSetSize(1);
await load.script(src);
};
const fillUpTheBufferWithTwoResources = async () => {
clearBufferAndSetSize(2);
// Load them in order in order to get the entries in that order!
await load.script(scriptResources[0]);
await load.script(scriptResources[1]);
};
const addAssertUnreachedBufferFull = t => {
performance.addEventListener('resourcetimingbufferfull', t.step_func(() => {
assert_unreached("resourcetimingbufferfull should not fire")
}));
};
const checkEntries = numEntries => {
const entries = performance.getEntriesByType('resource');
assert_equals(entries.length, numEntries,
'Number of entries does not match the expected value.');
assert_true(entries[0].name.includes(scriptResources[0]),
scriptResources[0] + " is in the entries buffer");
if (entries.length > 1) {
assert_true(entries[1].name.includes(scriptResources[1]),
scriptResources[1] + " is in the entries buffer");
}
if (entries.length > 2) {
assert_true(entries[2].name.includes(scriptResources[2]),
scriptResources[2] + " is in the entries buffer");
}
}
const bufferFullFirePromise = new Promise(resolve => {
performance.addEventListener('resourcetimingbufferfull', async () => {
// Wait for the next task just to ensure that all bufferfull events have fired, and to ensure
// that the secondary buffer is copied (as this is an event, there may be microtask checkpoints
// right after running an event handler).
await waitForNextTask();
resolve();
});
});