Index: src/inspector/v8-debugger.cc |
diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc |
index fd8c93ca9026e94bc0953d4713d10c893d69694f..d093f28d287b6198a358f0319dba77e19d615fe2 100644 |
--- a/src/inspector/v8-debugger.cc |
+++ b/src/inspector/v8-debugger.cc |
@@ -1031,6 +1031,11 @@ void V8Debugger::collectOldAsyncStacksIfNeeded() { |
parentLeft.insert(it); |
} |
m_parentTask.swap(parentLeft); |
+ std::map<int, std::weak_ptr<StackFrame>> framesCache; |
+ for (auto it : m_framesCache) { |
+ if (!it.second.expired()) framesCache.insert(it); |
+ } |
+ m_framesCache.swap(framesCache); |
} |
void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) { |
@@ -1041,6 +1046,16 @@ void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) { |
map.swap(cleanCopy); |
} |
+std::shared_ptr<StackFrame> V8Debugger::lookupFrame(int frameId) { |
+ auto it = m_framesCache.find(frameId); |
+ if (it != m_framesCache.end()) return it->second.lock(); |
+ return nullptr; |
+} |
+ |
+void V8Debugger::storeFrame(int frameId, std::shared_ptr<StackFrame> frame) { |
+ m_framesCache[frameId] = frame; |
+} |
+ |
void V8Debugger::setMaxAsyncTaskStacksForTest(int limit) { |
m_maxAsyncCallStacks = 0; |
collectOldAsyncStacksIfNeeded(); |