Index: Source/core/inspector/AsyncCallTracker.cpp |
diff --git a/Source/core/inspector/AsyncCallTracker.cpp b/Source/core/inspector/AsyncCallTracker.cpp |
index c1364fdaaab962c4b36975e1d7d691687dd9a6ef..5630b03b6894b77f555e707de5196f8eaedb7be5 100644 |
--- a/Source/core/inspector/AsyncCallTracker.cpp |
+++ b/Source/core/inspector/AsyncCallTracker.cpp |
@@ -36,14 +36,12 @@ |
#include "core/dom/ExecutionContextTask.h" |
#include "core/events/Event.h" |
#include "core/events/EventTarget.h" |
-#include "core/inspector/AsyncCallChain.h" |
-#include "core/inspector/AsyncCallChainMap.h" |
+#include "core/inspector/AsyncOperationMap.h" |
#include "core/inspector/InspectorDebuggerAgent.h" |
#include "core/xmlhttprequest/XMLHttpRequest.h" |
#include "core/xmlhttprequest/XMLHttpRequestUpload.h" |
#include "wtf/text/StringBuilder.h" |
#include "wtf/text/StringHash.h" |
-#include <v8.h> |
namespace { |
@@ -70,7 +68,7 @@ public: |
, m_xhrCallChains(tracker->m_debuggerAgent) |
, m_mutationObserverCallChains(tracker->m_debuggerAgent) |
, m_executionContextTaskCallChains(tracker->m_debuggerAgent) |
- , m_asyncOperationCallChains(tracker->m_debuggerAgent) |
+ , m_asyncOperations(tracker->m_debuggerAgent) |
{ |
} |
@@ -100,20 +98,20 @@ public: |
visitor->trace(m_xhrCallChains); |
visitor->trace(m_mutationObserverCallChains); |
visitor->trace(m_executionContextTaskCallChains); |
- visitor->trace(m_asyncOperationCallChains); |
+ visitor->trace(m_asyncOperations); |
#endif |
ContextLifecycleObserver::trace(visitor); |
} |
RawPtrWillBeMember<AsyncCallTracker> m_tracker; |
HashSet<int> m_intervalTimerIds; |
- AsyncCallChainMap<int> m_timerCallChains; |
- AsyncCallChainMap<int> m_animationFrameCallChains; |
- AsyncCallChainMap<RawPtrWillBeMember<Event> > m_eventCallChains; |
- AsyncCallChainMap<RawPtrWillBeMember<EventTarget> > m_xhrCallChains; |
- AsyncCallChainMap<RawPtrWillBeMember<MutationObserver> > m_mutationObserverCallChains; |
- AsyncCallChainMap<ExecutionContextTask*> m_executionContextTaskCallChains; |
- AsyncCallChainMap<int> m_asyncOperationCallChains; |
+ AsyncOperationMap<int> m_timerCallChains; |
+ AsyncOperationMap<int> m_animationFrameCallChains; |
+ AsyncOperationMap<RawPtrWillBeMember<Event> > m_eventCallChains; |
+ AsyncOperationMap<RawPtrWillBeMember<EventTarget> > m_xhrCallChains; |
+ AsyncOperationMap<RawPtrWillBeMember<MutationObserver> > m_mutationObserverCallChains; |
+ AsyncOperationMap<ExecutionContextTask*> m_executionContextTaskCallChains; |
+ AsyncOperationMap<int> m_asyncOperations; |
private: |
void disposeCallChains() |
@@ -124,7 +122,7 @@ private: |
m_xhrCallChains.dispose(); |
m_mutationObserverCallChains.dispose(); |
m_executionContextTaskCallChains.dispose(); |
- m_asyncOperationCallChains.dispose(); |
+ m_asyncOperations.dispose(); |
} |
}; |
@@ -154,7 +152,7 @@ void AsyncCallTracker::asyncCallTrackingStateChanged(bool tracking) |
m_instrumentingAgents->setAsyncCallTracker(tracking ? this : nullptr); |
} |
-void AsyncCallTracker::resetAsyncCallChains() |
+void AsyncCallTracker::resetAsyncOperations() |
{ |
for (auto& it : m_executionContextDataMap) |
it.value->unobserve(); |
@@ -193,11 +191,11 @@ bool AsyncCallTracker::willFireTimer(ExecutionContext* context, int timerId) |
ASSERT(timerId > 0); |
ASSERT(!m_debuggerAgent->currentAsyncCallChain()); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { |
- setCurrentAsyncCallChain(context, data->m_timerCallChains.get(timerId)); |
+ willFireAsyncCall(data->m_timerCallChains.get(timerId)); |
if (!data->m_intervalTimerIds.contains(timerId)) |
data->m_timerCallChains.remove(timerId); |
} else { |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
return true; |
} |
@@ -229,10 +227,10 @@ bool AsyncCallTracker::willFireAnimationFrame(ExecutionContext* context, int cal |
ASSERT(callbackId > 0); |
ASSERT(!m_debuggerAgent->currentAsyncCallChain()); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { |
- setCurrentAsyncCallChain(context, data->m_animationFrameCallChains.get(callbackId)); |
+ willFireAsyncCall(data->m_animationFrameCallChains.get(callbackId)); |
data->m_animationFrameCallChains.remove(callbackId); |
} else { |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
return true; |
} |
@@ -263,9 +261,9 @@ void AsyncCallTracker::willHandleEvent(EventTarget* eventTarget, Event* event, E |
} else { |
ExecutionContext* context = eventTarget->executionContext(); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
- setCurrentAsyncCallChain(context, data->m_eventCallChains.get(event)); |
+ willFireAsyncCall(data->m_eventCallChains.get(event)); |
else |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
} |
@@ -294,9 +292,9 @@ void AsyncCallTracker::willHandleXHREvent(XMLHttpRequest* xhr, Event* event) |
ASSERT(context); |
ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
- setCurrentAsyncCallChain(context, data->m_xhrCallChains.get(xhr)); |
+ willFireAsyncCall(data->m_xhrCallChains.get(xhr)); |
else |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
void AsyncCallTracker::didEnqueueMutationRecord(ExecutionContext* context, MutationObserver* observer) |
@@ -323,10 +321,10 @@ void AsyncCallTracker::willDeliverMutationRecords(ExecutionContext* context, Mut |
ASSERT(context); |
ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { |
- setCurrentAsyncCallChain(context, data->m_mutationObserverCallChains.get(observer)); |
+ willFireAsyncCall(data->m_mutationObserverCallChains.get(observer)); |
data->m_mutationObserverCallChains.remove(observer); |
} else { |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
} |
@@ -354,10 +352,10 @@ void AsyncCallTracker::willPerformExecutionContextTask(ExecutionContext* context |
ASSERT(context); |
ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { |
- setCurrentAsyncCallChain(context, data->m_executionContextTaskCallChains.get(task)); |
+ willFireAsyncCall(data->m_executionContextTaskCallChains.get(task)); |
data->m_executionContextTaskCallChains.remove(task); |
} else { |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ willFireAsyncCall(InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
} |
@@ -369,7 +367,7 @@ int AsyncCallTracker::traceAsyncOperationStarting(ExecutionContext* context, con |
traceAsyncOperationCompleted(context, prevOperationId); |
int operationId = m_debuggerAgent->traceAsyncOperationStarting(operationName); |
ExecutionContextData* data = createContextDataIfNeeded(context); |
- data->m_asyncOperationCallChains.set(operationId, operationId); |
+ data->m_asyncOperations.set(operationId, operationId); |
return operationId; |
} |
@@ -380,7 +378,7 @@ void AsyncCallTracker::traceAsyncOperationCompleted(ExecutionContext* context, i |
if (operationId <= 0) |
return; |
if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
- data->m_asyncOperationCallChains.remove(operationId); |
+ data->m_asyncOperations.remove(operationId); |
} |
void AsyncCallTracker::traceAsyncOperationCompletedCallbackStarting(ExecutionContext* context, int operationId) |
@@ -389,14 +387,21 @@ void AsyncCallTracker::traceAsyncOperationCompletedCallbackStarting(ExecutionCon |
traceAsyncOperationCompleted(context, operationId); |
} |
+bool AsyncCallTracker::isKnownAsyncOperationId(ExecutionContext* context, int operationId) const |
+{ |
+ if (operationId <= 0) |
+ return false; |
+ if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
+ return data->m_asyncOperations.contains(operationId); |
+ return false; |
+} |
+ |
void AsyncCallTracker::traceAsyncCallbackStarting(ExecutionContext* context, int operationId) |
{ |
ASSERT(context); |
ASSERT(m_debuggerAgent->trackingAsyncCalls()); |
- if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
- setCurrentAsyncCallChain(context, operationId > 0 ? data->m_asyncOperationCallChains.get(operationId) : InspectorDebuggerAgent::unknownAsyncOperationId); |
- else |
- setCurrentAsyncCallChain(context, InspectorDebuggerAgent::unknownAsyncOperationId); |
+ ASSERT(operationId <= 0 || isKnownAsyncOperationId(context, operationId)); |
+ willFireAsyncCall(operationId > 0 ? operationId : InspectorDebuggerAgent::unknownAsyncOperationId); |
} |
void AsyncCallTracker::didFireAsyncCall() |
@@ -404,9 +409,9 @@ void AsyncCallTracker::didFireAsyncCall() |
m_debuggerAgent->traceAsyncCallbackCompleted(); |
} |
-void AsyncCallTracker::setCurrentAsyncCallChain(ExecutionContext* context, int operationId) |
+void AsyncCallTracker::willFireAsyncCall(int operationId) |
{ |
- m_debuggerAgent->traceAsyncCallbackStarting(toIsolate(context), operationId); |
+ m_debuggerAgent->traceAsyncCallbackStarting(operationId); |
} |
AsyncCallTracker::ExecutionContextData* AsyncCallTracker::createContextDataIfNeeded(ExecutionContext* context) |