86 lines
2.5 KiB
HTML
86 lines
2.5 KiB
HTML
<!DOCTYPE HTML>
|
|
<meta charset=utf-8>
|
|
<title>Element Timing: src change triggers new entry</title>
|
|
|
|
<body>
|
|
<style>
|
|
body {
|
|
margin: 0;
|
|
}
|
|
|
|
</style>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/element-timing-helpers.js"></script>
|
|
<img elementtiming='my_image' id='my_id' />
|
|
<script>
|
|
setup({"hide_test_state": true});
|
|
|
|
const performanceEntryPromise = (pathname) => {
|
|
return new Promise(resolve => {
|
|
new PerformanceObserver((entryList, observer) => {
|
|
assert_equals(entryList.getEntries().length, 1);
|
|
if (entryList.getEntries()[0].url == pathname) {
|
|
observer.disconnect();
|
|
resolve(entryList.getEntries()[0]);
|
|
}
|
|
}).observe({ type: 'element' });
|
|
});
|
|
}
|
|
|
|
promise_test(async (t) => {
|
|
assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
|
|
|
|
// Take beforeRender timestamp.
|
|
const beforeRender1 = performance.now();
|
|
|
|
const img = document.getElementById('my_id');
|
|
|
|
const url1 = 'resources/square100.png';
|
|
|
|
const pathname1 = (new URL(url1, document.location)).href
|
|
|
|
// Register performance observer.
|
|
const promise1 = performanceEntryPromise(pathname1);
|
|
|
|
//Load image
|
|
await new Promise(resolve => {
|
|
img.addEventListener('load', resolve);
|
|
img.src = url1;
|
|
});
|
|
|
|
// Get element entry.
|
|
const entry1 = await promise1;
|
|
|
|
// Check entry.
|
|
checkElement(entry1, pathname1, 'my_image', 'my_id', beforeRender1, img);
|
|
checkRect(entry1, [0, 100, 0, 100]);
|
|
checkNaturalSize(entry1, 100, 100);
|
|
|
|
// Take beforeRender timestamp before changing image src.
|
|
const beforeRender2 = performance.now();
|
|
|
|
// Set the src to trigger another entry.
|
|
const url2 = '/images/black-rectangle.png';
|
|
|
|
const pathname2 = (new URL(url2, document.location)).href;
|
|
|
|
const promise2 = performanceEntryPromise(pathname2);
|
|
|
|
//Load image with changed src.
|
|
await new Promise(resolve => {
|
|
img.addEventListener('load', resolve);
|
|
img.src = url2;
|
|
});
|
|
|
|
// Get the corresponding element entry.
|
|
const entry2 = await promise2;
|
|
|
|
// Check entry.
|
|
checkElement(entry2, pathname2, 'my_image', 'my_id', beforeRender2, img);
|
|
checkRect(entry2, [0, 100, 0, 50]);
|
|
checkNaturalSize(entry2, 100, 50);
|
|
}, 'Element Timing: changing src causes a new entry to be dispatched.')
|
|
</script>
|
|
|
|
</body>
|