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

Unified Diff: Source/bindings/common/StackTrace.h

Issue 466243002: Support merged Dart-JS callstacks (Closed) Base URL: svn://svn.chromium.org/blink/branches/dart/dartium
Patch Set: Created 6 years, 4 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
« no previous file with comments | « no previous file | Source/bindings/common/StackTrace.cpp » ('j') | Source/bindings/common/StackTrace.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | Source/bindings/common/StackTrace.cpp » ('j') | Source/bindings/common/StackTrace.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698