Index: Source/bindings/common/StackTrace.h |
diff --git a/Source/bindings/common/StackTrace.h b/Source/bindings/common/StackTrace.h |
index 758c35d3e127d6a14e74c8712d9972b5c802e1af..513edcaec662b2472d90ccd2886752920d404d40 100644 |
--- a/Source/bindings/common/StackTrace.h |
+++ b/Source/bindings/common/StackTrace.h |
@@ -39,54 +39,66 @@ namespace WebCore { |
class JSONValue; |
class ScriptState; |
class V8ScriptState; |
+class DartScriptState; |
class StackTrace { |
public: |
- explicit StackTrace() |
- { |
- m_isJavaScript = true; |
- m_dartStackTrace = 0; |
- } |
+ explicit StackTrace(); |
+ explicit StackTrace(const StackTrace& javaScriptStackTrace, const StackTrace& dartStackTrace); |
vsm
2014/08/29 08:42:08
Can you add a comment here clarifying whether this
Jacob
2014/09/05 23:35:56
Rolled back the change to the StackTrace class and
|
+ explicit StackTrace(const ScriptValue& stackTrace, V8ScriptState*); |
+ explicit StackTrace(Dart_StackTrace, DartScriptState*); |
- explicit StackTrace(const ScriptValue& stackTrace) |
+ bool hasJavaScript() const |
{ |
- m_isJavaScript = true; |
- m_scriptValue = stackTrace; |
- m_dartStackTrace = 0; |
+ return m_hasJavaScript; |
} |
- explicit StackTrace(Dart_StackTrace stackTrace) |
+ bool hasDart() const |
{ |
- m_isJavaScript = false; |
- m_dartStackTrace = stackTrace; |
- } |
- |
- bool isJavaScript() const |
- { |
- return m_isJavaScript; |
+ return m_hasDart; |
} |
ScriptValue asJavaScript() const |
{ |
- ASSERT(m_isJavaScript); |
+ ASSERT(m_hasJavaScript); |
return m_scriptValue; |
} |
Dart_StackTrace asDart() const |
{ |
- ASSERT(!m_isJavaScript); |
+ ASSERT(m_hasDart); |
return m_dartStackTrace; |
} |
bool isNull() const |
{ |
- return m_isJavaScript ? m_scriptValue.isEmpty() : !m_dartStackTrace; |
+ return !m_hasDart && !m_hasJavaScript; |
} |
+ bool isMixedLanguageStackTrace() const |
+ { |
+ return m_hasJavaScript && m_hasDart; |
+ } |
+ |
+ DartScriptState* dartScriptState() const |
+ { |
+ return m_dartScriptState; |
+ } |
+ |
+ V8ScriptState* v8ScriptState() const |
+ { |
+ return m_v8ScriptState; |
+ } |
+ |
+ void merge(const StackTrace& other); |
+ |
private: |
- bool m_isJavaScript; |
+ bool m_hasJavaScript; |
+ bool m_hasDart; |
ScriptValue m_scriptValue; |
Dart_StackTrace m_dartStackTrace; |
+ V8ScriptState* m_v8ScriptState; |
+ DartScriptState* m_dartScriptState; |
}; |
class ActivationFrame { |
@@ -111,6 +123,7 @@ public: |
} |
bool isJavaScript() const { return m_isJavaScript; } |
+ |
ScriptValue asJavaScript() const |
{ |
ASSERT(m_isJavaScript); |
@@ -129,6 +142,32 @@ private: |
Dart_ActivationFrame m_dartActivationFrame; |
}; |
+class StackTraceTimestamp { |
vsm
2014/08/29 08:42:08
Can you add a class or file level comment sketchin
Jacob
2014/09/05 23:35:55
Removed this class as it is obsolete if both VMs p
|
+public: |
+ StackTraceTimestamp(size_t stackDepth); |
+ |
+ int64_t timestamp() const { return m_timestamp; } |
+ size_t stackDepth() const { return m_stackDepth; } |
vsm
2014/08/29 08:42:08
Add comment: depth in frames or bytes?
Jacob
2014/09/05 23:35:55
removed this class with switch to new faster appro
|
+private: |
+ int64_t m_timestamp; |
+ size_t m_stackDepth; |
+}; |
+ |
+class StackTraceTimestampTracker { |
+public: |
+ void decrementRecursionLevel() { m_samples.removeLast(); } |
+ |
+ void incrementRecursionLevel(size_t stackDepth) |
+ { |
+ m_samples.append(StackTraceTimestamp(stackDepth)); |
+ } |
+ |
+ size_t recursionLevel() { return m_samples.size(); } |
+ int64_t getTimestamp(size_t frame); |
+private: |
+ Vector<StackTraceTimestamp> m_samples; |
+}; |
+ |
} // namespace WebCore |
#endif // StackTrace_h |