Index: src/inspector/v8-stack-trace-impl.h |
diff --git a/src/inspector/v8-stack-trace-impl.h b/src/inspector/v8-stack-trace-impl.h |
index 4721fcf9bf4a7df2904bb128207587b27a7d744d..38722ea2f11324efa71b7bc6b9fe55a3239aced6 100644 |
--- a/src/inspector/v8-stack-trace-impl.h |
+++ b/src/inspector/v8-stack-trace-impl.h |
@@ -5,93 +5,115 @@ |
#ifndef V8_INSPECTOR_V8STACKTRACEIMPL_H_ |
#define V8_INSPECTOR_V8STACKTRACEIMPL_H_ |
+#include <memory> |
#include <vector> |
+#include "include/v8-inspector.h" |
+#include "include/v8.h" |
#include "src/base/macros.h" |
-#include "src/inspector/protocol/Forward.h" |
#include "src/inspector/protocol/Runtime.h" |
- |
-#include "include/v8-inspector.h" |
+#include "src/inspector/string-16.h" |
namespace v8_inspector { |
+class AsyncStackTrace; |
class V8Debugger; |
+class WasmTranslation; |
-// Note: async stack trace may have empty top stack with non-empty tail to |
-// indicate that current native-only state had some async story. |
-// On the other hand, any non-top async stack is guaranteed to be non-empty. |
-class V8StackTraceImpl final : public V8StackTrace { |
+class V8StackTraceImpl : public V8StackTrace { |
public: |
- static const size_t maxCallStackSizeToCapture = 200; |
- |
- class Frame { |
- public: |
- Frame(const String16& functionName, const String16& scriptId, |
- const String16& scriptName, int lineNumber, int column = 0); |
- ~Frame() = default; |
- |
- const String16& functionName() const { return m_functionName; } |
- const String16& scriptId() const { return m_scriptId; } |
- const String16& sourceURL() const { return m_scriptName; } |
- int lineNumber() const { return m_lineNumber; } |
- int columnNumber() const { return m_columnNumber; } |
- |
- private: |
- friend class V8StackTraceImpl; |
- std::unique_ptr<protocol::Runtime::CallFrame> buildInspectorObject() const; |
- |
- String16 m_functionName; |
- String16 m_scriptId; |
- String16 m_scriptName; |
- int m_lineNumber; |
- int m_columnNumber; |
- }; |
- |
static void setCaptureStackTraceForUncaughtExceptions(v8::Isolate*, |
bool capture); |
- static std::unique_ptr<V8StackTraceImpl> create( |
- V8Debugger*, int contextGroupId, v8::Local<v8::StackTrace>, |
- size_t maxStackSize, const String16& description = String16()); |
- static std::unique_ptr<V8StackTraceImpl> capture( |
- V8Debugger*, int contextGroupId, size_t maxStackSize, |
- const String16& description = String16()); |
- |
- // This method drops the async chain. Use cloneImpl() instead. |
- std::unique_ptr<V8StackTrace> clone() override; |
- std::unique_ptr<V8StackTraceImpl> cloneImpl(); |
- static std::unique_ptr<protocol::Runtime::StackTrace> |
- buildInspectorObjectForTail(V8Debugger*); |
+ static const int maxCallStackSizeToCapture = 200; |
+ static std::unique_ptr<V8StackTraceImpl> create(V8Debugger*, |
+ int contextGroupId, |
+ v8::Local<v8::StackTrace>, |
+ int maxStackSize); |
+ static std::unique_ptr<V8StackTraceImpl> capture(V8Debugger*, |
+ int contextGroupId, |
+ int maxStackSize); |
+ |
+ ~V8StackTraceImpl() override; |
std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectImpl() |
const; |
- ~V8StackTraceImpl() override; |
// V8StackTrace implementation. |
- bool isEmpty() const override { return !m_frames.size(); }; |
+ // This method drops the async stack trace. |
+ std::unique_ptr<V8StackTrace> clone() override; |
+ bool isEmpty() const override; |
StringView topSourceURL() const override; |
- int topLineNumber() const override; |
- int topColumnNumber() const override; |
+ int topLineNumber() const override; // 1-based. |
+ int topColumnNumber() const override; // 1-based. |
StringView topScriptId() const override; |
StringView topFunctionName() const override; |
std::unique_ptr<protocol::Runtime::API::StackTrace> buildInspectorObject() |
const override; |
std::unique_ptr<StringBuffer> toString() const override; |
+ class Frame { |
+ public: |
+ explicit Frame(v8::Local<v8::StackFrame> frame); |
+ ~Frame() = default; |
+ |
+ void translate(WasmTranslation* wasmTranslation); |
+ |
+ const String16& functionName() const; |
+ const String16& scriptId() const; |
+ const String16& sourceURL() const; |
+ int lineNumber() const; // 0-based. |
+ int columnNumber() const; // 0-based. |
+ std::unique_ptr<protocol::Runtime::CallFrame> buildInspectorObject() const; |
+ |
+ private: |
+ String16 m_functionName; |
+ String16 m_scriptId; |
+ String16 m_sourceURL; |
+ int m_lineNumber; // 0-based. |
+ int m_columnNumber; // 0-based. |
+ }; |
+ |
private: |
- V8StackTraceImpl(int contextGroupId, const String16& description, |
- std::vector<Frame>& frames, |
- std::unique_ptr<V8StackTraceImpl> parent, |
- std::unique_ptr<V8StackTraceImpl> creation); |
+ V8StackTraceImpl(const std::vector<Frame> frames, int maxAsyncDepth, |
+ std::shared_ptr<AsyncStackTrace> asyncParent, |
+ std::shared_ptr<AsyncStackTrace> asyncCreation); |
- std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObjectImpl( |
- V8StackTraceImpl* creation) const; |
+ std::vector<Frame> m_frames; |
+ int m_maxAsyncDepth; |
+ std::weak_ptr<AsyncStackTrace> m_asyncParent; |
+ std::weak_ptr<AsyncStackTrace> m_asyncCreation; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(V8StackTraceImpl); |
+}; |
+ |
+class AsyncStackTrace { |
+ public: |
+ static std::shared_ptr<AsyncStackTrace> capture(V8Debugger*, |
+ int contextGroupId, |
+ const String16& description, |
+ int maxStackSize); |
+ |
+ std::unique_ptr<protocol::Runtime::StackTrace> buildInspectorObject( |
+ AsyncStackTrace* asyncCreation, int maxAsyncDepth) const; |
+ |
+ int contextGroupId() const; |
+ std::weak_ptr<AsyncStackTrace> parent() const; |
+ std::weak_ptr<AsyncStackTrace> creation() const; |
+ bool isEmpty() const; |
+ |
+ private: |
+ AsyncStackTrace(int contextGroupId, const String16& description, |
+ const std::vector<V8StackTraceImpl::Frame>& frames, |
+ std::shared_ptr<AsyncStackTrace> asyncParent, |
+ std::shared_ptr<AsyncStackTrace> asyncCreation); |
int m_contextGroupId; |
String16 m_description; |
- std::vector<Frame> m_frames; |
- std::unique_ptr<V8StackTraceImpl> m_parent; |
- std::unique_ptr<V8StackTraceImpl> m_creation; |
- DISALLOW_COPY_AND_ASSIGN(V8StackTraceImpl); |
+ std::vector<V8StackTraceImpl::Frame> m_frames; |
+ std::weak_ptr<AsyncStackTrace> m_asyncParent; |
+ std::weak_ptr<AsyncStackTrace> m_asyncCreation; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AsyncStackTrace); |
}; |
} // namespace v8_inspector |