Chromium Code Reviews| Index: Source/core/inspector/AsyncCallTracker.cpp |
| diff --git a/Source/core/inspector/AsyncCallTracker.cpp b/Source/core/inspector/AsyncCallTracker.cpp |
| index bc3395a0c203236f1d81525da561304a13610599..3f80bc5caab02a1ee181507ab174d1e95e7ab34e 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/InspectorDebuggerAgent.h" |
| +#include "core/timing/PerformanceObserver.h" |
| #include "core/xmlhttprequest/XMLHttpRequest.h" |
| #include "core/xmlhttprequest/XMLHttpRequestUpload.h" |
| #include "wtf/text/StringBuilder.h" |
| @@ -50,6 +51,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"; |
| } |
| @@ -67,6 +69,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) |
| { |
| @@ -99,6 +102,7 @@ public: |
| visitor->trace(m_executionContextTaskCallChains); |
| visitor->trace(m_asyncOperations); |
| #endif |
| + visitor->trace(m_performanceObserverCallChains); |
| ContextLifecycleObserver::trace(visitor); |
| } |
| @@ -109,6 +113,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; |
| @@ -120,6 +125,7 @@ private: |
| m_eventCallChains.dispose(); |
| m_xhrCallChains.dispose(); |
| m_mutationObserverCallChains.dispose(); |
| + m_performanceObserverCallChains.dispose(); |
| m_executionContextTaskCallChains.dispose(); |
| m_asyncOperations.dispose(); |
| } |
| @@ -328,6 +334,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); |
|
esprehn
2015/07/18 22:24:15
The web inspector should really auto generate this
MikeB
2015/07/20 23:06:50
You mean I should add a feature request for that,
|
| +} |
| + |
| +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(InspectorDebuggerAgent::unknownAsyncOperationId); |
| + } |
| +} |
| + |
| void AsyncCallTracker::didPostExecutionContextTask(ExecutionContext* context, ExecutionContextTask* task) |
| { |
| ASSERT(context); |