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

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

Issue 74063002: DevTools: Support asynchronous call stacks on backend. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: addressed Created 7 years, 1 month 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/InspectorDebuggerAgent.cpp
diff --git a/Source/core/inspector/InspectorDebuggerAgent.cpp b/Source/core/inspector/InspectorDebuggerAgent.cpp
index 55d9b7266e099f20f6df6f782f8995a0ed9fd9bd..c827a833c78cc2ed68e2d5df70b8ea1109d3f7e2 100644
--- a/Source/core/inspector/InspectorDebuggerAgent.cpp
+++ b/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -657,11 +657,62 @@ void InspectorDebuggerAgent::cancelPauseOnNextStatement()
scriptDebugServer().setPauseOnNextStatement(false);
}
+void InspectorDebuggerAgent::requestAsyncCallFramesIfNeeded()
+{
+ if (m_asyncCallStackTracker.isEnabled())
+ scriptDebugServer().requestAsyncCallFrames();
yurys 2013/11/28 09:18:16 Why do we need this roundtrip into the debug serve
+}
+
+void InspectorDebuggerAgent::didRequestAsyncCallFrames(ScriptValue callFrames)
+{
+ m_asyncCallStackTracker.didRequestAsyncCallFrames(callFrames);
+}
+
+void InspectorDebuggerAgent::didInstallTimer(ExecutionContext*, int timerId, int timeout, bool singleShot)
+{
+ m_asyncCallStackTracker.didInstallTimer(timerId, singleShot);
+ requestAsyncCallFramesIfNeeded();
+}
+
+void InspectorDebuggerAgent::didRemoveTimer(ExecutionContext*, int timerId)
+{
+ m_asyncCallStackTracker.didRemoveTimer(timerId);
+}
+
+bool InspectorDebuggerAgent::willFireTimer(ExecutionContext*, int timerId)
+{
+ m_asyncCallStackTracker.willFireTimer(timerId);
+ return true;
+}
+
void InspectorDebuggerAgent::didFireTimer()
{
+ m_asyncCallStackTracker.didAsyncCall();
cancelPauseOnNextStatement();
}
+void InspectorDebuggerAgent::didRequestAnimationFrame(Document*, int callbackId)
+{
+ m_asyncCallStackTracker.didRequestAnimationFrame(callbackId);
+ requestAsyncCallFramesIfNeeded();
+}
+
+void InspectorDebuggerAgent::didCancelAnimationFrame(Document*, int callbackId)
+{
+ m_asyncCallStackTracker.didCancelAnimationFrame(callbackId);
+}
+
+bool InspectorDebuggerAgent::willFireAnimationFrame(Document*, int callbackId)
+{
+ m_asyncCallStackTracker.willFireAnimationFrame(callbackId);
+ return true;
+}
+
+void InspectorDebuggerAgent::didFireAnimationFrame()
+{
+ m_asyncCallStackTracker.didAsyncCall();
+}
+
void InspectorDebuggerAgent::didHandleEvent()
{
cancelPauseOnNextStatement();
@@ -886,6 +937,11 @@ void InspectorDebuggerAgent::skipStackFrames(ErrorString* errorString, const Str
m_cachedSkipStackRegExp = compiled.release();
}
+void InspectorDebuggerAgent::setAsyncCallStackDepth(ErrorString*, int depth)
+{
+ m_asyncCallStackTracker.setAsyncCallStackDepth(depth);
+}
+
void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String& directiveText)
{
if (scriptDebugServer().pauseOnExceptionsState() != ScriptDebugServer::DontPauseOnExceptions) {
@@ -904,7 +960,19 @@ PassRefPtr<Array<CallFrame> > InspectorDebuggerAgent::currentCallFrames()
ASSERT_NOT_REACHED();
return Array<CallFrame>::create();
}
- return injectedScript.wrapCallFrames(m_currentCallStack);
+ RefPtr<Array<CallFrame> > result = injectedScript.wrapCallFrames(m_currentCallStack);
+ if (!result->length())
+ return result.release();
+ RefPtr<Array<CallFrame> > lastCallFrames = result;
+ AsyncCallStackTracker::AsyncCallStackIterator asyncCallStacks = m_asyncCallStackTracker.currentAsyncCallStack();
+ while (asyncCallStacks.hasNext()) {
+ RefPtr<CallFrame> last = CallFrame::runtimeCast(lastCallFrames->asArray()->get(lastCallFrames->length() - 1));
+ lastCallFrames = injectedScript.wrapCallFrames(asyncCallStacks.next());
+ if (!lastCallFrames->length())
+ break;
+ last->setAsyncCallFrames(lastCallFrames);
+ }
+ return result.release();
}
String InspectorDebuggerAgent::sourceMapURLForScript(const Script& script)
@@ -989,7 +1057,7 @@ void InspectorDebuggerAgent::didPause(ScriptState* scriptState, const ScriptValu
InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(scriptState);
if (!injectedScript.hasNoValue()) {
m_breakReason = InspectorFrontend::Debugger::Reason::Exception;
- m_breakAuxData = injectedScript.wrapObject(exception, "backtrace")->openAccessors();
+ m_breakAuxData = injectedScript.wrapObject(exception, InspectorDebuggerAgent::backtraceObjectGroup)->openAccessors();
// m_breakAuxData might be null after this.
}
}
@@ -1047,6 +1115,7 @@ void InspectorDebuggerAgent::clear()
m_currentCallStack = ScriptValue();
m_scripts.clear();
m_breakpointIdToDebugServerBreakpointIds.clear();
+ m_asyncCallStackTracker.clear();
m_continueToLocationBreakpointId = String();
clearBreakDetails();
m_javaScriptPauseScheduled = false;
@@ -1085,6 +1154,7 @@ void InspectorDebuggerAgent::reset()
{
m_scripts.clear();
m_breakpointIdToDebugServerBreakpointIds.clear();
+ m_asyncCallStackTracker.clear();
if (m_frontend)
m_frontend->globalObjectCleared();
}

Powered by Google App Engine
This is Rietveld 408576698