| Index: src/inspector/v8-debugger-agent-impl.cc
|
| diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc
|
| index 4bcb0c772ee4f8a05dd535d76e9210b7ecfe516a..74d4235fa7b68eacbcf1f0c1dd0482053b9f47ef 100644
|
| --- a/src/inspector/v8-debugger-agent-impl.cc
|
| +++ b/src/inspector/v8-debugger-agent-impl.cc
|
| @@ -198,10 +198,7 @@ V8DebuggerAgentImpl::V8DebuggerAgentImpl(
|
| m_state(state),
|
| m_frontend(frontendChannel),
|
| m_isolate(m_inspector->isolate()),
|
| - m_scheduledDebuggerStep(NoStep),
|
| - m_javaScriptPauseScheduled(false),
|
| - m_recursionLevelForStepOut(0) {
|
| -}
|
| + m_javaScriptPauseScheduled(false) {}
|
|
|
| V8DebuggerAgentImpl::~V8DebuggerAgentImpl() {}
|
|
|
| @@ -253,7 +250,6 @@ Response V8DebuggerAgentImpl::disable() {
|
| m_debugger->setAsyncCallStackDepth(this, 0);
|
| m_continueToLocationBreakpointId = String16();
|
| clearBreakDetails();
|
| - m_scheduledDebuggerStep = NoStep;
|
| m_javaScriptPauseScheduled = false;
|
| m_skipAllPauses = false;
|
| m_state->setBoolean(DebuggerAgentState::skipAllPauses, false);
|
| @@ -688,26 +684,20 @@ void V8DebuggerAgentImpl::clearBreakDetails() {
|
| void V8DebuggerAgentImpl::schedulePauseOnNextStatement(
|
| const String16& breakReason,
|
| std::unique_ptr<protocol::DictionaryValue> data) {
|
| - if (!enabled() || m_scheduledDebuggerStep == StepInto ||
|
| - m_javaScriptPauseScheduled || isPaused() ||
|
| + if (!enabled() || m_javaScriptPauseScheduled || isPaused() ||
|
| !m_debugger->breakpointsActivated())
|
| return;
|
| - if (m_breakReason.empty()) m_debugger->setPauseOnNextStatement(true);
|
| + if (m_breakReason.empty()) {
|
| + m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId());
|
| + }
|
| pushBreakDetails(breakReason, std::move(data));
|
| }
|
|
|
| -void V8DebuggerAgentImpl::schedulePauseOnNextStatementIfSteppingInto() {
|
| - DCHECK(enabled());
|
| - if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled ||
|
| - isPaused())
|
| - return;
|
| - m_debugger->setPauseOnNextStatement(true);
|
| -}
|
| -
|
| void V8DebuggerAgentImpl::cancelPauseOnNextStatement() {
|
| if (m_javaScriptPauseScheduled || isPaused()) return;
|
| popBreakDetails();
|
| - if (m_breakReason.empty()) m_debugger->setPauseOnNextStatement(false);
|
| + if (m_breakReason.empty())
|
| + m_debugger->setPauseOnNextStatement(false, m_session->contextGroupId());
|
| }
|
|
|
| Response V8DebuggerAgentImpl::pause() {
|
| @@ -715,14 +705,12 @@ Response V8DebuggerAgentImpl::pause() {
|
| if (m_javaScriptPauseScheduled || isPaused()) return Response::OK();
|
| clearBreakDetails();
|
| m_javaScriptPauseScheduled = true;
|
| - m_scheduledDebuggerStep = NoStep;
|
| - m_debugger->setPauseOnNextStatement(true);
|
| + m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId());
|
| return Response::OK();
|
| }
|
|
|
| Response V8DebuggerAgentImpl::resume() {
|
| if (!isPaused()) return Response::Error(kDebuggerNotPaused);
|
| - m_scheduledDebuggerStep = NoStep;
|
| m_session->releaseObjectGroup(kBacktraceObjectGroup);
|
| m_debugger->continueProgram();
|
| return Response::OK();
|
| @@ -730,30 +718,22 @@ Response V8DebuggerAgentImpl::resume() {
|
|
|
| Response V8DebuggerAgentImpl::stepOver() {
|
| if (!isPaused()) return Response::Error(kDebuggerNotPaused);
|
| - // StepOver at function return point should fallback to StepInto.
|
| - JavaScriptCallFrame* frame =
|
| - !m_pausedCallFrames.empty() ? m_pausedCallFrames[0].get() : nullptr;
|
| - if (frame && frame->isAtReturn()) return stepInto();
|
| - m_scheduledDebuggerStep = StepOver;
|
| m_session->releaseObjectGroup(kBacktraceObjectGroup);
|
| - m_debugger->stepOverStatement();
|
| + m_debugger->stepOverStatement(m_session->contextGroupId());
|
| return Response::OK();
|
| }
|
|
|
| Response V8DebuggerAgentImpl::stepInto() {
|
| if (!isPaused()) return Response::Error(kDebuggerNotPaused);
|
| - m_scheduledDebuggerStep = StepInto;
|
| m_session->releaseObjectGroup(kBacktraceObjectGroup);
|
| - m_debugger->stepIntoStatement();
|
| + m_debugger->stepIntoStatement(m_session->contextGroupId());
|
| return Response::OK();
|
| }
|
|
|
| Response V8DebuggerAgentImpl::stepOut() {
|
| if (!isPaused()) return Response::Error(kDebuggerNotPaused);
|
| - m_scheduledDebuggerStep = StepOut;
|
| - m_recursionLevelForStepOut = 1;
|
| m_session->releaseObjectGroup(kBacktraceObjectGroup);
|
| - m_debugger->stepOutOfFunction();
|
| + m_debugger->stepOutOfFunction(m_session->contextGroupId());
|
| return Response::OK();
|
| }
|
|
|
| @@ -774,8 +754,6 @@ bool V8DebuggerAgentImpl::shouldBreakInScheduledAsyncTask() {
|
| if (!m_stepIntoAsyncCallback) return false;
|
| m_stepIntoAsyncCallback->sendSuccess();
|
| m_stepIntoAsyncCallback.reset();
|
| - m_scheduledDebuggerStep = NoStep;
|
| - v8::debug::ClearStepping(m_isolate);
|
| return true;
|
| }
|
|
|
| @@ -947,33 +925,6 @@ Response V8DebuggerAgentImpl::setBlackboxedRanges(
|
| return Response::OK();
|
| }
|
|
|
| -void V8DebuggerAgentImpl::willExecuteScript(int scriptId) {
|
| - changeJavaScriptRecursionLevel(+1);
|
| - if (m_scheduledDebuggerStep != StepInto) return;
|
| - schedulePauseOnNextStatementIfSteppingInto();
|
| -}
|
| -
|
| -void V8DebuggerAgentImpl::didExecuteScript() {
|
| - changeJavaScriptRecursionLevel(-1);
|
| -}
|
| -
|
| -void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step) {
|
| - if (m_javaScriptPauseScheduled && !m_skipAllPauses && !isPaused()) {
|
| - // Do not ever loose user's pause request until we have actually paused.
|
| - m_debugger->setPauseOnNextStatement(true);
|
| - }
|
| - if (m_scheduledDebuggerStep == StepOut) {
|
| - m_recursionLevelForStepOut += step;
|
| - if (!m_recursionLevelForStepOut) {
|
| - // When StepOut crosses a task boundary (i.e. js -> c++) from where it was
|
| - // requested,
|
| - // switch stepping to step into a next JS task, as if we exited to a
|
| - // blackboxed framework.
|
| - m_scheduledDebuggerStep = StepInto;
|
| - }
|
| - }
|
| -}
|
| -
|
| Response V8DebuggerAgentImpl::currentCallFrames(
|
| std::unique_ptr<Array<CallFrame>>* result) {
|
| if (!isPaused()) {
|
| @@ -1287,7 +1238,6 @@ void V8DebuggerAgentImpl::didPause(int contextId,
|
| m_frontend.paused(std::move(protocolCallFrames), breakReason,
|
| std::move(breakAuxData), std::move(hitBreakpointIds),
|
| currentAsyncStackTrace());
|
| - m_scheduledDebuggerStep = NoStep;
|
| m_javaScriptPauseScheduled = false;
|
|
|
| if (!m_continueToLocationBreakpointId.isEmpty()) {
|
| @@ -1310,12 +1260,11 @@ void V8DebuggerAgentImpl::breakProgram(
|
| std::vector<BreakReason> currentScheduledReason;
|
| currentScheduledReason.swap(m_breakReason);
|
| pushBreakDetails(breakReason, std::move(data));
|
| - m_scheduledDebuggerStep = NoStep;
|
| m_debugger->breakProgram();
|
| popBreakDetails();
|
| m_breakReason.swap(currentScheduledReason);
|
| if (!m_breakReason.empty()) {
|
| - m_debugger->setPauseOnNextStatement(true);
|
| + m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId());
|
| }
|
| }
|
|
|
| @@ -1347,7 +1296,6 @@ void V8DebuggerAgentImpl::removeBreakpointAt(const String16& scriptId,
|
|
|
| void V8DebuggerAgentImpl::reset() {
|
| if (!enabled()) return;
|
| - m_scheduledDebuggerStep = NoStep;
|
| m_blackboxedPositions.clear();
|
| resetBlackboxedStateCache();
|
| m_scripts.clear();
|
|
|