Insert source file and line number for v8 function calls into tracing
authorenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 May 2012 18:22:38 +0000 (18:22 +0000)
committerenne@google.com <enne@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 May 2012 18:22:38 +0000 (18:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=84613

Reviewed by Kentaro Hara.

The trace for v8 function calls doesn't include any information about
what function is being called. Pass this information along so it can
be less opaque.

* bindings/v8/V8Proxy.cpp:
(WebCore::resourceInfo):
(WebCore):
(WebCore::resourceString):
(WebCore::V8Proxy::instrumentedCallFunction):
* platform/chromium/TraceEvent.h:
(WebCore::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@117466 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/bindings/v8/V8Proxy.cpp

index a30239b..4f5d8b2 100644 (file)
@@ -1,3 +1,22 @@
+2012-05-17  Adrienne Walker  <enne@google.com>
+
+        Insert source file and line number for v8 function calls into tracing
+        https://bugs.webkit.org/show_bug.cgi?id=84613
+
+        Reviewed by Kentaro Hara.
+
+        The trace for v8 function calls doesn't include any information about
+        what function is being called. Pass this information along so it can
+        be less opaque.
+
+        * bindings/v8/V8Proxy.cpp:
+        (WebCore::resourceInfo):
+        (WebCore):
+        (WebCore::resourceString):
+        (WebCore::V8Proxy::instrumentedCallFunction):
+        * platform/chromium/TraceEvent.h:
+        (WebCore::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):
+
 2012-05-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
 
         [Qt] REGRESSION(101967): It made editing/style/iframe-onload-crash-mac.html timeout
index 70aa876..bd2c078 100644 (file)
@@ -69,6 +69,7 @@
 #include <wtf/StdLibExtras.h>
 #include <wtf/StringExtras.h>
 #include <wtf/UnusedParam.h>
+#include <wtf/text/StringBuilder.h>
 #include <wtf/text/WTFString.h>
 
 #if PLATFORM(CHROMIUM)
@@ -387,6 +388,31 @@ v8::Local<v8::Value> V8Proxy::callFunction(v8::Handle<v8::Function> function, v8
     return V8Proxy::instrumentedCallFunction(frame(), function, receiver, argc, args);
 }
 
+static inline void resourceInfo(const v8::Handle<v8::Function> function, String& resourceName, int& lineNumber)
+{
+    v8::ScriptOrigin origin = function->GetScriptOrigin();
+    if (origin.ResourceName().IsEmpty()) {
+        resourceName = "undefined";
+        lineNumber = 1;
+    } else {
+        resourceName = toWebCoreString(origin.ResourceName());
+        lineNumber = function->GetScriptLineNumber() + 1;
+    }
+}
+
+static inline String resourceString(const v8::Handle<v8::Function> function)
+{
+    String resourceName;
+    int lineNumber;
+    resourceInfo(function, resourceName, lineNumber);
+
+    StringBuilder builder;
+    builder.append(resourceName);
+    builder.append(':');
+    builder.append(String::number(lineNumber));
+    return builder.toString();
+}
+
 v8::Local<v8::Value> V8Proxy::instrumentedCallFunction(Frame* frame, v8::Handle<v8::Function> function, v8::Handle<v8::Object> receiver, int argc, v8::Handle<v8::Value> args[])
 {
     V8GCController::checkMemoryUsage();
@@ -398,20 +424,16 @@ v8::Local<v8::Value> V8Proxy::instrumentedCallFunction(Frame* frame, v8::Handle<
 
     InspectorInstrumentationCookie cookie;
     if (InspectorInstrumentation::hasFrontends() && context) {
-        String resourceName("undefined");
-        int lineNumber = 1;
-        v8::ScriptOrigin origin = function->GetScriptOrigin();
-        if (!origin.ResourceName().IsEmpty()) {
-            resourceName = toWebCoreString(origin.ResourceName());
-            lineNumber = function->GetScriptLineNumber() + 1;
-        }
+        String resourceName;
+        int lineNumber;
+        resourceInfo(function, resourceName, lineNumber);
         cookie = InspectorInstrumentation::willCallFunction(context, resourceName, lineNumber);
     }
 
     v8::Local<v8::Value> result;
     {
 #if PLATFORM(CHROMIUM)
-        TRACE_EVENT0("v8", "v8.callFunction");
+        TRACE_EVENT1("v8", "v8.callFunction", "callsite", resourceString(function).utf8());
 #endif
         V8RecursionScope recursionScope(context);
         result = function->Call(receiver, argc, args);