Provide column numbers to DTrace willExecute/didExecute probes
authorburg@cs.washington.edu <burg@cs.washington.edu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Sep 2014 21:15:21 +0000 (21:15 +0000)
committerburg@cs.washington.edu <burg@cs.washington.edu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Sep 2014 21:15:21 +0000 (21:15 +0000)
https://bugs.webkit.org/show_bug.cgi?id=136434

Reviewed by Antti Koivisto.

Source/JavaScriptCore:

Provide the columnNumber and update stubs for !HAVE(DTRACE).

* profiler/ProfileGenerator.cpp:
(JSC::ProfileGenerator::willExecute):
(JSC::ProfileGenerator::didExecute):
* runtime/Tracing.d:
* runtime/Tracing.h:

Tools:

Create a directory for DTrace scripts. Add an example script that
shows how to use static probes provided by JavaScriptCore's profiler.

* Scripts/dtrace/jsc-trace-profiler-events.d: Added.

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/profiler/ProfileGenerator.cpp
Source/JavaScriptCore/runtime/Tracing.d
Source/JavaScriptCore/runtime/Tracing.h
Tools/ChangeLog
Tools/Scripts/dtrace/jsc-trace-profiler-events.d [new file with mode: 0755]

index 0dcafcb..cb1aba5 100644 (file)
@@ -1,3 +1,18 @@
+2014-09-01  Brian J. Burg  <burg@cs.washington.edu>
+
+        Provide column numbers to DTrace willExecute/didExecute probes
+        https://bugs.webkit.org/show_bug.cgi?id=136434
+
+        Reviewed by Antti Koivisto.
+
+        Provide the columnNumber and update stubs for !HAVE(DTRACE).
+
+        * profiler/ProfileGenerator.cpp:
+        (JSC::ProfileGenerator::willExecute):
+        (JSC::ProfileGenerator::didExecute):
+        * runtime/Tracing.d:
+        * runtime/Tracing.h:
+
 2014-09-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
 
         [CMAKE] Build warning by INTERFACE_LINK_LIBRARIES
index d37b356..2dd5a2d 100644 (file)
@@ -111,7 +111,7 @@ void ProfileGenerator::willExecute(ExecState* callerCallFrame, const CallIdentif
     if (JAVASCRIPTCORE_PROFILE_WILL_EXECUTE_ENABLED()) {
         CString name = callIdentifier.functionName().utf8();
         CString url = callIdentifier.url().utf8();
-        JAVASCRIPTCORE_PROFILE_WILL_EXECUTE(m_profileGroup, const_cast<char*>(name.data()), const_cast<char*>(url.data()), callIdentifier.lineNumber());
+        JAVASCRIPTCORE_PROFILE_WILL_EXECUTE(m_profileGroup, const_cast<char*>(name.data()), const_cast<char*>(url.data()), callIdentifier.lineNumber(), callIdentifier.columnNumber());
     }
 
     if (!m_origin)
@@ -126,7 +126,7 @@ void ProfileGenerator::didExecute(ExecState* callerCallFrame, const CallIdentifi
     if (JAVASCRIPTCORE_PROFILE_DID_EXECUTE_ENABLED()) {
         CString name = callIdentifier.functionName().utf8();
         CString url = callIdentifier.url().utf8();
-        JAVASCRIPTCORE_PROFILE_DID_EXECUTE(m_profileGroup, const_cast<char*>(name.data()), const_cast<char*>(url.data()), callIdentifier.lineNumber());
+        JAVASCRIPTCORE_PROFILE_DID_EXECUTE(m_profileGroup, const_cast<char*>(name.data()), const_cast<char*>(url.data()), callIdentifier.lineNumber(), callIdentifier.columnNumber());
     }
 
     if (!m_origin)
index da854b9..ec13625 100644 (file)
@@ -28,9 +28,9 @@ provider JavaScriptCore
     probe gc__begin();
     probe gc__marked();
     probe gc__end();
-    
-    probe profile__will_execute(int, char*, char*, int);
-    probe profile__did_execute(int, char*, char*, int);
+
+    probe profile__will_execute(int, char*, char*, int, int);
+    probe profile__did_execute(int, char*, char*, int, int);
 };
 
 #pragma D attributes Unstable/Unstable/Common provider JavaScriptCore provider
index c28c85f..69ead92 100644 (file)
 #define JAVASCRIPTCORE_GC_MARKED()
 #define JAVASCRIPTCORE_GC_MARKED_ENABLED() 0
 
-#define JAVASCRIPTCORE_PROFILE_WILL_EXECUTE(arg0, arg1, arg2, arg3)
+#define JAVASCRIPTCORE_PROFILE_WILL_EXECUTE(arg0, arg1, arg2, arg3, arg4)
 #define JAVASCRIPTCORE_PROFILE_WILL_EXECUTE_ENABLED() 0
 
-#define JAVASCRIPTCORE_PROFILE_DID_EXECUTE(arg0, arg1, arg2, arg3)
+#define JAVASCRIPTCORE_PROFILE_DID_EXECUTE(arg0, arg1, arg2, arg3, arg4)
 #define JAVASCRIPTCORE_PROFILE_DID_EXECUTE_ENABLED() 0
 
 #endif
index 09ac0b1..8b45127 100644 (file)
@@ -1,3 +1,15 @@
+2014-09-01  Brian J. Burg  <burg@cs.washington.edu>
+
+        Provide column numbers to DTrace willExecute/didExecute probes
+        https://bugs.webkit.org/show_bug.cgi?id=136434
+
+        Reviewed by Antti Koivisto.
+
+        Create a directory for DTrace scripts. Add an example script that
+        shows how to use static probes provided by JavaScriptCore's profiler.
+
+        * Scripts/dtrace/jsc-trace-profiler-events.d: Added.
+
 2014-09-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>
 
         [GTK] [JHBuild] Cyclic dependency between cairo and librsvg.
diff --git a/Tools/Scripts/dtrace/jsc-trace-profiler-events.d b/Tools/Scripts/dtrace/jsc-trace-profiler-events.d
new file mode 100755 (executable)
index 0000000..23ad835
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/sbin/dtrace -qs
+
+/*
+ * Copyright (C) 2014 University of Washington. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * DTrace example: tracing function calls when the profiler is enabled.
+ * To use this, first enable the JavaScript tracing profiler using the Web Inspector.
+ *
+ * These run for any process; restrict to a pid by changing the provider to JavaScriptCore$target
+ * and passing the arguments '-p <pid>' to the script.
+ */
+
+JavaScriptCore*:::profile-will_execute
+{
+    printf("[%d] -> %s (%s:%d:%d)\n",arg0, copyinstr(arg1), copyinstr(arg2), arg3, arg4);
+}
+
+JavaScriptCore*:::profile-did_execute
+{
+    printf("[%d] <- %s (%s:%d:%d)\n",arg0, copyinstr(arg1), copyinstr(arg2), arg3, arg4);
+}