summaryrefslogtreecommitdiff
path: root/deps/v8/src/inspector/v8-inspector-impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/inspector/v8-inspector-impl.cc')
-rw-r--r--deps/v8/src/inspector/v8-inspector-impl.cc25
1 files changed, 22 insertions, 3 deletions
diff --git a/deps/v8/src/inspector/v8-inspector-impl.cc b/deps/v8/src/inspector/v8-inspector-impl.cc
index 27bdd3e812..60ad12aece 100644
--- a/deps/v8/src/inspector/v8-inspector-impl.cc
+++ b/deps/v8/src/inspector/v8-inspector-impl.cc
@@ -44,6 +44,7 @@
#include "src/inspector/v8-console-message.h"
#include "src/inspector/v8-console.h"
#include "src/inspector/v8-debugger-agent-impl.h"
+#include "src/inspector/v8-debugger-barrier.h"
#include "src/inspector/v8-debugger-id.h"
#include "src/inspector/v8-debugger.h"
#include "src/inspector/v8-inspector-session-impl.h"
@@ -147,11 +148,26 @@ std::unique_ptr<V8StackTrace> V8InspectorImpl::createStackTrace(
std::unique_ptr<V8InspectorSession> V8InspectorImpl::connect(
int contextGroupId, V8Inspector::Channel* channel, StringView state,
- ClientTrustLevel client_trust_level) {
+ ClientTrustLevel client_trust_level, SessionPauseState pause_state) {
int sessionId = ++m_lastSessionId;
+ std::shared_ptr<V8DebuggerBarrier> debuggerBarrier;
+ if (pause_state == kWaitingForDebugger) {
+ auto it = m_debuggerBarriers.find(contextGroupId);
+ if (it != m_debuggerBarriers.end()) {
+ // Note this will be empty in case a pre-existent barrier is already
+ // released. This is by design, as a released throttle is no longer
+ // efficient.
+ debuggerBarrier = it->second.lock();
+ } else {
+ debuggerBarrier =
+ std::make_shared<V8DebuggerBarrier>(m_client, contextGroupId);
+ m_debuggerBarriers.insert(it, {contextGroupId, debuggerBarrier});
+ }
+ }
std::unique_ptr<V8InspectorSessionImpl> session =
V8InspectorSessionImpl::create(this, contextGroupId, sessionId, channel,
- state, client_trust_level);
+ state, client_trust_level,
+ std::move(debuggerBarrier));
m_sessions[contextGroupId][sessionId] = session.get();
return std::move(session);
}
@@ -159,7 +175,10 @@ std::unique_ptr<V8InspectorSession> V8InspectorImpl::connect(
void V8InspectorImpl::disconnect(V8InspectorSessionImpl* session) {
auto& map = m_sessions[session->contextGroupId()];
map.erase(session->sessionId());
- if (map.empty()) m_sessions.erase(session->contextGroupId());
+ if (map.empty()) {
+ m_sessions.erase(session->contextGroupId());
+ m_debuggerBarriers.erase(session->contextGroupId());
+ }
}
InspectedContext* V8InspectorImpl::getContext(int groupId,