Chromium Code Reviews| Index: src/inspector/v8-debugger.cc |
| diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc |
| index f90403eeb1d3afeb3abbce1f0abaccabb610b648..61700a828b4010470dc60b2b17e37be668ceb35f 100644 |
| --- a/src/inspector/v8-debugger.cc |
| +++ b/src/inspector/v8-debugger.cc |
| @@ -979,6 +979,7 @@ void V8Debugger::allAsyncTasksCanceled() { |
| m_parentTask.clear(); |
| m_asyncTaskCreationStacks.clear(); |
| + m_framesCache.clear(); |
| m_allAsyncStacks.clear(); |
| m_asyncStacksCount = 0; |
| } |
| @@ -1036,6 +1037,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) { |
| @@ -1046,6 +1052,25 @@ void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) { |
| map.swap(cleanCopy); |
| } |
| +std::shared_ptr<StackFrame> V8Debugger::symbolize( |
| + v8::Local<v8::StackFrame> v8Frame) { |
| + auto it = m_framesCache.end(); |
| + int frameId = 0; |
| + if (m_maxAsyncCallStackDepth) { |
|
dgozman
2017/04/20 16:38:21
Choose one...
kozy
2017/04/20 17:05:37
Done.
|
| + frameId = v8::debug::GetStackFrameId(v8Frame); |
| + it = m_framesCache.find(frameId); |
| + } |
| + if (it != m_framesCache.end()) return it->second.lock(); |
|
dgozman
2017/04/20 16:38:21
This can return empty shared_ptr.
kozy
2017/04/20 17:05:37
Done.
|
| + std::shared_ptr<StackFrame> frame(new StackFrame(v8Frame)); |
| + // TODO(clemensh): Figure out a way to do this translation only right before |
| + // sending the stack trace over wire. |
| + if (v8Frame->IsWasm()) frame->translate(&m_wasmTranslation); |
| + if (m_maxAsyncCallStacks) { |
|
dgozman
2017/04/20 16:38:21
...or another.
kozy
2017/04/20 17:05:37
Done.
|
| + m_framesCache[frameId] = frame; |
| + } |
| + return frame; |
| +} |
| + |
| void V8Debugger::setMaxAsyncTaskStacksForTest(int limit) { |
| m_maxAsyncCallStacks = 0; |
| collectOldAsyncStacksIfNeeded(); |