Index: Source/core/inspector/AsyncCallTracker.cpp |
diff --git a/Source/core/inspector/AsyncCallTracker.cpp b/Source/core/inspector/AsyncCallTracker.cpp |
index 256fdcc3ed3006f6ac2b8fe846cec3516d4d5a32..a547e0fb310de9f6fafe4cae090720c168a62027 100644 |
--- a/Source/core/inspector/AsyncCallTracker.cpp |
+++ b/Source/core/inspector/AsyncCallTracker.cpp |
@@ -38,6 +38,7 @@ |
#include "core/events/EventTarget.h" |
#include "core/inspector/AsyncOperationMap.h" |
#include "core/inspector/V8DebuggerAgent.h" |
+#include "core/timing/PerformanceObserver.h" |
#include "core/xmlhttprequest/XMLHttpRequest.h" |
#include "core/xmlhttprequest/XMLHttpRequestUpload.h" |
#include "platform/ScriptForbiddenScope.h" |
@@ -53,6 +54,7 @@ static const char setIntervalName[] = "setInterval"; |
static const char requestAnimationFrameName[] = "requestAnimationFrame"; |
static const char xhrSendName[] = "XMLHttpRequest.send"; |
static const char enqueueMutationRecordName[] = "Mutation"; |
+static const char enqueuePerformanceObservationsName[] = "PerformanceObservation"; |
} |
@@ -70,6 +72,7 @@ public: |
, m_eventCallChains(tracker->m_debuggerAgent) |
, m_xhrCallChains(tracker->m_debuggerAgent) |
, m_mutationObserverCallChains(tracker->m_debuggerAgent) |
+ , m_performanceObserverCallChains(tracker->m_debuggerAgent) |
, m_executionContextTaskCallChains(tracker->m_debuggerAgent) |
, m_asyncOperations(tracker->m_debuggerAgent) |
{ |
@@ -102,6 +105,7 @@ public: |
visitor->trace(m_executionContextTaskCallChains); |
visitor->trace(m_asyncOperations); |
#endif |
+ visitor->trace(m_performanceObserverCallChains); |
ContextLifecycleObserver::trace(visitor); |
} |
@@ -112,6 +116,7 @@ public: |
AsyncOperationMap<RawPtrWillBeMember<Event> > m_eventCallChains; |
AsyncOperationMap<RawPtrWillBeMember<EventTarget> > m_xhrCallChains; |
AsyncOperationMap<RawPtrWillBeMember<MutationObserver> > m_mutationObserverCallChains; |
+ AsyncOperationMap<Member<PerformanceObserver>, HeapHashMap<Member<PerformanceObserver>, int>> m_performanceObserverCallChains; |
AsyncOperationMap<ExecutionContextTask*> m_executionContextTaskCallChains; |
AsyncOperationMap<int> m_asyncOperations; |
@@ -123,6 +128,7 @@ private: |
m_eventCallChains.dispose(); |
m_xhrCallChains.dispose(); |
m_mutationObserverCallChains.dispose(); |
+ m_performanceObserverCallChains.dispose(); |
m_executionContextTaskCallChains.dispose(); |
m_asyncOperations.dispose(); |
} |
@@ -334,6 +340,37 @@ void AsyncCallTracker::willDeliverMutationRecords(ExecutionContext* context, Mut |
} |
} |
+void AsyncCallTracker::didEnqueuePerformanceObserverEntries(ExecutionContext* context, PerformanceObserver* observer) |
+{ |
+ ASSERT(context); |
+ ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
+ ExecutionContextData* data = createContextDataIfNeeded(context); |
+ if (data->m_performanceObserverCallChains.contains(observer)) |
+ return; |
+ int operationId = m_debuggerAgent->traceAsyncOperationStarting(enqueuePerformanceObservationsName); |
+ data->m_performanceObserverCallChains.set(observer, operationId); |
+} |
+ |
+void AsyncCallTracker::didClearAllPerformanceObservations(ExecutionContext* context, PerformanceObserver* observer) |
+{ |
+ ASSERT(context); |
+ ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
+ if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
+ data->m_performanceObserverCallChains.remove(observer); |
+} |
+ |
+void AsyncCallTracker::willDeliverPerformanceObservations(ExecutionContext* context, PerformanceObserver* observer) |
+{ |
+ ASSERT(context); |
+ ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
+ if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { |
+ willFireAsyncCall(data->m_performanceObserverCallChains.get(observer)); |
+ data->m_performanceObserverCallChains.remove(observer); |
+ } else { |
+ willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); |
+ } |
+} |
+ |
void AsyncCallTracker::didPostExecutionContextTask(ExecutionContext* context, ExecutionContextTask* task) |
{ |
ASSERT(context); |