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

Unified Diff: Source/bindings/v8/ScriptDebugServer.cpp

Issue 74063002: DevTools: Support asynchronous call stacks on backend. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fixed test flakiness Created 7 years 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
« no previous file with comments | « Source/bindings/v8/ScriptDebugServer.h ('k') | Source/core/core.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/v8/ScriptDebugServer.cpp
diff --git a/Source/bindings/v8/ScriptDebugServer.cpp b/Source/bindings/v8/ScriptDebugServer.cpp
index 744494aaf59be1e9ccc852c670841c2cf10c94ac..3d7d31f8b86291cb05cc76d37a60f628c7c5bf33 100644
--- a/Source/bindings/v8/ScriptDebugServer.cpp
+++ b/Source/bindings/v8/ScriptDebugServer.cpp
@@ -292,7 +292,7 @@ bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& ne
*result = ScriptObject(ScriptState::current(), normalResult->ToObject());
// Call stack may have changed after if the edited function was on the stack.
if (!preview && isPaused())
- *newCallFrames = currentCallFrame();
+ *newCallFrames = currentCallFrames();
return true;
}
// Compile error.
@@ -314,33 +314,36 @@ bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& ne
return false;
}
-
-void ScriptDebugServer::updateCallStack(ScriptValue* callFrame)
-{
- if (isPaused())
- *callFrame = currentCallFrame();
-}
-
PassRefPtr<JavaScriptCallFrame> ScriptDebugServer::wrapCallFrames(v8::Handle<v8::Object> executionState, int maximumLimit)
{
- v8::Handle<v8::Value> argv[] = { executionState, v8::Integer::New(maximumLimit, m_isolate) };
- v8::Handle<v8::Value> currentCallFrameV8 = callDebuggerMethod("currentCallFrame", 2, argv);
-
+ v8::Handle<v8::Value> currentCallFrameV8;
+ if (executionState.IsEmpty()) {
+ v8::Handle<v8::Function> currentCallFrameFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "currentCallFrame")));
+ currentCallFrameV8 = v8::Debug::Call(currentCallFrameFunction, v8::Integer::New(maximumLimit, m_isolate));
+ } else {
+ v8::Handle<v8::Value> argv[] = { executionState, v8::Integer::New(maximumLimit, m_isolate) };
+ currentCallFrameV8 = callDebuggerMethod("currentCallFrame", 2, argv);
+ }
ASSERT(!currentCallFrameV8.IsEmpty());
if (!currentCallFrameV8->IsObject())
return PassRefPtr<JavaScriptCallFrame>();
return JavaScriptCallFrame::create(v8::Debug::GetDebugContext(), v8::Handle<v8::Object>::Cast(currentCallFrameV8));
}
-ScriptValue ScriptDebugServer::currentCallFrame()
+ScriptValue ScriptDebugServer::currentCallFrames()
{
- ASSERT(isPaused());
v8::HandleScope handleScope(m_isolate);
RefPtr<JavaScriptCallFrame> currentCallFrame = wrapCallFrames(m_executionState.newLocal(m_isolate), -1);
if (!currentCallFrame)
return ScriptValue(v8::Null(m_isolate), m_isolate);
- v8::Context::Scope contextScope(m_pausedContext);
- return ScriptValue(toV8(currentCallFrame.release(), v8::Handle<v8::Object>(), m_pausedContext->GetIsolate()), m_pausedContext->GetIsolate());
+
+ v8::HandleScope scope(m_isolate);
+ v8::Handle<v8::Context> pausedContext = m_pausedContext.IsEmpty() ? m_isolate->GetCurrentContext() : m_pausedContext;
+ if (pausedContext.IsEmpty())
+ return ScriptValue(v8::Null(m_isolate), m_isolate);
+
+ v8::Context::Scope contextScope(pausedContext);
+ return ScriptValue(toV8(currentCallFrame.release(), v8::Handle<v8::Object>(), pausedContext->GetIsolate()), pausedContext->GetIsolate());
}
void ScriptDebugServer::interruptAndRun(PassOwnPtr<Task> task, v8::Isolate* isolate)
@@ -362,7 +365,6 @@ static ScriptDebugServer* toScriptDebugServer(v8::Handle<v8::Value> data)
void ScriptDebugServer::breakProgramCallback(const v8::FunctionCallbackInfo<v8::Value>& info)
{
ASSERT(2 == info.Length());
-
ScriptDebugServer* thisPtr = toScriptDebugServer(info.Data());
v8::Handle<v8::Value> exception;
v8::Handle<v8::Array> hitBreakpoints;
@@ -388,7 +390,7 @@ void ScriptDebugServer::handleProgramBreak(v8::Handle<v8::Object> executionState
m_executionState.set(m_isolate, executionState);
ScriptState* currentCallFrameState = ScriptState::forContext(m_pausedContext);
- listener->didPause(currentCallFrameState, currentCallFrame(), ScriptValue(exception, currentCallFrameState->isolate()), breakpointIds);
+ listener->didPause(currentCallFrameState, currentCallFrames(), ScriptValue(exception, currentCallFrameState->isolate()), breakpointIds);
m_runningNestedMessageLoop = true;
runMessageLoopOnPause(m_pausedContext);
« no previous file with comments | « Source/bindings/v8/ScriptDebugServer.h ('k') | Source/core/core.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698