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

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

Issue 2816043006: [inspector] avoid cloning of async call chains (Closed)
Patch Set: lines and columns in stack string should be 1-based Created 3 years, 8 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-console.cc ('k') | src/inspector/v8-debugger.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger.h
diff --git a/src/inspector/v8-debugger.h b/src/inspector/v8-debugger.h
index 1e2746040f4f835ea13aba6b759df701de02a051..784f4ba4fabce97592673db8c725993369383f72 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,24 @@ 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;
+ // V8Debugger owns all the async stacks, while most of the other references
+ // are weak, which allows to collect some stacks when there are too many.
+ std::list<std::shared_ptr<AsyncStackTrace>> m_allAsyncStacks;
+
protocol::HashMap<V8DebuggerAgentImpl*, int> m_maxAsyncCallStackDepthMap;
protocol::HashMap<void*, void*> m_parentTask;
protocol::HashMap<void*, void*> m_firstNextTask;
« no previous file with comments | « src/inspector/v8-console.cc ('k') | src/inspector/v8-debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698