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

Side by Side Diff: src/inspector/v8-debugger.cc

Issue 2825903002: [inspector] deduplicate stack frames (Closed)
Patch Set: cleanup cache after stack trace collected 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/inspector/v8-debugger.h" 5 #include "src/inspector/v8-debugger.h"
6 6
7 #include "src/inspector/debugger-script.h" 7 #include "src/inspector/debugger-script.h"
8 #include "src/inspector/inspected-context.h" 8 #include "src/inspector/inspected-context.h"
9 #include "src/inspector/protocol/Protocol.h" 9 #include "src/inspector/protocol/Protocol.h"
10 #include "src/inspector/script-breakpoint.h" 10 #include "src/inspector/script-breakpoint.h"
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 m_taskWithScheduledBreak = nullptr; 967 m_taskWithScheduledBreak = nullptr;
968 } 968 }
969 969
970 void V8Debugger::allAsyncTasksCanceled() { 970 void V8Debugger::allAsyncTasksCanceled() {
971 m_asyncTaskStacks.clear(); 971 m_asyncTaskStacks.clear();
972 m_recurringTasks.clear(); 972 m_recurringTasks.clear();
973 m_currentAsyncParent.clear(); 973 m_currentAsyncParent.clear();
974 m_currentAsyncCreation.clear(); 974 m_currentAsyncCreation.clear();
975 m_currentTasks.clear(); 975 m_currentTasks.clear();
976 m_parentTask.clear(); 976 m_parentTask.clear();
977 m_asyncTaskCreationStacks.clear(); 977 m_asyncTaskCreationStacks.clear();
dgozman 2017/04/19 20:29:04 Let's cleanup frames cache here as well.
kozy 2017/04/20 00:06:49 Done.
978 978
979 m_allAsyncStacks.clear(); 979 m_allAsyncStacks.clear();
980 m_asyncStacksCount = 0; 980 m_asyncStacksCount = 0;
981 } 981 }
982 982
983 void V8Debugger::muteScriptParsedEvents() { 983 void V8Debugger::muteScriptParsedEvents() {
984 ++m_ignoreScriptParsedEventsCounter; 984 ++m_ignoreScriptParsedEventsCounter;
985 } 985 }
986 986
987 void V8Debugger::unmuteScriptParsedEvents() { 987 void V8Debugger::unmuteScriptParsedEvents() {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 if (m_asyncTaskStacks.find(task) == m_asyncTaskStacks.end()) continue; 1024 if (m_asyncTaskStacks.find(task) == m_asyncTaskStacks.end()) continue;
1025 recurringLeft.insert(task); 1025 recurringLeft.insert(task);
1026 } 1026 }
1027 m_recurringTasks.swap(recurringLeft); 1027 m_recurringTasks.swap(recurringLeft);
1028 protocol::HashMap<void*, void*> parentLeft; 1028 protocol::HashMap<void*, void*> parentLeft;
1029 for (auto it : m_parentTask) { 1029 for (auto it : m_parentTask) {
1030 if (m_asyncTaskStacks.find(it.first) == m_asyncTaskStacks.end()) continue; 1030 if (m_asyncTaskStacks.find(it.first) == m_asyncTaskStacks.end()) continue;
1031 parentLeft.insert(it); 1031 parentLeft.insert(it);
1032 } 1032 }
1033 m_parentTask.swap(parentLeft); 1033 m_parentTask.swap(parentLeft);
1034 std::map<int, std::weak_ptr<StackFrame>> framesCache;
1035 for (auto it : m_framesCache) {
1036 if (!it.second.expired()) framesCache.insert(it);
1037 }
1038 m_framesCache.swap(framesCache);
1034 } 1039 }
1035 1040
1036 void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) { 1041 void V8Debugger::removeOldAsyncTasks(AsyncTaskToStackTrace& map) {
1037 AsyncTaskToStackTrace cleanCopy; 1042 AsyncTaskToStackTrace cleanCopy;
1038 for (auto it : map) { 1043 for (auto it : map) {
1039 if (!it.second.expired()) cleanCopy.insert(it); 1044 if (!it.second.expired()) cleanCopy.insert(it);
1040 } 1045 }
1041 map.swap(cleanCopy); 1046 map.swap(cleanCopy);
1042 } 1047 }
1043 1048
1049 std::shared_ptr<StackFrame> V8Debugger::lookupFrame(int frameId) {
1050 auto it = m_framesCache.find(frameId);
1051 if (it != m_framesCache.end()) return it->second.lock();
1052 return nullptr;
1053 }
1054
1055 void V8Debugger::storeFrame(int frameId, std::shared_ptr<StackFrame> frame) {
1056 m_framesCache[frameId] = frame;
1057 }
1058
1044 void V8Debugger::setMaxAsyncTaskStacksForTest(int limit) { 1059 void V8Debugger::setMaxAsyncTaskStacksForTest(int limit) {
1045 m_maxAsyncCallStacks = 0; 1060 m_maxAsyncCallStacks = 0;
1046 collectOldAsyncStacksIfNeeded(); 1061 collectOldAsyncStacksIfNeeded();
1047 m_maxAsyncCallStacks = limit; 1062 m_maxAsyncCallStacks = limit;
1048 } 1063 }
1049 1064
1050 } // namespace v8_inspector 1065 } // namespace v8_inspector
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698