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

Unified Diff: src/inspector/v8-debugger.cc

Issue 2624543004: [inspector] unconditionally pause on OOM (Closed)
Patch Set: rebased Created 3 years, 11 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
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | src/inspector/v8-debugger-agent-impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger.cc
diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc
index 234299166e0cf058af6f7ab12fd1e70ea4c004f3..fcffdfb164e61749f5c87c09fe0db211838d19a1 100644
--- a/src/inspector/v8-debugger.cc
+++ b/src/inspector/v8-debugger.cc
@@ -74,6 +74,8 @@ void V8Debugger::enable() {
this);
v8::debug::SetCompileEventListener(m_isolate,
&V8Debugger::v8CompileEventListener, this);
+ v8::debug::SetOutOfMemoryCallback(m_isolate, &V8Debugger::v8OOMCallback,
+ this);
m_debuggerContext.Reset(m_isolate, v8::debug::GetDebugContext(m_isolate));
v8::debug::ChangeBreakOnException(m_isolate, v8::debug::NoBreakOnException);
m_pauseOnExceptionsState = v8::debug::NoBreakOnException;
@@ -91,6 +93,8 @@ void V8Debugger::disable() {
v8::debug::SetDebugEventListener(m_isolate, nullptr);
v8::debug::SetAsyncTaskListener(m_isolate, nullptr, nullptr);
v8::debug::SetCompileEventListener(m_isolate, nullptr, nullptr);
+ v8::debug::SetOutOfMemoryCallback(m_isolate, nullptr, nullptr);
+ m_isolate->RestoreOriginalHeapLimit();
}
bool V8Debugger::enabled() const { return !m_debuggerScript.IsEmpty(); }
@@ -483,8 +487,9 @@ void V8Debugger::handleProgramBreak(v8::Local<v8::Context> pausedContext,
m_pausedContext = pausedContext;
m_executionState = executionState;
- V8DebuggerAgentImpl::SkipPauseRequest result = agent->didPause(
- pausedContext, exception, breakpointIds, isPromiseRejection, isUncaught);
+ V8DebuggerAgentImpl::SkipPauseRequest result =
+ agent->didPause(pausedContext, exception, breakpointIds,
+ isPromiseRejection, isUncaught, m_scheduledOOMBreak);
if (result == V8DebuggerAgentImpl::RequestNoSkip) {
m_runningNestedMessageLoop = true;
int groupId = m_inspector->contextGroupId(pausedContext);
@@ -500,6 +505,8 @@ void V8Debugger::handleProgramBreak(v8::Local<v8::Context> pausedContext,
if (agent) agent->didContinue();
m_runningNestedMessageLoop = false;
}
+ if (m_scheduledOOMBreak) m_isolate->RestoreOriginalHeapLimit();
+ m_scheduledOOMBreak = false;
m_pausedContext.Clear();
m_executionState.Clear();
@@ -512,6 +519,13 @@ void V8Debugger::handleProgramBreak(v8::Local<v8::Context> pausedContext,
}
}
+void V8Debugger::v8OOMCallback(void* data) {
+ V8Debugger* thisPtr = static_cast<V8Debugger*>(data);
+ thisPtr->m_isolate->IncreaseHeapLimitForDebugging();
+ thisPtr->m_scheduledOOMBreak = true;
+ thisPtr->setPauseOnNextStatement(true);
+}
+
void V8Debugger::v8DebugEventCallback(
const v8::debug::EventDetails& eventDetails) {
V8Debugger* thisPtr = toV8Debugger(eventDetails.GetCallbackData());
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | src/inspector/v8-debugger-agent-impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698