Index: Source/bindings/common/StackTrace.h |
diff --git a/Source/bindings/common/StackTrace.h b/Source/bindings/common/StackTrace.h |
index 758c35d3e127d6a14e74c8712d9972b5c802e1af..b293f38ba9b459234ee6b797a48bad874d0b7a2c 100644 |
--- a/Source/bindings/common/StackTrace.h |
+++ b/Source/bindings/common/StackTrace.h |
@@ -39,54 +39,64 @@ namespace WebCore { |
class JSONValue; |
class ScriptState; |
class V8ScriptState; |
+class DartScriptState; |
class StackTrace { |
vsm
2014/08/13 14:26:45
Can this be pushed to multivm?
Jacob
2014/08/13 21:36:15
This one is ugly to push to multi-vm because it re
|
public: |
- explicit StackTrace() |
- { |
- m_isJavaScript = true; |
- m_dartStackTrace = 0; |
- } |
+ explicit StackTrace(); |
+ explicit StackTrace(const StackTrace& javaScriptStackTrace, const StackTrace& dartStackTrace); |
+ 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; |
vsm
2014/08/13 14:26:45
If m_hasJavaScript, should you check m_scriptValue
Jacob
2014/08/13 21:36:15
No need to now that we have hasJavaScript and hasD
|
+ } |
+ |
+ bool isMixedLanguageStackTrace() const |
+ { |
+ return m_hasJavaScript && m_hasDart; |
+ } |
+ |
+ DartScriptState* dartScriptState() const |
+ { |
+ return m_dartScriptState; |
+ } |
+ |
+ V8ScriptState* v8ScriptState() const |
+ { |
+ return m_v8ScriptState; |
} |
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 +121,7 @@ public: |
} |
bool isJavaScript() const { return m_isJavaScript; } |
+ |
ScriptValue asJavaScript() const |
{ |
ASSERT(m_isJavaScript); |
@@ -129,6 +140,32 @@ private: |
Dart_ActivationFrame m_dartActivationFrame; |
}; |
+class StackTraceTimestamp { |
+public: |
+ StackTraceTimestamp(size_t stackDepth); |
+ |
+ int64_t timestamp() const { return m_timestamp; } |
+ size_t stackDepth() const { return m_stackDepth; } |
vsm
2014/08/13 14:26:45
What is stackDepth supposed to be? The number of
Jacob
2014/08/13 21:36:15
number of frames. perhaps size_t is confusing. I
|
+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 |