| 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);
|
|
|