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

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

Issue 2826183002: [inspector] collect old async stack traces 20% faster (Closed)
Patch Set: rebased 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 7e5653890dfe2764ff104e1b7c58e781e719ef0f..5cd56b4a4105cf1cfcebb5841348fc9a63aa7e9d 100644
--- a/src/inspector/v8-debugger.cc
+++ b/src/inspector/v8-debugger.cc
@@ -133,6 +133,17 @@ v8::MaybeLocal<v8::Object> generatorObjectLocation(
suspendedLocation.GetColumnNumber());
}
+template <typename Map>
+void cleanupExpiredWeakPointers(Map& map) {
+ for (auto it = map.begin(); it != map.end();) {
+ if (it->second.expired()) {
+ it = map.erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
} // namespace
static bool inLiveEditScope = false;
@@ -1017,36 +1028,24 @@ void V8Debugger::collectOldAsyncStacksIfNeeded() {
m_allAsyncStacks.pop_front();
--m_asyncStacksCount;
}
- 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);
+ cleanupExpiredWeakPointers(m_asyncTaskStacks);
+ cleanupExpiredWeakPointers(m_asyncTaskCreationStacks);
+ for (auto it = m_recurringTasks.begin(); it != m_recurringTasks.end();) {
+ if (m_asyncTaskStacks.find(*it) == m_asyncTaskStacks.end()) {
+ it = m_recurringTasks.erase(it);
+ } else {
+ ++it;
+ }
}
- m_recurringTasks.swap(recurringLeft);
- protocol::HashMap<void*, void*> parentLeft;
- for (auto it : m_parentTask) {
- if (m_asyncTaskCreationStacks.find(it.second) ==
+ for (auto it = m_parentTask.begin(); it != m_parentTask.end();) {
+ if (m_asyncTaskCreationStacks.find(it->second) ==
m_asyncTaskCreationStacks.end()) {
- continue;
+ it = m_parentTask.erase(it);
+ } else {
+ ++it;
}
- 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) {
- AsyncTaskToStackTrace cleanCopy;
- for (auto it : map) {
- if (!it.second.expired()) cleanCopy.insert(it);
}
- map.swap(cleanCopy);
+ cleanupExpiredWeakPointers(m_framesCache);
}
std::shared_ptr<StackFrame> V8Debugger::symbolize(
« 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