Chromium Code Reviews| Index: Source/core/inspector/InspectorDebuggerAgent.cpp |
| diff --git a/Source/core/inspector/InspectorDebuggerAgent.cpp b/Source/core/inspector/InspectorDebuggerAgent.cpp |
| index f37e1c09672750427786724ce70aae6719d69741..7b9baac57aac2ad1761ebe4c8de47f844f3ee27a 100644 |
| --- a/Source/core/inspector/InspectorDebuggerAgent.cpp |
| +++ b/Source/core/inspector/InspectorDebuggerAgent.cpp |
| @@ -104,6 +104,7 @@ InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedSc |
| , m_frontend(0) |
| , m_pausedScriptState(nullptr) |
| , m_javaScriptPauseScheduled(false) |
| + , m_stepLikePauseScheduled(false) |
|
yurys
2014/05/28 17:15:59
m_debuggerStepScheduled?
aandrey
2014/05/29 09:01:23
Done.
|
| , m_listener(0) |
| , m_skipStepInCount(numberOfStepsBeforeStepOut) |
| , m_skipAllPauses(false) |
| @@ -471,8 +472,7 @@ String InspectorDebuggerAgent::scriptURL(JavaScriptCallFrame* frame) |
| ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipExceptionPause() |
| { |
| - if (m_skipAllPauses) |
| - return ScriptDebugListener::Continue; |
| + // FIXME: Fast return: if (!m_cachedSkipStackRegExp && !has_any_anti_breakpoint) return ScriptDebugListener::NoSkip; |
| RefPtr<JavaScriptCallFrame> topFrame = scriptDebugServer().topCallFrameNoScopes(); |
| if (!topFrame) |
| @@ -522,17 +522,8 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipExceptio |
| return ScriptDebugListener::NoSkip; |
| } |
| -ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipBreakpointPause() |
| -{ |
| - if (m_skipAllPauses) |
| - return ScriptDebugListener::Continue; |
| - return ScriptDebugListener::NoSkip; |
| -} |
| - |
| ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipStepPause() |
| { |
| - if (m_skipAllPauses) |
| - return ScriptDebugListener::Continue; |
| if (!m_cachedSkipStackRegExp) |
| return ScriptDebugListener::NoSkip; |
| @@ -642,6 +633,7 @@ void InspectorDebuggerAgent::schedulePauseOnNextStatement(InspectorFrontend::Deb |
| return; |
| m_breakReason = breakReason; |
| m_breakAuxData = data; |
| + m_stepLikePauseScheduled = true; |
| scriptDebugServer().setPauseOnNextStatement(true); |
| } |
| @@ -650,6 +642,7 @@ void InspectorDebuggerAgent::cancelPauseOnNextStatement() |
| if (m_javaScriptPauseScheduled) |
| return; |
| clearBreakDetails(); |
| + m_stepLikePauseScheduled = false; |
| scriptDebugServer().setPauseOnNextStatement(false); |
| } |
| @@ -752,14 +745,16 @@ void InspectorDebuggerAgent::pause(ErrorString*) |
| if (m_javaScriptPauseScheduled) |
| return; |
| clearBreakDetails(); |
| - scriptDebugServer().setPauseOnNextStatement(true); |
| m_javaScriptPauseScheduled = true; |
| + m_stepLikePauseScheduled = false; |
| + scriptDebugServer().setPauseOnNextStatement(true); |
| } |
| void InspectorDebuggerAgent::resume(ErrorString* errorString) |
| { |
| if (!assertPaused(errorString)) |
| return; |
| + m_stepLikePauseScheduled = false; |
| m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup); |
| scriptDebugServer().continueProgram(); |
| } |
| @@ -787,6 +782,7 @@ void InspectorDebuggerAgent::stepOver(ErrorString* errorString, const String* ca |
| ScriptValue frame = resolveCallFrame(errorString, callFrameId); |
| if (!errorString->isEmpty()) |
| return; |
| + m_stepLikePauseScheduled = true; |
| m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup); |
| scriptDebugServer().stepOverStatement(frame); |
| } |
| @@ -795,6 +791,7 @@ void InspectorDebuggerAgent::stepInto(ErrorString* errorString) |
| { |
| if (!assertPaused(errorString)) |
| return; |
| + m_stepLikePauseScheduled = true; |
| m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup); |
| scriptDebugServer().stepIntoStatement(); |
| if (m_listener) |
| @@ -808,6 +805,7 @@ void InspectorDebuggerAgent::stepOut(ErrorString* errorString, const String* cal |
| ScriptValue frame = resolveCallFrame(errorString, callFrameId); |
| if (!errorString->isEmpty()) |
| return; |
| + m_stepLikePauseScheduled = true; |
| m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup); |
| scriptDebugServer().stepOutOfFunction(frame); |
| } |
| @@ -1104,13 +1102,19 @@ void InspectorDebuggerAgent::failedToParseSource(const String& url, const String |
| ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptState* scriptState, const ScriptValue& callFrames, const ScriptValue& exception, const Vector<String>& hitBreakpoints) |
| { |
| - ScriptDebugListener::SkipPauseRequest result = ScriptDebugListener::NoSkip; |
| - if (!exception.isEmpty()) |
| - result = shouldSkipExceptionPause(); |
| + ScriptDebugListener::SkipPauseRequest result; |
| + if (m_javaScriptPauseScheduled) |
| + result = ScriptDebugListener::NoSkip; // Don't skip explicit pause requests from front-end. |
| + else if (m_skipAllPauses) |
| + result = ScriptDebugListener::Continue; |
| else if (!hitBreakpoints.isEmpty()) |
| - result = shouldSkipBreakpointPause(); |
| - else |
| + result = ScriptDebugListener::NoSkip; // Don't skip explicit breakpoints even if set in frameworks. |
| + else if (!exception.isEmpty()) |
| + result = shouldSkipExceptionPause(); |
| + else if (m_stepLikePauseScheduled) |
| result = shouldSkipStepPause(); |
| + else |
| + result = ScriptDebugListener::NoSkip; |
| if (result != ScriptDebugListener::NoSkip) |
| return result; |
| @@ -1146,6 +1150,7 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptSta |
| m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBreakpointIds, currentAsyncStackTrace()); |
| m_javaScriptPauseScheduled = false; |
| + m_stepLikePauseScheduled = false; |
| if (!m_continueToLocationBreakpointId.isEmpty()) { |
| scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId); |
| @@ -1175,6 +1180,7 @@ void InspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reason::E |
| return; |
| m_breakReason = breakReason; |
| m_breakAuxData = data; |
| + m_stepLikePauseScheduled = false; |
| scriptDebugServer().breakProgram(); |
| } |
| @@ -1188,6 +1194,7 @@ void InspectorDebuggerAgent::clear() |
| m_continueToLocationBreakpointId = String(); |
| clearBreakDetails(); |
| m_javaScriptPauseScheduled = false; |
| + m_stepLikePauseScheduled = false; |
| ErrorString error; |
| setOverlayMessage(&error, 0); |
| } |