Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1161)

Unified Diff: Source/core/inspector/AsyncCallStackTracker.cpp

Issue 332493002: DevTools: Support async call stacks for scripted animation events (like scroll). (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/AsyncCallStackTracker.cpp
diff --git a/Source/core/inspector/AsyncCallStackTracker.cpp b/Source/core/inspector/AsyncCallStackTracker.cpp
index 2c19aa45446da3c850fd19b035ba4149c6aef105..10bd8ec951bf7a43449100c593f6b79257f40bba 100644
--- a/Source/core/inspector/AsyncCallStackTracker.cpp
+++ b/Source/core/inspector/AsyncCallStackTracker.cpp
@@ -76,6 +76,7 @@ public:
HashSet<int> m_intervalTimerIds;
HashMap<int, RefPtr<AsyncCallChain> > m_timerCallChains;
HashMap<int, RefPtr<AsyncCallChain> > m_animationFrameCallChains;
+ HashMap<Event*, RefPtr<AsyncCallChain> > m_eventCallChains;
HashMap<EventTarget*, RefPtr<AsyncCallChain> > m_xhrCallChains;
HashMap<MutationObserver*, RefPtr<AsyncCallChain> > m_mutationObserverCallChains;
};
@@ -197,14 +198,36 @@ void AsyncCallStackTracker::willFireAnimationFrame(ExecutionContext* context, in
setCurrentAsyncCallChain(nullptr);
}
-void AsyncCallStackTracker::willHandleEvent(EventTarget* eventTarget, const AtomicString& eventType, EventListener* listener, bool useCapture)
+void AsyncCallStackTracker::didEnqueueEvent(EventTarget* eventTarget, Event* event, const ScriptValue& callFrames)
{
ASSERT(eventTarget->executionContext());
ASSERT(isEnabled());
- if (XMLHttpRequest* xhr = toXmlHttpRequest(eventTarget))
- willHandleXHREvent(xhr, eventTarget, eventType);
- else
- setCurrentAsyncCallChain(nullptr);
+ if (!validateCallFrames(callFrames))
+ return;
+ ExecutionContextData* data = createContextDataIfNeeded(eventTarget->executionContext());
+ data->m_eventCallChains.set(event, createAsyncCallChain(event->type(), callFrames));
+}
+
+void AsyncCallStackTracker::didDispatchEvent(EventTarget* eventTarget, Event* event)
+{
+ ASSERT(eventTarget->executionContext());
+ ASSERT(isEnabled());
+ if (ExecutionContextData* data = m_executionContextDataMap.get(eventTarget->executionContext()))
+ data->m_eventCallChains.remove(event);
+}
+
+void AsyncCallStackTracker::willHandleEvent(EventTarget* eventTarget, Event* event, EventListener* listener, bool useCapture)
+{
+ ASSERT(eventTarget->executionContext());
+ ASSERT(isEnabled());
+ if (XMLHttpRequest* xhr = toXmlHttpRequest(eventTarget)) {
+ willHandleXHREvent(xhr, eventTarget, event);
+ } else {
+ if (ExecutionContextData* data = m_executionContextDataMap.get(eventTarget->executionContext()))
+ setCurrentAsyncCallChain(data->m_eventCallChains.get(event));
+ else
+ setCurrentAsyncCallChain(nullptr);
+ }
}
void AsyncCallStackTracker::willLoadXHR(XMLHttpRequest* xhr, const ScriptValue& callFrames)
@@ -217,13 +240,13 @@ void AsyncCallStackTracker::willLoadXHR(XMLHttpRequest* xhr, const ScriptValue&
data->m_xhrCallChains.set(xhr, createAsyncCallChain(xhrSendName, callFrames));
}
-void AsyncCallStackTracker::willHandleXHREvent(XMLHttpRequest* xhr, EventTarget* eventTarget, const AtomicString& eventType)
+void AsyncCallStackTracker::willHandleXHREvent(XMLHttpRequest* xhr, EventTarget* eventTarget, Event* event)
{
ASSERT(xhr->executionContext());
ASSERT(isEnabled());
if (ExecutionContextData* data = m_executionContextDataMap.get(xhr->executionContext())) {
bool isXHRDownload = (xhr == eventTarget);
- if (isXHRDownload && eventType == EventTypeNames::loadend)
+ if (isXHRDownload && event->type() == EventTypeNames::loadend)
setCurrentAsyncCallChain(data->m_xhrCallChains.take(xhr));
else
setCurrentAsyncCallChain(data->m_xhrCallChains.get(xhr));

Powered by Google App Engine
This is Rietveld 408576698