Chromium Code Reviews| 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 |