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

Side by Side Diff: src/inspector/v8-stack-trace-impl.cc

Issue 2844753002: [inspector] better stacks for promises (Closed)
Patch Set: 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
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-stack-trace-impl.h" 5 #include "src/inspector/v8-stack-trace-impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "src/inspector/v8-debugger.h" 9 #include "src/inspector/v8-debugger.h"
10 #include "src/inspector/wasm-translation.h" 10 #include "src/inspector/wasm-translation.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // stack, so ensure that second stack is non-empty (it's the top of appended 56 // stack, so ensure that second stack is non-empty (it's the top of appended
57 // chain). 57 // chain).
58 if (*asyncParent && !(*asyncCreation) && !(*asyncParent)->creation().lock() && 58 if (*asyncParent && !(*asyncCreation) && !(*asyncParent)->creation().lock() &&
59 (*asyncParent)->isEmpty()) { 59 (*asyncParent)->isEmpty()) {
60 *asyncParent = (*asyncParent)->parent().lock(); 60 *asyncParent = (*asyncParent)->parent().lock();
61 } 61 }
62 } 62 }
63 63
64 std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectCommon( 64 std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectCommon(
65 const std::vector<std::shared_ptr<StackFrame>>& frames, 65 const std::vector<std::shared_ptr<StackFrame>>& frames,
66 const String16& description,
66 const std::shared_ptr<AsyncStackTrace>& asyncParent, 67 const std::shared_ptr<AsyncStackTrace>& asyncParent,
67 const std::shared_ptr<AsyncStackTrace>& asyncCreation, int maxAsyncDepth) { 68 const std::shared_ptr<AsyncStackTrace>& asyncCreation, int maxAsyncDepth) {
68 std::unique_ptr<protocol::Array<protocol::Runtime::CallFrame>> 69 std::unique_ptr<protocol::Array<protocol::Runtime::CallFrame>>
69 inspectorFrames = protocol::Array<protocol::Runtime::CallFrame>::create(); 70 inspectorFrames = protocol::Array<protocol::Runtime::CallFrame>::create();
70 for (size_t i = 0; i < frames.size(); i++) { 71 for (size_t i = 0; i < frames.size(); i++) {
71 inspectorFrames->addItem(frames[i]->buildInspectorObject()); 72 inspectorFrames->addItem(frames[i]->buildInspectorObject());
72 } 73 }
73 std::unique_ptr<protocol::Runtime::StackTrace> stackTrace = 74 std::unique_ptr<protocol::Runtime::StackTrace> stackTrace =
74 protocol::Runtime::StackTrace::create() 75 protocol::Runtime::StackTrace::create()
75 .setCallFrames(std::move(inspectorFrames)) 76 .setCallFrames(std::move(inspectorFrames))
76 .build(); 77 .build();
77 if (asyncParent && maxAsyncDepth > 0) { 78 if (!description.isEmpty()) stackTrace->setDescription(description);
79 if (asyncParent && maxAsyncDepth > 0 &&
80 (asyncParent->description() != description || !asyncParent->isEmpty() ||
dgozman 2017/04/27 22:37:22 We should not return here, but just skip the paren
kozy 2017/04/28 16:13:30 Done.
81 asyncCreation.get())) {
78 stackTrace->setParent(asyncParent->buildInspectorObject(asyncCreation.get(), 82 stackTrace->setParent(asyncParent->buildInspectorObject(asyncCreation.get(),
79 maxAsyncDepth - 1)); 83 maxAsyncDepth - 1));
80 } 84 }
81 return stackTrace; 85 return stackTrace;
82 } 86 }
83 87
84 } // namespace 88 } // namespace
85 89
86 StackFrame::StackFrame(v8::Local<v8::StackFrame> v8Frame) 90 StackFrame::StackFrame(v8::Local<v8::StackFrame> v8Frame)
87 : m_functionName(toProtocolString(v8Frame->GetFunctionName())), 91 : m_functionName(toProtocolString(v8Frame->GetFunctionName())),
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 StringView V8StackTraceImpl::topScriptId() const { 203 StringView V8StackTraceImpl::topScriptId() const {
200 return toStringView(m_frames[0]->scriptId()); 204 return toStringView(m_frames[0]->scriptId());
201 } 205 }
202 206
203 StringView V8StackTraceImpl::topFunctionName() const { 207 StringView V8StackTraceImpl::topFunctionName() const {
204 return toStringView(m_frames[0]->functionName()); 208 return toStringView(m_frames[0]->functionName());
205 } 209 }
206 210
207 std::unique_ptr<protocol::Runtime::StackTrace> 211 std::unique_ptr<protocol::Runtime::StackTrace>
208 V8StackTraceImpl::buildInspectorObjectImpl() const { 212 V8StackTraceImpl::buildInspectorObjectImpl() const {
209 return buildInspectorObjectCommon(m_frames, m_asyncParent.lock(), 213 return buildInspectorObjectCommon(m_frames, String16(), m_asyncParent.lock(),
210 m_asyncCreation.lock(), m_maxAsyncDepth); 214 m_asyncCreation.lock(), m_maxAsyncDepth);
211 } 215 }
212 216
213 std::unique_ptr<protocol::Runtime::API::StackTrace> 217 std::unique_ptr<protocol::Runtime::API::StackTrace>
214 V8StackTraceImpl::buildInspectorObject() const { 218 V8StackTraceImpl::buildInspectorObject() const {
215 return buildInspectorObjectImpl(); 219 return buildInspectorObjectImpl();
216 } 220 }
217 221
218 std::unique_ptr<StringBuffer> V8StackTraceImpl::toString() const { 222 std::unique_ptr<StringBuffer> V8StackTraceImpl::toString() const {
219 String16Builder stackTrace; 223 String16Builder stackTrace;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 m_frames(std::move(frames)), 289 m_frames(std::move(frames)),
286 m_asyncParent(asyncParent), 290 m_asyncParent(asyncParent),
287 m_asyncCreation(asyncCreation) { 291 m_asyncCreation(asyncCreation) {
288 DCHECK(m_contextGroupId); 292 DCHECK(m_contextGroupId);
289 } 293 }
290 294
291 std::unique_ptr<protocol::Runtime::StackTrace> 295 std::unique_ptr<protocol::Runtime::StackTrace>
292 AsyncStackTrace::buildInspectorObject(AsyncStackTrace* asyncCreation, 296 AsyncStackTrace::buildInspectorObject(AsyncStackTrace* asyncCreation,
293 int maxAsyncDepth) const { 297 int maxAsyncDepth) const {
294 std::unique_ptr<protocol::Runtime::StackTrace> stackTrace = 298 std::unique_ptr<protocol::Runtime::StackTrace> stackTrace =
295 buildInspectorObjectCommon(m_frames, m_asyncParent.lock(), 299 buildInspectorObjectCommon(m_frames, m_description, m_asyncParent.lock(),
296 m_asyncCreation.lock(), maxAsyncDepth); 300 m_asyncCreation.lock(), maxAsyncDepth);
297 if (!m_description.isEmpty()) stackTrace->setDescription(m_description);
298 if (asyncCreation && !asyncCreation->isEmpty()) { 301 if (asyncCreation && !asyncCreation->isEmpty()) {
299 stackTrace->setPromiseCreationFrame( 302 stackTrace->setPromiseCreationFrame(
300 asyncCreation->m_frames[0]->buildInspectorObject()); 303 asyncCreation->m_frames[0]->buildInspectorObject());
301 } 304 }
302 return stackTrace; 305 return stackTrace;
303 } 306 }
304 307
305 int AsyncStackTrace::contextGroupId() const { return m_contextGroupId; } 308 int AsyncStackTrace::contextGroupId() const { return m_contextGroupId; }
306 309
310 const String16& AsyncStackTrace::description() const { return m_description; }
311
307 std::weak_ptr<AsyncStackTrace> AsyncStackTrace::parent() const { 312 std::weak_ptr<AsyncStackTrace> AsyncStackTrace::parent() const {
308 return m_asyncParent; 313 return m_asyncParent;
309 } 314 }
310 315
311 std::weak_ptr<AsyncStackTrace> AsyncStackTrace::creation() const { 316 std::weak_ptr<AsyncStackTrace> AsyncStackTrace::creation() const {
312 return m_asyncCreation; 317 return m_asyncCreation;
313 } 318 }
314 319
315 bool AsyncStackTrace::isEmpty() const { return m_frames.empty(); } 320 bool AsyncStackTrace::isEmpty() const { return m_frames.empty(); }
316 321
317 } // namespace v8_inspector 322 } // namespace v8_inspector
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698