haikuwebkit/LayoutTests/performance-api/performance-observer-order....

64 lines
1.6 KiB
HTML
Raw Permalink Normal View History

Implement PerformanceObserver https://bugs.webkit.org/show_bug.cgi?id=167546 <rdar://problem/30247959> Reviewed by Ryosuke Niwa. Source/JavaScriptCore: * runtime/CommonIdentifiers.h: Source/WebCore: This implements PerformanceObserver from Performance Timeline Level 2: https://w3c.github.io/performance-timeline/ Tests: performance-api/performance-observer-api.html performance-api/performance-observer-basic.html performance-api/performance-observer-callback-mutate.html performance-api/performance-observer-callback-task.html performance-api/performance-observer-entry-sort.html performance-api/performance-observer-exception.html performance-api/performance-observer-nested.html performance-api/performance-observer-order.html performance-api/performance-observer-periodic.html performance-api/performance-timeline-api.html * CMakeLists.txt: * DerivedSources.make: * WebCore.xcodeproj/project.pbxproj: New files. * page/Performance.h: * page/Performance.cpp: (WebCore::Performance::mark): (WebCore::Performance::measure): (WebCore::Performance::registerPerformanceObserver): (WebCore::Performance::unregisterPerformanceObserver): (WebCore::Performance::queueEntry): Register PerformanceObservers with the Performance object. When new PerformanceEntries are created (Mark and Measure right now) check them against observers. * page/PerformanceEntry.cpp: (WebCore::PerformanceEntry::PerformanceEntry): (WebCore::PerformanceEntry::typeForEntryTypeString): * page/PerformanceEntry.h: (WebCore::PerformanceEntry::type): Give PerformanceEntry a convenience enum for easy comparison and to know if it is one of the built-in known types (which the PerformanceObserver API takes into account). * page/PerformanceObserver.cpp: Added. (WebCore::PerformanceObserver::PerformanceObserver): (WebCore::PerformanceObserver::observe): (WebCore::PerformanceObserver::disconnect): (WebCore::PerformanceObserver::queueEntry): (WebCore::PerformanceObserver::deliver): * page/PerformanceObserver.h: (WebCore::PerformanceObserver::create): (WebCore::PerformanceObserver::typeFilter): - TypeErrors on observe bad behavior - Completely replace types filter on observe - Handle register and unregister - Handle calling the callback * page/PerformanceObserverCallback.idl: Added. * page/PerformanceObserverEntryList.cpp: Added. (WebCore::PerformanceObserverEntryList::PerformanceObserverEntryList): (WebCore::PerformanceObserverEntryList::getEntries): (WebCore::PerformanceObserverEntryList::getEntriesByType): (WebCore::PerformanceObserverEntryList::getEntriesByName): * page/PerformanceObserverEntryList.h: (WebCore::PerformanceObserverEntryList::create): * page/PerformanceObserverEntryList.idl: Added. Implement sorting and filtering of entries. * page/PerformanceObserver.idl: Added. * page/PerformanceObserverCallback.h: (WebCore::PerformanceObserverCallback::~PerformanceObserverCallback): Mostly autogenerated. * page/PerformanceUserTiming.cpp: (WebCore::UserTiming::mark): (WebCore::UserTiming::measure): * page/PerformanceUserTiming.h: Update these to return the entry so it can be passed on to any interested PerformanceObservers. Source/WebInspectorUI: * UserInterface/Models/NativeFunctionParameters.js: Improve API view display of built-in performance methods. LayoutTests: * performance-api/performance-observer-api-expected.txt: Added. * performance-api/performance-observer-api.html: Added. * performance-api/performance-observer-basic-expected.txt: Added. * performance-api/performance-observer-basic.html: Added. * performance-api/performance-observer-callback-mutate-expected.txt: Added. * performance-api/performance-observer-callback-mutate.html: Added. * performance-api/performance-observer-callback-task-expected.txt: Added. * performance-api/performance-observer-callback-task.html: Added. * performance-api/performance-observer-entry-sort-expected.txt: Added. * performance-api/performance-observer-entry-sort.html: Added. * performance-api/performance-observer-exception-expected.txt: Added. * performance-api/performance-observer-exception.html: Added. * performance-api/performance-observer-nested-expected.txt: Added. * performance-api/performance-observer-nested.html: Added. * performance-api/performance-observer-order-expected.txt: Added. * performance-api/performance-observer-order.html: Added. * performance-api/performance-observer-periodic-expected.txt: Added. * performance-api/performance-observer-periodic.html: Added. PerformanceObserver tests. * performance-api/performance-timeline-api-expected.txt: Added. * performance-api/performance-timeline-api.html: Added. Performance timeline tests. * platform/efl/js/dom/global-constructors-attributes-expected.txt: * platform/gtk/js/dom/global-constructors-attributes-expected.txt: * platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt: * platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt: * platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt: * platform/mac/js/dom/global-constructors-attributes-expected.txt: * platform/win/js/dom/global-constructors-attributes-expected.txt: New global constructors. Canonical link: https://commits.webkit.org/184646@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211406 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-31 06:21:35 +00:00
<!DOCTYPE HTML>
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Ensure PerformanceObservers are notified in order of registration (observe).");
window.jsTestIsAsync = true;
window.count = 0;
let observer1 = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 1 callback fired");
shouldBe(`count`, `1`);
});
let observer2 = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 2 callback fired");
shouldBe(`count`, `2`);
});
// Ensure creation doesn't impact order.
let observerSpecial = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 6 callback fired");
shouldBe(`count`, `6`);
finishJSTest();
});
let observer3 = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 3 callback fired");
shouldBe(`count`, `3`);
});
let observer4 = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 4 callback fired");
shouldBe(`count`, `4`);
});
let observer5 = new PerformanceObserver((list) => {
count++;
testPassed("PerformanceObserver 5 callback fired");
shouldBe(`count`, `5`);
});
// Register all in order.
for (let o of [observer1, observer2, observerSpecial, observer3, observer4, observer5])
o.observe({entryTypes: ["mark"]});
// Unregister and re-register moves this to the back of the line.
observerSpecial.disconnect();
observerSpecial.observe({entryTypes: ["mark"]});
performance.mark("mark1");
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>