mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:37:46 +00:00
LibWeb: Implement PerformanceObserver
This commit is contained in:
parent
5055883b9f
commit
af2886449a
22 changed files with 793 additions and 57 deletions
|
@ -0,0 +1,98 @@
|
|||
<script src="../include.js"></script>
|
||||
<script>
|
||||
const bufferedMessages = [];
|
||||
function printlnBuffered(message) {
|
||||
bufferedMessages.push(message);
|
||||
}
|
||||
|
||||
const globalObserver = new PerformanceObserver((list, observer) => {
|
||||
printlnBuffered(`observer === globalObserver: ${observer === globalObserver}`);
|
||||
printlnBuffered(
|
||||
`list instanceof PerformanceObserverEntryList: ${
|
||||
list instanceof PerformanceObserverEntryList
|
||||
}`
|
||||
);
|
||||
|
||||
const allEntries = list.getEntries();
|
||||
printlnBuffered(`allEntries instanceof Array: ${allEntries instanceof Array}`);
|
||||
printlnBuffered(`allEntries.length === 3: ${allEntries.length === 3}`);
|
||||
printlnBuffered(`allEntries[0] === startMark: ${allEntries[0] === startMark}`);
|
||||
printlnBuffered(`allEntries[1] === endMark: ${allEntries[1] === endMark}`);
|
||||
printlnBuffered(`allEntries[2] === measureMark: ${allEntries[2] === measureMark}`);
|
||||
|
||||
const markEntries = list.getEntriesByType("mark");
|
||||
printlnBuffered(`markEntries instanceof Array: ${markEntries instanceof Array}`);
|
||||
printlnBuffered(`markEntries.length === 2: ${markEntries.length === 2}`);
|
||||
printlnBuffered(`markEntries[0] === startMark: ${markEntries[0] === startMark}`);
|
||||
printlnBuffered(`markEntries[1] === endMark: ${markEntries[1] === endMark}`);
|
||||
|
||||
const measureEntries = list.getEntriesByType("measure");
|
||||
printlnBuffered(`measureEntries instanceof Array: ${measureEntries instanceof Array}`);
|
||||
printlnBuffered(`measureEntries.length === 1: ${measureEntries.length === 1}`);
|
||||
printlnBuffered(`measureEntries[0] === measureMark: ${measureEntries[0] === measureMark}`);
|
||||
|
||||
const startEntries = list.getEntriesByName("start");
|
||||
printlnBuffered(`startEntries instanceof Array: ${startEntries instanceof Array}`);
|
||||
printlnBuffered(`startEntries.length === 1: ${startEntries.length === 1}`);
|
||||
printlnBuffered(`startEntries[0] === startMark: ${startEntries[0] === startMark}`);
|
||||
|
||||
const endEntries = list.getEntriesByName("end");
|
||||
printlnBuffered(`endEntries instanceof Array: ${endEntries instanceof Array}`);
|
||||
printlnBuffered(`endEntries.length === 1: ${endEntries.length === 1}`);
|
||||
printlnBuffered(`endEntries[0] === endMark: ${endEntries[0] === endMark}`);
|
||||
|
||||
const measureEntriesByName = list.getEntriesByName("measure");
|
||||
printlnBuffered(
|
||||
`measureEntriesByName instanceof Array: ${measureEntriesByName instanceof Array}`
|
||||
);
|
||||
printlnBuffered(`measureEntriesByName.length === 1: ${measureEntriesByName.length === 1}`);
|
||||
printlnBuffered(
|
||||
`measureEntriesByName[0] === measureMark: ${measureEntriesByName[0] === measureMark}`
|
||||
);
|
||||
});
|
||||
globalObserver.observe({ entryTypes: ["measure", "mark"] });
|
||||
|
||||
const startMark = performance.mark("start");
|
||||
const endMark = performance.mark("end");
|
||||
const measureMark = performance.measure("measure", "start", "end");
|
||||
|
||||
function printCatchedException(func) {
|
||||
try {
|
||||
func();
|
||||
} catch (e) {
|
||||
if (e instanceof DOMException) {
|
||||
printlnBuffered(`${e.name}: ${e.message}`);
|
||||
} else {
|
||||
printlnBuffered(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printCatchedException(() => {
|
||||
globalObserver.observe();
|
||||
});
|
||||
|
||||
printCatchedException(() => {
|
||||
globalObserver.observe({ entryTypes: [], buffered: true });
|
||||
});
|
||||
|
||||
printCatchedException(() => {
|
||||
globalObserver.observe({ entryTypes: [], type: "" });
|
||||
});
|
||||
|
||||
printCatchedException(() => {
|
||||
globalObserver.observe({ type: "" });
|
||||
});
|
||||
|
||||
test(() => {
|
||||
for (const message of bufferedMessages) {
|
||||
println(message);
|
||||
}
|
||||
|
||||
globalObserver.disconnect();
|
||||
performance.mark("bad");
|
||||
performance.measure("badmeasure", "end", "bad");
|
||||
const records = globalObserver.takeRecords();
|
||||
println(`records.length === 0: ${records.length === 0}`);
|
||||
});
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue