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

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

Issue 2844753002: [inspector] better stacks for promises (Closed)
Patch Set: ac Created 3 years, 7 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
« no previous file with comments | « no previous file | src/inspector/v8-stack-trace-impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 void V8Debugger::asyncTaskCanceledForStack(void* task) { 906 void V8Debugger::asyncTaskCanceledForStack(void* task) {
907 if (!m_maxAsyncCallStackDepth) return; 907 if (!m_maxAsyncCallStackDepth) return;
908 m_asyncTaskStacks.erase(task); 908 m_asyncTaskStacks.erase(task);
909 m_recurringTasks.erase(task); 909 m_recurringTasks.erase(task);
910 m_parentTask.erase(task); 910 m_parentTask.erase(task);
911 m_asyncTaskCreationStacks.erase(task); 911 m_asyncTaskCreationStacks.erase(task);
912 } 912 }
913 913
914 void V8Debugger::asyncTaskStartedForStack(void* task) { 914 void V8Debugger::asyncTaskStartedForStack(void* task) {
915 if (!m_maxAsyncCallStackDepth) return; 915 if (!m_maxAsyncCallStackDepth) return;
916 m_currentTasks.push_back(task);
917 auto parentIt = m_parentTask.find(task);
918 AsyncTaskToStackTrace::iterator stackIt = m_asyncTaskStacks.find(
919 parentIt == m_parentTask.end() ? task : parentIt->second);
920 // Needs to support following order of events: 916 // Needs to support following order of events:
921 // - asyncTaskScheduled 917 // - asyncTaskScheduled
922 // <-- attached here --> 918 // <-- attached here -->
923 // - asyncTaskStarted 919 // - asyncTaskStarted
924 // - asyncTaskCanceled <-- canceled before finished 920 // - asyncTaskCanceled <-- canceled before finished
925 // <-- async stack requested here --> 921 // <-- async stack requested here -->
926 // - asyncTaskFinished 922 // - asyncTaskFinished
927 std::weak_ptr<AsyncStackTrace> asyncParent; 923 m_currentTasks.push_back(task);
928 if (stackIt != m_asyncTaskStacks.end()) asyncParent = stackIt->second; 924 auto parentIt = m_parentTask.find(task);
925 AsyncTaskToStackTrace::iterator stackIt = m_asyncTaskStacks.find(
926 parentIt == m_parentTask.end() ? task : parentIt->second);
927 if (stackIt != m_asyncTaskStacks.end()) {
928 m_currentAsyncParent.push_back(stackIt->second.lock());
929 } else {
930 m_currentAsyncParent.emplace_back();
931 }
929 auto itCreation = m_asyncTaskCreationStacks.find(task); 932 auto itCreation = m_asyncTaskCreationStacks.find(task);
930 if (asyncParent.lock() && itCreation != m_asyncTaskCreationStacks.end()) { 933 if (itCreation != m_asyncTaskCreationStacks.end()) {
931 m_currentAsyncCreation.push_back(itCreation->second.lock()); 934 m_currentAsyncCreation.push_back(itCreation->second.lock());
932 } else { 935 } else {
933 m_currentAsyncCreation.emplace_back(); 936 m_currentAsyncCreation.emplace_back();
934 } 937 }
935 m_currentAsyncParent.push_back(asyncParent.lock());
936 } 938 }
937 939
938 void V8Debugger::asyncTaskFinishedForStack(void* task) { 940 void V8Debugger::asyncTaskFinishedForStack(void* task) {
939 if (!m_maxAsyncCallStackDepth) return; 941 if (!m_maxAsyncCallStackDepth) return;
940 // We could start instrumenting half way and the stack is empty. 942 // We could start instrumenting half way and the stack is empty.
941 if (!m_currentTasks.size()) return; 943 if (!m_currentTasks.size()) return;
942 DCHECK(m_currentTasks.back() == task); 944 DCHECK(m_currentTasks.back() == task);
943 m_currentTasks.pop_back(); 945 m_currentTasks.pop_back();
944 946
945 DCHECK(m_currentAsyncParent.size() == m_currentAsyncCreation.size()); 947 DCHECK(m_currentAsyncParent.size() == m_currentAsyncCreation.size());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 cleanupExpiredWeakPointers(m_asyncTaskCreationStacks); 1036 cleanupExpiredWeakPointers(m_asyncTaskCreationStacks);
1035 for (auto it = m_recurringTasks.begin(); it != m_recurringTasks.end();) { 1037 for (auto it = m_recurringTasks.begin(); it != m_recurringTasks.end();) {
1036 if (m_asyncTaskStacks.find(*it) == m_asyncTaskStacks.end()) { 1038 if (m_asyncTaskStacks.find(*it) == m_asyncTaskStacks.end()) {
1037 it = m_recurringTasks.erase(it); 1039 it = m_recurringTasks.erase(it);
1038 } else { 1040 } else {
1039 ++it; 1041 ++it;
1040 } 1042 }
1041 } 1043 }
1042 for (auto it = m_parentTask.begin(); it != m_parentTask.end();) { 1044 for (auto it = m_parentTask.begin(); it != m_parentTask.end();) {
1043 if (m_asyncTaskCreationStacks.find(it->second) == 1045 if (m_asyncTaskCreationStacks.find(it->second) ==
1044 m_asyncTaskCreationStacks.end()) { 1046 m_asyncTaskCreationStacks.end() &&
1047 m_asyncTaskStacks.find(it->second) == m_asyncTaskStacks.end()) {
1045 it = m_parentTask.erase(it); 1048 it = m_parentTask.erase(it);
1046 } else { 1049 } else {
1047 ++it; 1050 ++it;
1048 } 1051 }
1049 } 1052 }
1050 cleanupExpiredWeakPointers(m_framesCache); 1053 cleanupExpiredWeakPointers(m_framesCache);
1051 } 1054 }
1052 1055
1053 std::shared_ptr<StackFrame> V8Debugger::symbolize( 1056 std::shared_ptr<StackFrame> V8Debugger::symbolize(
1054 v8::Local<v8::StackFrame> v8Frame) { 1057 v8::Local<v8::StackFrame> v8Frame) {
(...skipping 24 matching lines...) Expand all
1079 fprintf(stdout, "Async stacks count: %d\n", m_asyncStacksCount); 1082 fprintf(stdout, "Async stacks count: %d\n", m_asyncStacksCount);
1080 fprintf(stdout, "Scheduled async tasks: %zu\n", m_asyncTaskStacks.size()); 1083 fprintf(stdout, "Scheduled async tasks: %zu\n", m_asyncTaskStacks.size());
1081 fprintf(stdout, "Created async tasks: %zu\n", 1084 fprintf(stdout, "Created async tasks: %zu\n",
1082 m_asyncTaskCreationStacks.size()); 1085 m_asyncTaskCreationStacks.size());
1083 fprintf(stdout, "Async tasks with parent: %zu\n", m_parentTask.size()); 1086 fprintf(stdout, "Async tasks with parent: %zu\n", m_parentTask.size());
1084 fprintf(stdout, "Recurring async tasks: %zu\n", m_recurringTasks.size()); 1087 fprintf(stdout, "Recurring async tasks: %zu\n", m_recurringTasks.size());
1085 fprintf(stdout, "\n"); 1088 fprintf(stdout, "\n");
1086 } 1089 }
1087 1090
1088 } // namespace v8_inspector 1091 } // namespace v8_inspector
OLDNEW
« no previous file with comments | « no previous file | src/inspector/v8-stack-trace-impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698