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

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

Issue 2824293002: [inspector] cleanup all task related data when limit reached (Closed)
Patch Set: fixed test 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-debugger.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger.cc
diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc
index 91d37b10881db7939ce298a5fcd649988a841f85..f90403eeb1d3afeb3abbce1f0abaccabb610b648 100644
--- a/src/inspector/v8-debugger.cc
+++ b/src/inspector/v8-debugger.cc
@@ -21,7 +21,7 @@ namespace v8_inspector {
namespace {
-static const int kMaxAsyncTaskStacks = 1024 * 1024;
+static const int kMaxAsyncTaskStacks = 128 * 1024;
inline v8::Local<v8::Boolean> v8Boolean(bool value, v8::Isolate* isolate) {
return value ? v8::True(isolate) : v8::False(isolate);
@@ -851,7 +851,7 @@ void V8Debugger::asyncTaskCreatedForStack(void* task, void* parentTask) {
// Passing one as maxStackSize forces no async chain for the new stack.
if (asyncCreation && !asyncCreation->isEmpty()) {
m_asyncTaskCreationStacks[task] = asyncCreation;
- m_allAsyncStacks.push_back(asyncCreation);
+ m_allAsyncStacks.push_back(std::move(asyncCreation));
++m_asyncStacksCount;
collectOldAsyncStacksIfNeeded();
}
@@ -888,8 +888,7 @@ void V8Debugger::asyncTaskScheduledForStack(const String16& taskName,
if (asyncStack) {
m_asyncTaskStacks[task] = asyncStack;
if (recurring) m_recurringTasks.insert(task);
-
- m_allAsyncStacks.push_back(asyncStack);
+ m_allAsyncStacks.push_back(std::move(asyncStack));
++m_asyncStacksCount;
collectOldAsyncStacksIfNeeded();
}
@@ -916,15 +915,15 @@ void V8Debugger::asyncTaskStartedForStack(void* task) {
// - asyncTaskCanceled <-- canceled before finished
// <-- async stack requested here -->
// - asyncTaskFinished
- std::shared_ptr<AsyncStackTrace> asyncParent;
- if (stackIt != m_asyncTaskStacks.end()) asyncParent = stackIt->second.lock();
+ std::weak_ptr<AsyncStackTrace> asyncParent;
+ if (stackIt != m_asyncTaskStacks.end()) asyncParent = stackIt->second;
auto itCreation = m_asyncTaskCreationStacks.find(task);
- if (asyncParent && itCreation != m_asyncTaskCreationStacks.end()) {
+ if (asyncParent.lock() && itCreation != m_asyncTaskCreationStacks.end()) {
m_currentAsyncCreation.push_back(itCreation->second.lock());
} else {
- m_currentAsyncCreation.push_back(nullptr);
+ m_currentAsyncCreation.emplace_back();
}
- m_currentAsyncParent.push_back(asyncParent);
+ m_currentAsyncParent.push_back(asyncParent.lock());
}
void V8Debugger::asyncTaskFinishedForStack(void* task) {
@@ -1023,6 +1022,20 @@ void V8Debugger::collectOldAsyncStacksIfNeeded() {
}
removeOldAsyncTasks(m_asyncTaskStacks);
removeOldAsyncTasks(m_asyncTaskCreationStacks);
+ protocol::HashSet<void*> recurringLeft;
+ for (auto task : m_recurringTasks) {
+ if (m_asyncTaskStacks.find(task) == m_asyncTaskStacks.end()) continue;
+ recurringLeft.insert(task);
+ }
+ m_recurringTasks.swap(recurringLeft);
+ protocol::HashMap<void*, void*> parentLeft;
+ for (auto it : m_parentTask) {
+ if (m_asyncTaskCreationStacks.find(it.second) == m_asyncTaskStacks.end()) {
dgozman 2017/04/20 00:42:23 You are comparing iterator from one map to another
kozy 2017/04/20 00:59:02 C++ is my best friend since it allows it :) fixed:
+ continue;
+ }
+ parentLeft.insert(it);
+ }
+ m_parentTask.swap(parentLeft);
}
void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) {
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698