Changeset 73366 in webkit
- Timestamp:
- Dec 6, 2010 7:40:17 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r73363 r73366 1 2010-12-06 Yury Semikhatsky <yurys@chromium.org> 2 3 Reviewed by Pavel Feldman. 4 5 [v8] Web Inspector: remove duplicate code for capturing stack trace 6 https://bugs.webkit.org/show_bug.cgi?id=50461 7 8 No new tests. Covered with existing inspector tests. 9 10 * bindings/js/ScriptCallStackFactory.cpp: 11 (WebCore::createScriptCallStack): 12 * bindings/js/ScriptCallStackFactory.h: 13 * bindings/v8/ScriptCallStackFactory.cpp: 14 (WebCore::toScriptCallFrame): 15 (WebCore::toScriptCallFramesVector): 16 (WebCore::createScriptCallStack): 17 * bindings/v8/ScriptCallStackFactory.h: 18 * bindings/v8/V8ConsoleMessage.cpp: 19 (WebCore::V8ConsoleMessage::handler): 20 * inspector/ScriptCallFrame.cpp: 21 (WebCore::ScriptCallFrame::ScriptCallFrame): 22 (WebCore::ScriptCallFrame::isEqual): 23 (WebCore::ScriptCallFrame::buildInspectorObject): 24 * inspector/ScriptCallFrame.h: 25 (WebCore::ScriptCallFrame::sourceURL): 26 * inspector/ScriptCallStack.h: 27 * inspector/TimelineRecordFactory.cpp: 28 (WebCore::TimelineRecordFactory::createGenericRecord): 29 * inspector/front-end/ConsoleView.js: 30 (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement): 31 1 32 == Rolled over to ChangeLog-2010-12-06 == -
trunk/WebCore/bindings/js/ScriptCallStackFactory.cpp
r73355 r73366 49 49 namespace WebCore { 50 50 51 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t, bool) 52 { 53 return 0; 54 } 55 51 56 PassRefPtr<ScriptCallStack> createScriptCallStack(JSC::ExecState* exec, size_t maxStackSize) 52 57 { … … 88 93 } 89 94 90 bool ScriptCallStack::stackTrace(int, const RefPtr<InspectorArray>&)91 {92 return false;93 }94 95 95 } // namespace WebCore -
trunk/WebCore/bindings/js/ScriptCallStackFactory.h
r73355 r73366 43 43 class ScriptCallStack; 44 44 45 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize, bool emptyStackIsAllowed); 45 46 PassRefPtr<ScriptCallStack> createScriptCallStack(JSC::ExecState*, size_t maxStackSize); 46 47 PassRefPtr<ScriptArguments> createScriptArguments(JSC::ExecState*, unsigned skipArgumentCount); -
trunk/WebCore/bindings/v8/ScriptCallStackFactory.cpp
r73355 r73366 57 57 58 58 int sourceLineNumber = frame->GetLineNumber(); 59 return ScriptCallFrame(functionName, sourceName, sourceLineNumber); 59 int sourceColumn = frame->GetColumn(); 60 return ScriptCallFrame(functionName, sourceName, sourceLineNumber, sourceColumn); 60 61 } 61 62 62 static void toScriptCallFramesVector(v8:: Local<v8::Context> context, v8::Handle<v8::StackTrace> stackTrace, Vector<ScriptCallFrame>& scriptCallFrames, size_t maxStackSize)63 static void toScriptCallFramesVector(v8::Handle<v8::StackTrace> stackTrace, Vector<ScriptCallFrame>& scriptCallFrames, size_t maxStackSize, bool emptyStackIsAllowed) 63 64 { 64 // TODO(yurys): remove this??? 65 v8::Context::Scope contextScope(context); 65 ASSERT(v8::Context::InContext()); 66 66 int frameCount = stackTrace->GetFrameCount(); 67 67 if (frameCount > static_cast<int>(maxStackSize)) … … 71 71 scriptCallFrames.append(toScriptCallFrame(stackFrame)); 72 72 } 73 74 if (!frameCount) {75 // Successfully grabbed stack trace, but there are no frames. It may happen in case of a syntax errorfor example.73 if (!frameCount && !emptyStackIsAllowed) { 74 // Successfully grabbed stack trace, but there are no frames. It may happen in case 75 // when a bound function is called from native code for example. 76 76 // Fallback to setting lineNumber to 0, and source and function name to "undefined". 77 77 scriptCallFrames.append(ScriptCallFrame("undefined", "undefined", 0)); … … 79 79 } 80 80 81 PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Local<v8::Context> context, v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize)81 static PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize, bool emptyStackIsAllowed) 82 82 { 83 ASSERT(v8::Context::InContext()); 83 84 v8::HandleScope scope; 84 v8::Context::Scope contextScope(context);85 86 85 Vector<ScriptCallFrame> scriptCallFrames; 87 toScriptCallFramesVector( context, stackTrace, scriptCallFrames, maxStackSize);86 toScriptCallFramesVector(stackTrace, scriptCallFrames, maxStackSize, emptyStackIsAllowed); 88 87 return ScriptCallStack::create(scriptCallFrames); 89 88 } 90 89 91 PassRefPtr<ScriptCallStack> createScriptCallStack( size_t maxStackSize)90 PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize) 92 91 { 93 v8::HandleScope scope; 94 v8::Local<v8::Context> context = v8::Context::GetCurrent(); 95 // TODO(yurys): remove? 96 v8::Context::Scope contextScope(context); 92 return createScriptCallStack(stackTrace, maxStackSize, true); 93 } 94 95 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize, bool emptyStackIsAllowed) 96 { 97 if (!v8::Context::InContext()) 98 return 0; 99 v8::HandleScope handleScope; 97 100 v8::Handle<v8::StackTrace> stackTrace(v8::StackTrace::CurrentStackTrace(maxStackSize, stackTraceOptions)); 98 return createScriptCallStack( context, stackTrace, maxStackSize);101 return createScriptCallStack(stackTrace, maxStackSize, emptyStackIsAllowed); 99 102 } 100 103 … … 112 115 } 113 116 114 bool ScriptCallStack::stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace)115 {116 #if ENABLE(INSPECTOR)117 if (!v8::Context::InContext())118 return false;119 v8::Handle<v8::Context> context = v8::Context::GetCurrent();120 if (context.IsEmpty())121 return false;122 v8::HandleScope scope;123 v8::Context::Scope contextScope(context);124 v8::Handle<v8::StackTrace> trace(v8::StackTrace::CurrentStackTrace(frameLimit));125 int frameCount = trace->GetFrameCount();126 if (trace.IsEmpty() || !frameCount)127 return false;128 for (int i = 0; i < frameCount; ++i) {129 v8::Handle<v8::StackFrame> frame = trace->GetFrame(i);130 RefPtr<InspectorObject> frameObject = InspectorObject::create();131 v8::Local<v8::String> scriptName = frame->GetScriptName();132 frameObject->setString("scriptName", scriptName.IsEmpty() ? "" : toWebCoreString(scriptName));133 v8::Local<v8::String> functionName = frame->GetFunctionName();134 frameObject->setString("functionName", functionName.IsEmpty() ? "" : toWebCoreString(functionName));135 frameObject->setNumber("lineNumber", frame->GetLineNumber());136 frameObject->setNumber("column", frame->GetColumn());137 stackTrace->pushObject(frameObject);138 }139 return true;140 #else141 return false;142 #endif143 }144 145 117 } // namespace WebCore -
trunk/WebCore/bindings/v8/ScriptCallStackFactory.h
r73355 r73366 47 47 | v8::StackTrace::kFunctionName); 48 48 49 PassRefPtr<ScriptCallStack> createScriptCallStack(v8:: Local<v8::Context>, v8::Handle<v8::StackTrace>, size_t maxStackSize);50 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize );49 PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Handle<v8::StackTrace>, size_t maxStackSize); 50 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize, bool emptyStackIsAllowed = false); 51 51 PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount); 52 52 -
trunk/WebCore/bindings/v8/V8ConsoleMessage.cpp
r73355 r73366 117 117 RefPtr<ScriptCallStack> callStack; 118 118 // Currently stack trace is only collected when inspector is open. 119 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) { 120 v8::Local<v8::Context> context = v8::Context::GetEntered(); 121 callStack = createScriptCallStack(context, stackTrace, ScriptCallStack::maxCallStackSizeToCapture); 122 } 119 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) 120 callStack = createScriptCallStack(stackTrace, ScriptCallStack::maxCallStackSizeToCapture); 123 121 124 122 v8::Handle<v8::Value> resourceName = message->GetScriptResourceName(); -
trunk/WebCore/inspector/ScriptCallFrame.cpp
r73355 r73366 37 37 namespace WebCore { 38 38 39 ScriptCallFrame::ScriptCallFrame(const String& functionName, const String& urlString, unsigned lineNumber)39 ScriptCallFrame::ScriptCallFrame(const String& functionName, const String& scriptName, unsigned lineNumber, unsigned column) 40 40 : m_functionName(functionName) 41 , m_s ourceURL(urlString)41 , m_scriptName(scriptName) 42 42 , m_lineNumber(lineNumber) 43 , m_column(column) 43 44 { 44 45 } … … 51 52 { 52 53 return m_functionName == o.m_functionName 53 && m_s ourceURL == o.m_sourceURL54 && m_scriptName == o.m_scriptName 54 55 && m_lineNumber == o.m_lineNumber; 55 56 } … … 60 61 RefPtr<InspectorObject> frame = InspectorObject::create(); 61 62 frame->setString("functionName", m_functionName); 62 frame->setString("s ourceURL", m_sourceURL);63 frame->setString("scriptName", m_scriptName); 63 64 frame->setNumber("lineNumber", m_lineNumber); 65 frame->setNumber("column", m_column); 64 66 return frame; 65 67 } -
trunk/WebCore/inspector/ScriptCallFrame.h
r73355 r73366 41 41 class ScriptCallFrame { 42 42 public: 43 ScriptCallFrame(const String& functionName, const String& urlString, unsigned lineNumber);43 ScriptCallFrame(const String& functionName, const String& scriptName, unsigned lineNumber, unsigned column = 0); 44 44 ~ScriptCallFrame(); 45 45 46 46 const String& functionName() const { return m_functionName; } 47 const String& sourceURL() const { return m_s ourceURL; }47 const String& sourceURL() const { return m_scriptName; } 48 48 unsigned lineNumber() const { return m_lineNumber; } 49 49 … … 53 53 private: 54 54 String m_functionName; 55 String m_s ourceURL;55 String m_scriptName; 56 56 unsigned m_lineNumber; 57 unsigned m_column; 57 58 }; 58 59 -
trunk/WebCore/inspector/ScriptCallStack.h
r73355 r73366 51 51 const ScriptCallFrame &at(size_t) const; 52 52 size_t size() const; 53 static bool stackTrace(int, const RefPtr<InspectorArray>&);54 53 55 54 bool isEqual(ScriptCallStack*) const; -
trunk/WebCore/inspector/TimelineRecordFactory.cpp
r73355 r73366 40 40 #include "ResourceResponse.h" 41 41 #include "ScriptCallStack.h" 42 #include "ScriptCallStackFactory.h" 42 43 43 44 namespace WebCore { … … 48 49 record->setNumber("startTime", startTime); 49 50 50 RefPtr< InspectorArray> stackTrace = InspectorArray::create();51 if ( ScriptCallStack::stackTrace(5, stackTrace))52 record->setArray("stackTrace", stackTrace );51 RefPtr<ScriptCallStack> stackTrace = createScriptCallStack(5, true); 52 if (stackTrace && stackTrace->size()) 53 record->setArray("stackTrace", stackTrace->buildInspectorObject()); 53 54 return record.release(); 54 55 } -
trunk/WebCore/inspector/front-end/ConsoleView.js
r73355 r73366 864 864 content.appendChild(messageTextElement); 865 865 866 var urlElement = WebInspector.linkifyResourceAsNode(frame.s ourceURL, "scripts", frame.lineNumber, "console-message-url");866 var urlElement = WebInspector.linkifyResourceAsNode(frame.scriptName, "scripts", frame.lineNumber, "console-message-url"); 867 867 content.appendChild(urlElement); 868 868
Note: See TracChangeset
for help on using the changeset viewer.