| Index: Source/bindings/dart/DartUtilities.cpp
|
| diff --git a/Source/bindings/dart/DartUtilities.cpp b/Source/bindings/dart/DartUtilities.cpp
|
| index 25a3b2e7c28680a5fd7475307edcdea1a7352d15..3cacfc7d6c683c235282318650ef53962a4fcfcc 100644
|
| --- a/Source/bindings/dart/DartUtilities.cpp
|
| +++ b/Source/bindings/dart/DartUtilities.cpp
|
| @@ -56,6 +56,7 @@
|
| #include "core/frame/LocalDOMWindow.h"
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/html/canvas/DataView.h"
|
| +#include "core/inspector/InspectorInstrumentation.h"
|
| #include "core/inspector/ScriptArguments.h"
|
| #include "core/inspector/ScriptCallStack.h"
|
| #include "core/loader/FrameLoader.h"
|
| @@ -85,10 +86,9 @@ V8Scope::V8Scope(DartDOMData* dartDOMData, v8::Handle<v8::Context> context)
|
| , m_dartDOMData(dartDOMData)
|
| , m_handleScope(m_v8Isolate)
|
| , m_contextScope(context)
|
| - , m_recursionScope(m_v8Isolate, DartUtilities::scriptExecutionContext())
|
| + , m_recursionScope(m_v8Isolate, DartUtilities::scriptExecutionContext(), false)
|
| {
|
| - if (m_dartDOMData)
|
| - (*m_dartDOMData->recursion())++;
|
| + incrementRecursionLevel();
|
| }
|
|
|
| V8Scope::V8Scope(DartDOMData* dartDOMData)
|
| @@ -96,16 +96,24 @@ V8Scope::V8Scope(DartDOMData* dartDOMData)
|
| , m_dartDOMData(dartDOMData)
|
| , m_handleScope(m_v8Isolate)
|
| , m_contextScope(DartUtilities::currentV8Context())
|
| - , m_recursionScope(m_v8Isolate, DartUtilities::scriptExecutionContext())
|
| + , m_recursionScope(m_v8Isolate, DartUtilities::scriptExecutionContext(), false)
|
| {
|
| - if (m_dartDOMData)
|
| - (*m_dartDOMData->recursion())++;
|
| + incrementRecursionLevel();
|
| }
|
|
|
| V8Scope::~V8Scope()
|
| {
|
| if (m_dartDOMData)
|
| - (*m_dartDOMData->recursion())--;
|
| + m_dartDOMData->stackTraceTimestampTracker()->decrementRecursionLevel();
|
| +}
|
| +
|
| +void V8Scope::incrementRecursionLevel()
|
| +{
|
| + if (!m_dartDOMData)
|
| + return;
|
| + StackTraceTimestampTracker* tracker = m_dartDOMData->stackTraceTimestampTracker();
|
| + tracker->incrementRecursionLevel(InspectorInstrumentation::hasFrontends() && tracker->recursionLevel() > 0 ?
|
| + DartUtilities::currentStackDepth() : 0);
|
| }
|
|
|
| DartStringPeer* DartStringPeer::emptyString()
|
| @@ -1071,6 +1079,18 @@ ScriptCallFrame DartUtilities::toScriptCallFrame(Dart_ActivationFrame frame, Dar
|
| return ScriptCallFrame(DartUtilities::toString(functionName), "undefined", DartUtilities::toString(scriptUrl), lineNumber, columnNumber);
|
| }
|
|
|
| +size_t DartUtilities::currentStackDepth()
|
| +{
|
| + intptr_t stackDepth = 0;
|
| + Dart_StackTrace trace = 0;
|
| + Dart_Handle ALLOW_UNUSED result = Dart_GetStackTrace(&trace);
|
| + ASSERT(!Dart_IsError(result));
|
| + ASSERT(!Dart_IsNull(result));
|
| + result = Dart_StackTraceLength(trace, &stackDepth);
|
| + ASSERT(!Dart_IsError(result));
|
| + return stackDepth;
|
| +}
|
| +
|
| PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack()
|
| {
|
| Dart_StackTrace trace = 0;
|
|
|