Chromium Code Reviews| Index: src/inspector/v8-debugger.h |
| diff --git a/src/inspector/v8-debugger.h b/src/inspector/v8-debugger.h |
| index 1e2746040f4f835ea13aba6b759df701de02a051..95e0199d3481a8446d7485f538cbf53bd3970017 100644 |
| --- a/src/inspector/v8-debugger.h |
| +++ b/src/inspector/v8-debugger.h |
| @@ -5,6 +5,7 @@ |
| #ifndef V8_INSPECTOR_V8DEBUGGER_H_ |
| #define V8_INSPECTOR_V8DEBUGGER_H_ |
| +#include <list> |
| #include <vector> |
| #include "src/base/macros.h" |
| @@ -20,7 +21,9 @@ |
| namespace v8_inspector { |
| +class AsyncStackTrace; |
| struct ScriptBreakpoint; |
| +class V8Debugger; |
| class V8DebuggerAgentImpl; |
| class V8InspectorImpl; |
| class V8StackTraceImpl; |
| @@ -35,6 +38,7 @@ class V8Debugger : public v8::debug::DebugDelegate { |
| ~V8Debugger(); |
| bool enabled() const; |
| + v8::Isolate* isolate() const { return m_isolate; } |
| String16 setBreakpoint(const ScriptBreakpoint&, int* actualLineNumber, |
| int* actualColumnNumber); |
| @@ -76,9 +80,11 @@ class V8Debugger : public v8::debug::DebugDelegate { |
| v8::Local<v8::Context> pausedContext() { return m_pausedContext; } |
| int maxAsyncCallChainDepth() { return m_maxAsyncCallStackDepth; } |
| - V8StackTraceImpl* currentAsyncCallChain(); |
| - V8StackTraceImpl* currentAsyncTaskCreationStack(); |
| void setAsyncCallStackDepth(V8DebuggerAgentImpl*, int); |
| + |
| + std::shared_ptr<AsyncStackTrace> currentAsyncParent(); |
| + std::shared_ptr<AsyncStackTrace> currentAsyncCreation(); |
| + |
| std::unique_ptr<V8StackTraceImpl> createStackTrace(v8::Local<v8::StackTrace>); |
| std::unique_ptr<V8StackTraceImpl> captureStackTrace(bool fullStack); |
| @@ -99,7 +105,7 @@ class V8Debugger : public v8::debug::DebugDelegate { |
| WasmTranslation* wasmTranslation() { return &m_wasmTranslation; } |
| - void setMaxAsyncTaskStacksForTest(int limit) { m_maxAsyncCallStacks = limit; } |
| + void setMaxAsyncTaskStacksForTest(int limit); |
| private: |
| void compileDebuggerScript(); |
| @@ -144,8 +150,6 @@ class V8Debugger : public v8::debug::DebugDelegate { |
| void asyncTaskFinishedForStepping(void* task); |
| void asyncTaskCanceledForStepping(void* task); |
| - void registerAsyncTaskIfNeeded(void* task); |
| - |
| // v8::debug::DebugEventListener implementation. |
| void PromiseEventOccurred(v8::debug::PromiseDebugActionType type, int id, |
| int parentId, bool createdByUser) override; |
| @@ -178,18 +182,22 @@ class V8Debugger : public v8::debug::DebugDelegate { |
| int m_targetContextGroupId = 0; |
| using AsyncTaskToStackTrace = |
| - protocol::HashMap<void*, std::unique_ptr<V8StackTraceImpl>>; |
| + protocol::HashMap<void*, std::weak_ptr<AsyncStackTrace>>; |
| AsyncTaskToStackTrace m_asyncTaskStacks; |
| AsyncTaskToStackTrace m_asyncTaskCreationStacks; |
| int m_maxAsyncCallStacks; |
| - std::map<int, void*> m_idToTask; |
| - std::unordered_map<void*, int> m_taskToId; |
| - int m_lastTaskId; |
| protocol::HashSet<void*> m_recurringTasks; |
| int m_maxAsyncCallStackDepth; |
| + |
| std::vector<void*> m_currentTasks; |
| - std::vector<std::unique_ptr<V8StackTraceImpl>> m_currentStacks; |
| - std::vector<std::unique_ptr<V8StackTraceImpl>> m_currentCreationStacks; |
| + std::vector<std::shared_ptr<AsyncStackTrace>> m_currentAsyncParent; |
| + std::vector<std::shared_ptr<AsyncStackTrace>> m_currentAsyncCreation; |
| + |
| + void collectOldAsyncStacksIfNeeded(); |
| + void removeOldAsyncTasks(AsyncTaskToStackTrace& map); |
| + int m_asyncStacksCount = 0; |
| + std::list<std::shared_ptr<AsyncStackTrace>> m_allAsyncStacks; |
|
dgozman
2017/04/17 23:03:15
Let's comment that this owns all the stacks, while
kozy
2017/04/18 01:04:38
Done.
|
| + |
| protocol::HashMap<V8DebuggerAgentImpl*, int> m_maxAsyncCallStackDepthMap; |
| protocol::HashMap<void*, void*> m_parentTask; |
| protocol::HashMap<void*, void*> m_firstNextTask; |