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

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

Issue 2879923003: [inspector] added targetCallFrames for continueToLocation (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 side-by-side diff with in-line comments
Download patch
Index: src/inspector/v8-stack-trace-impl.cc
diff --git a/src/inspector/v8-stack-trace-impl.cc b/src/inspector/v8-stack-trace-impl.cc
index a2a4ce1b6eb8dfae18cacff6a556b0a66754c9d3..58522536738a40782685aeb3c609a830f6bbe182 100644
--- a/src/inspector/v8-stack-trace-impl.cc
+++ b/src/inspector/v8-stack-trace-impl.cc
@@ -126,6 +126,15 @@ std::unique_ptr<protocol::Runtime::CallFrame> StackFrame::buildInspectorObject()
.build();
}
+bool StackFrame::isEqual(StackFrame* frame) const {
+ if (functionName() != frame->functionName()) return false;
+ if (scriptId() != frame->scriptId()) return false;
dgozman 2017/05/15 17:01:27 We always have scriptId, right? Then there is no n
kozy 2017/05/16 01:43:48 Done.
+ if (sourceURL() != frame->sourceURL()) return false;
+ if (lineNumber() != frame->lineNumber()) return false;
+ if (columnNumber() != frame->columnNumber()) return false;
+ return true;
+}
+
// static
void V8StackTraceImpl::setCaptureStackTraceForUncaughtExceptions(
v8::Isolate* isolate, bool capture) {
@@ -241,6 +250,51 @@ std::unique_ptr<StringBuffer> V8StackTraceImpl::toString() const {
return StringBufferImpl::adopt(string);
}
+bool V8StackTraceImpl::isEqualIgnoringTopFrame(
+ V8StackTraceImpl* stackTrace) const {
+ StackFrameIterator current(this);
+ StackFrameIterator target(stackTrace);
+
+ current.next();
+ target.next();
+ while (!current.done() && !target.done()) {
+ if (!current.frame()->isEqual(target.frame())) {
+ return false;
+ }
+ current.next();
+ target.next();
+ }
+ return current.done() == target.done();
+}
+
+V8StackTraceImpl::StackFrameIterator::StackFrameIterator(
+ const V8StackTraceImpl* stackTrace)
+ : m_currentIt(stackTrace->m_frames.begin()),
+ m_currentEnd(stackTrace->m_frames.end()),
dgozman 2017/05/15 17:01:27 If top stack is empty, iterator will be immediatel
kozy 2017/05/16 01:43:48 currently it could not happen, removed DCHECK.
+ m_parent(stackTrace->m_asyncParent.lock().get()) {
+ DCHECK(m_currentIt != m_currentEnd);
+}
+
+void V8StackTraceImpl::StackFrameIterator::next() {
+ if (m_currentIt == m_currentEnd) return;
+ ++m_currentIt;
+ while (m_currentIt == m_currentEnd && m_parent) {
+ const std::vector<std::shared_ptr<StackFrame>>& frames = m_parent->frames();
+ m_currentIt = frames.begin();
+ if (m_parent->description() == "async function") ++m_currentIt;
+ m_currentEnd = frames.end();
+ m_parent = m_parent->parent().lock().get();
+ }
+}
+
+bool V8StackTraceImpl::StackFrameIterator::done() {
+ return m_currentIt == m_currentEnd;
+}
+
+StackFrame* V8StackTraceImpl::StackFrameIterator::frame() {
+ return m_currentIt != m_currentEnd ? m_currentIt->get() : nullptr;
dgozman 2017/05/15 17:01:27 Just m_currentIt->get(), since nobody should acces
kozy 2017/05/16 01:43:48 Done.
+}
+
// static
std::shared_ptr<AsyncStackTrace> AsyncStackTrace::capture(
V8Debugger* debugger, int contextGroupId, const String16& description,

Powered by Google App Engine
This is Rietveld 408576698