Changeset 73351 in webkit
- Timestamp:
- Dec 6, 2010 2:13:38 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r73350 r73351 1 2010-12-03 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 2010-12-06 Sergio Villar Senin <svillar@igalia.com> 2 33 -
trunk/WebCore/bindings/js/ScriptCallStackFactory.cpp
r72895 r73351 49 49 namespace WebCore { 50 50 51 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t) 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
r72895 r73351 43 43 class ScriptCallStack; 44 44 45 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize); 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
r72895 r73351 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) 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 error for example.76 // Fallback to setting lineNumber to 0, and source and function name to "undefined".77 scriptCallFrames.append(ScriptCallFrame("undefined", "undefined", 0));78 }79 73 } 80 74 81 PassRefPtr<ScriptCallStack> createScriptCallStack(v8:: Local<v8::Context> context, v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize)75 PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize) 82 76 { 77 ASSERT(v8::Context::InContext()); 83 78 v8::HandleScope scope; 84 v8::Context::Scope contextScope(context);85 86 79 Vector<ScriptCallFrame> scriptCallFrames; 87 toScriptCallFramesVector( context,stackTrace, scriptCallFrames, maxStackSize);80 toScriptCallFramesVector(stackTrace, scriptCallFrames, maxStackSize); 88 81 return ScriptCallStack::create(scriptCallFrames); 89 82 } … … 91 84 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize) 92 85 { 93 v8::HandleScope scope; 94 v8::Local<v8::Context> context = v8::Context::GetCurrent(); 95 // TODO(yurys): remove? 96 v8::Context::Scope contextScope(context); 86 if (!v8::Context::InContext()) 87 return 0; 88 v8::HandleScope handleScope; 97 89 v8::Handle<v8::StackTrace> stackTrace(v8::StackTrace::CurrentStackTrace(maxStackSize, stackTraceOptions)); 98 return createScriptCallStack( context,stackTrace, maxStackSize);90 return createScriptCallStack(stackTrace, maxStackSize); 99 91 } 100 92 … … 112 104 } 113 105 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 106 } // namespace WebCore -
trunk/WebCore/bindings/v8/ScriptCallStackFactory.h
r72895 r73351 47 47 | v8::StackTrace::kFunctionName); 48 48 49 PassRefPtr<ScriptCallStack> createScriptCallStack(v8:: Local<v8::Context>, v8::Handle<v8::StackTrace>, size_t maxStackSize);49 PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Handle<v8::StackTrace>, size_t maxStackSize); 50 50 PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize); 51 51 PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount); -
trunk/WebCore/bindings/v8/V8ConsoleMessage.cpp
r72895 r73351 118 118 // Currently stack trace is only collected when inspector is open. 119 119 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) { 120 v8::Local<v8::Context> context = v8::Context::GetEntered(); 121 callStack = createScriptCallStack(context, stackTrace, ScriptCallStack::maxCallStackSizeToCapture); 120 callStack = createScriptCallStack(stackTrace, ScriptCallStack::maxCallStackSizeToCapture); 122 121 } 123 122 -
trunk/WebCore/inspector/ScriptCallFrame.cpp
r71981 r73351 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
r72895 r73351 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
r72895 r73351 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
r66098 r73351 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); 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
r71413 r73351 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.