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

Unified Diff: Source/bindings/dart/DartUtilities.cpp

Issue 55433007: Dartium: do not call back into Dart code to parse or generate a stack trace. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: fix empty condition Created 7 years, 1 month 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/dart/DartUtilities.cpp
diff --git a/Source/bindings/dart/DartUtilities.cpp b/Source/bindings/dart/DartUtilities.cpp
index 49f7d85db026762588af6b95cd6523d86c252c63..e8498c2294b295a1a94fea5416629efa468ae259 100644
--- a/Source/bindings/dart/DartUtilities.cpp
+++ b/Source/bindings/dart/DartUtilities.cpp
@@ -953,65 +953,56 @@ PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg
return ScriptArguments::create(DartUtilities::currentScriptState(), arguments);
}
-static PassRefPtr<ScriptCallStack> createScriptCallStackFromParsedStackTrace(Dart_Handle parsedStackTrace, Dart_Handle exception)
+static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_ExceptionStackTrace stackTrace)
{
- Vector<Dart_Handle> callFrames;
- DartUtilities::extractListElements(parsedStackTrace, exception, callFrames);
- if (exception)
+ intptr_t frameCount = 0;
+ Dart_Handle result = Dart_StacktraceLength(stackTrace, &frameCount);
+ if (Dart_IsError(result))
return 0;
siva 2013/11/08 18:17:17 Why do we need this API function at all why not ju
rmacnak 2013/11/12 00:05:43 As discussed, now sharing with the debugging API's
- size_t frameCount = callFrames.size();
if (frameCount > ScriptCallStack::maxCallStackSizeToCapture)
frameCount = ScriptCallStack::maxCallStackSizeToCapture;
Vector<ScriptCallFrame> scriptCallStackFrames;
- for (size_t i = 0; i < frameCount; i++) {
- Dart_Handle callFrame = callFrames[i];
- Vector<Dart_Handle> fields;
- DartUtilities::extractListElements(callFrame, exception, fields);
- if (exception)
+ for (intptr_t frameIndex = 0; frameIndex < frameCount; frameIndex++) {
+ Dart_Handle dartFunctionName;
+ Dart_Handle dartScriptUrl;
+ intptr_t lineNumber = 0;
+ intptr_t columnNumber = 0;
+ result = Dart_StacktraceFrameInfo(stackTrace, frameIndex, &dartFunctionName, &dartScriptUrl, &lineNumber, &columnNumber);
+ if (Dart_IsError(result))
return 0;
- ASSERT(fields.size() == 4);
- String functionName = DartUtilities::toString(fields[0]);
- String sourceName = DartUtilities::toString(fields[1]);
- int lineNumber = DartUtilities::toInteger(fields[2], exception);
- if (exception)
+
+ const char* cstr = 0;
+ result = Dart_StringToCString(dartFunctionName, &cstr);
+ if (Dart_IsError(result))
return 0;
- int columnNumber = DartUtilities::toInteger(fields[3], exception);
- if (exception)
+ String functionName(cstr);
vsm 2013/11/07 22:51:50 There's a DartUtilities method to go from Dart_Han
rmacnak 2013/11/12 00:05:43 D'oh!
+ result = Dart_StringToCString(dartScriptUrl, &cstr);
+ if (Dart_IsError(result))
return 0;
- scriptCallStackFrames.append(ScriptCallFrame(functionName, "undefined", sourceName, lineNumber, columnNumber));
+ String scriptUrl(cstr);
+
+ // FIXME
+ const char* scriptName = "undefined";
+ // FIXME
vsm 2013/11/07 22:51:50 Can you add some text to these fixmes? Not clear
rmacnak 2013/11/12 00:05:43 See the comments in earlier patch sets. Also added
+ if (columnNumber != -1)
vsm 2013/11/07 22:51:50 Under what circumstance is this true? If this che
+ scriptCallStackFrames.append(ScriptCallFrame(functionName, scriptName, scriptUrl, lineNumber, columnNumber));
}
- if (!frameCount)
+ if (scriptCallStackFrames.isEmpty())
scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", "undefined", 0, 0));
return ScriptCallStack::create(scriptCallStackFrames);
}
-static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Handle stackTrace, Dart_Handle& exception)
-{
- Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("parseStackTrace", 1, &stackTrace);
- if (!DartUtilities::checkResult(parsedStackTrace, exception))
- return 0;
-
- return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception);
-}
-
PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack()
{
- Dart_ExceptionPauseInfo previousPauseInfo = Dart_GetExceptionPauseInfo();
- if (previousPauseInfo != kNoPauseOnExceptions)
- Dart_SetExceptionPauseInfo(kNoPauseOnExceptions);
- Dart_Handle exception = 0;
- Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("captureParsedStackTrace", 0, 0);
-
- if (previousPauseInfo != kNoPauseOnExceptions)
- Dart_SetExceptionPauseInfo(previousPauseInfo);
-
- if (!DartUtilities::checkResult(parsedStackTrace, exception))
- return 0;
-
- return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception);
+ Dart_ExceptionStackTrace trace = 0;
+ Dart_Handle result = Dart_CurrentStacktrace(&trace);
+ ASSERT(!Dart_IsError(result));
+ ASSERT(!Dart_IsNull(result));
+ ASSERT(trace);
+ return createScriptCallStackFromStackTrace(trace);
}
Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart_Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback)
@@ -1136,12 +1127,10 @@ void DartUtilities::reportProblem(ScriptExecutionContext* context, Dart_Handle r
errorMessage = String("Exception: ") + DartUtilities::toString(exception);
// Print the stack trace.
- Dart_Handle stacktrace = Dart_ErrorGetStacktrace(result);
- ASSERT(!Dart_IsError(stacktrace));
- Dart_Handle stackTraceConversionException = 0;
- callStack = createScriptCallStackFromStackTrace(stacktrace, stackTraceConversionException);
- if (stackTraceConversionException)
- errorMessage.append(String("\nError converting stack trace to a string: ") + DartUtilities::toString(stackTraceConversionException));
+ Dart_ExceptionStackTrace stacktrace;
+ Dart_Handle traceResult = Dart_ErrorGetStacktrace(result, &stacktrace);
+ ASSERT(!Dart_IsError(traceResult));
+ callStack = createScriptCallStackFromStackTrace(stacktrace);
}
if (context && context->isDocument()) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698