Implement PerformanceObserver
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jan 2017 06:21:35 +0000 (06:21 +0000)
committerjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Jan 2017 06:21:35 +0000 (06:21 +0000)
commitc8f8a4e2aa60d7ca6590b82bace16d52fd9b3c53
treefdedf189cd2b3284fc3d7bfbed7850ed5a8f8e40
parent16afb72fb4bec90a16a3be47f166df0340bbf356
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.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211406 268f45cc-cd09-0410-ab3c-d52691b4dbfc
56 files changed:
LayoutTests/ChangeLog
LayoutTests/performance-api/performance-observer-api-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-api.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-basic-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-basic.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-callback-mutate-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-callback-mutate.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-callback-task-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-callback-task.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-entry-sort-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-entry-sort.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-exception-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-exception.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-nested-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-nested.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-order-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-order.html [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-periodic-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-observer-periodic.html [new file with mode: 0644]
LayoutTests/performance-api/performance-timeline-api-expected.txt [new file with mode: 0644]
LayoutTests/performance-api/performance-timeline-api.html [new file with mode: 0644]
LayoutTests/platform/efl/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/gtk/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/win/js/dom/global-constructors-attributes-expected.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/loader/cache/CachedResourceLoader.cpp
Source/WebCore/page/IntersectionObserver.h
Source/WebCore/page/Performance.cpp
Source/WebCore/page/Performance.h
Source/WebCore/page/PerformanceEntry.cpp
Source/WebCore/page/PerformanceEntry.h
Source/WebCore/page/PerformanceMark.h
Source/WebCore/page/PerformanceMeasure.h
Source/WebCore/page/PerformanceObserver.cpp [new file with mode: 0644]
Source/WebCore/page/PerformanceObserver.h [new file with mode: 0644]
Source/WebCore/page/PerformanceObserver.idl [new file with mode: 0644]
Source/WebCore/page/PerformanceObserverCallback.h [new file with mode: 0644]
Source/WebCore/page/PerformanceObserverCallback.idl [new file with mode: 0644]
Source/WebCore/page/PerformanceObserverEntryList.cpp [new file with mode: 0644]
Source/WebCore/page/PerformanceObserverEntryList.h [new file with mode: 0644]
Source/WebCore/page/PerformanceObserverEntryList.idl [new file with mode: 0644]
Source/WebCore/page/PerformanceResourceTiming.cpp
Source/WebCore/page/PerformanceUserTiming.cpp
Source/WebCore/page/PerformanceUserTiming.h
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/UserInterface/Models/NativeFunctionParameters.js