aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/doc/dtrace
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-03-23 10:05:55 +0100
committermarha <marha@users.sourceforge.net>2012-03-23 10:05:55 +0100
commit0f834b91a4768673833ab4917e87d86c237bb1a6 (patch)
tree363489504ed4b2d360259b8de4c9e392918e5d02 /xorg-server/doc/dtrace
parentfc72edebf875378459368c5383d9023730cbca54 (diff)
downloadvcxsrv-0f834b91a4768673833ab4917e87d86c237bb1a6.tar.gz
vcxsrv-0f834b91a4768673833ab4917e87d86c237bb1a6.tar.bz2
vcxsrv-0f834b91a4768673833ab4917e87d86c237bb1a6.zip
libX11 xserver fontconfig mesa pixman xkbcomp xkeyboard-config git update
23 Mar 2012
Diffstat (limited to 'xorg-server/doc/dtrace')
-rw-r--r--xorg-server/doc/dtrace/Xserver-DTrace.xml153
1 files changed, 151 insertions, 2 deletions
diff --git a/xorg-server/doc/dtrace/Xserver-DTrace.xml b/xorg-server/doc/dtrace/Xserver-DTrace.xml
index 5ef062980..91ca254d7 100644
--- a/xorg-server/doc/dtrace/Xserver-DTrace.xml
+++ b/xorg-server/doc/dtrace/Xserver-DTrace.xml
@@ -52,7 +52,9 @@ DEALINGS IN THE SOFTWARE.
facility in <productname>Solaris</productname> 10,
<productname>MacOS X</productname> 10.5, and later releases. This
provider instruments various points in the X server, to allow
- tracing what client applications are up to.
+ tracing what client applications are up to. DTrace probes may be used
+ with <ulink url="http://sourceware.org/systemtap/">SystemTap</ulink>
+ on GNU/Linux systems.
</para>
<para>
@@ -81,7 +83,7 @@ DEALINGS IN THE SOFTWARE.
<table id="Probes_and_their_arguments">
<title>Probes and their arguments</title>
- <tgroup cols='7'>
+ <tgroup cols='9'>
<colspec colname="probe" colwidth="2*"/>
<colspec colname="desc" colwidth="3*"/>
<colspec colname="arg0" colwidth="1*"/>
@@ -89,6 +91,8 @@ DEALINGS IN THE SOFTWARE.
<colspec colname="arg2" colwidth="1*"/>
<colspec colname="arg3" colwidth="1*"/>
<colspec colname="arg4" colwidth="1*"/>
+ <colspec colname="arg5" colwidth="1*"/>
+ <colspec colname="arg6" colwidth="1*"/>
<spanspec spanname="all" namest="probe" nameend="arg4"/>
<thead>
<row>
@@ -99,6 +103,8 @@ DEALINGS IN THE SOFTWARE.
<entry>arg2</entry>
<entry>arg3</entry>
<entry>arg4</entry>
+ <entry>arg5</entry>
+ <entry>arg6</entry>
</row>
</thead>
<tbody>
@@ -113,6 +119,8 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>requestLength</parameter></entry>
<entry><parameter>clientId</parameter></entry>
<entry><parameter>requestBuffer</parameter></entry>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry>request-done</entry>
@@ -122,6 +130,8 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>sequenceNumber</parameter></entry>
<entry><parameter>clientId</parameter></entry>
<entry><parameter>resultCode</parameter></entry>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry spanname="all" class="grouphead">Event Probes</entry>
@@ -132,7 +142,10 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>clientId</parameter></entry>
<entry><parameter>eventCode</parameter></entry>
<entry><parameter>eventBuffer</parameter></entry>
+ <entry nameend="arg3" class="unused"/>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry spanname="all" class="grouphead">Client Connection Probes</entry>
@@ -142,7 +155,11 @@ DEALINGS IN THE SOFTWARE.
<entry>Called when a new connection is opened from a client</entry>
<entry><parameter>clientId</parameter></entry>
<entry><parameter>clientFD</parameter></entry>
+ <entry nameend="arg2" class="unused"/>
+ <entry nameend="arg3" class="unused"/>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry>client-auth</entry>
@@ -152,12 +169,19 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>clientPid</parameter></entry>
<entry><parameter>clientZoneId</parameter></entry>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry>client-disconnect</entry>
<entry>Called when a client connection is closed</entry>
<entry><parameter>clientId</parameter></entry>
+ <entry nameend="arg1" class="unused"/>
+ <entry nameend="arg2" class="unused"/>
+ <entry nameend="arg3" class="unused"/>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry spanname="all" class="grouphead">Resource Allocation Probes</entry>
@@ -170,6 +194,8 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>resourceValue</parameter></entry>
<entry><parameter>resourceTypeName</parameter></entry>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
</row>
<row>
<entry>resource-free</entry>
@@ -179,6 +205,24 @@ DEALINGS IN THE SOFTWARE.
<entry><parameter>resourceValue</parameter></entry>
<entry><parameter>resourceTypeName</parameter></entry>
<entry nameend="arg4" class="unused"/>
+ <entry nameend="arg5" class="unused"/>
+ <entry nameend="arg6" class="unused"/>
+ </row>
+ <row>
+ <entry spanname="all" class="grouphead">Input API probes</entry>
+ </row>
+ <row>
+ <entry>input-event</entry>
+ <entry>Called when an input event was submitted for processing</entry>
+ <entry><parameter>deviceid</parameter></entry>
+ <entry><parameter>eventtype</parameter></entry>
+ <entry><parameter>button</parameter> or
+ <parameter>keycode</parameter> or
+ <parameter>touchid</parameter></entry>
+ <entry><parameter>flags</parameter></entry>
+ <entry><parameter>nvalues</parameter></entry>
+ <entry><parameter>mask</parameter></entry>
+ <entry><parameter>values</parameter></entry>
</row>
</tbody>
</tgroup>
@@ -304,6 +348,44 @@ DEALINGS IN THE SOFTWARE.
<entry><type>uint32_t</type></entry>
<entry>Number of X request in in this connection</entry>
</row>
+ <row>
+ <entry><parameter>deviceid</parameter></entry>
+ <entry><type>int</type></entry>
+ <entry>The device's numerical ID</entry>
+ </row>
+ <row>
+ <entry><parameter>eventtype</parameter></entry>
+ <entry><type>int</type></entry>
+ <entry>Protocol event type</entry>
+ </row>
+ <row>
+ <entry><parameter>button, keycode, touchid</parameter></entry>
+ <entry><type>uint32_t</type></entry>
+ <entry>The button number, keycode or touch ID</entry>
+ </row>
+ <row>
+ <entry><parameter>flags</parameter></entry>
+ <entry><type>uint32_t</type></entry>
+ <entry>Miscellaneous event-specific server flags</entry>
+ </row>
+ <row>
+ <entry><parameter>nvalues</parameter></entry>
+ <entry><type>int8_t</type></entry>
+ <entry>Number of bits in <parameter>mask</parameter> and number of elements
+ in <parameter>values</parameter></entry>
+ </row>
+ <row>
+ <entry><parameter>mask</parameter></entry>
+ <entry><type>uint8_t*</type></entry>
+ <entry>Binary mask indicating which indices in <parameter>values</parameter> contain
+ valid data</entry>
+ </row>
+ <row>
+ <entry><parameter>values</parameter></entry>
+ <entry><type>double*</type></entry>
+ <entry>Valuator values. Values for indices for which the
+ <parameter>mask</parameter> is not set are undefined</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -572,6 +654,73 @@ Xserver$1:::client-disconnect
</example>
+ <example id="Input_API_monitoring_with_systemtap">
+ <title>Input API monitoring with SystemTap</title>
+
+ <para>
+ This script can be used to monitor events submitted by drivers to
+ the server for enqueuing. Due to the integration of the input API
+ probes, some server-enqueued events will show up too.
+ <programlisting>
+ # Compile+run with
+ # stap -g xorg.stp /usr/bin/Xorg
+ #
+
+
+ function print_valuators:string(nvaluators:long, mask_in:long, valuators_in:long) %{
+ int i;
+ unsigned char *mask = (unsigned char*)THIS->mask_in;
+ double *valuators = (double*)THIS->valuators_in;
+ char str[128] = {0};
+ char *s = str;
+
+ #define BitIsSet(ptr, bit) (((unsigned char*)(ptr))[(bit)>>3] &amp; (1 &lt;&lt; ((bit) &amp; 7)))
+
+ s += sprintf(s, "nval: %d ::", (int)THIS->nvaluators);
+ for (i = 0; i &lt; THIS->nvaluators; i++)
+ {
+ s += sprintf(s, " %d: ", i);
+ if (BitIsSet(mask, i))
+ s += sprintf(s, "%d", (int)valuators[i]);
+ }
+
+ sprintf(THIS->__retvalue, "%s", str);
+ %}
+
+ probe process(@1).mark("input__event")
+ {
+ deviceid = $arg1
+ type = $arg2
+ detail = $arg3
+ flags = $arg4
+ nvaluators = $arg5
+
+ str = print_valuators(nvaluators, $arg6, $arg7)
+ printf("Event: device %d type %d detail %d flags %#x %s\n",
+ deviceid, type, detail, flags, str);
+ }
+ </programlisting>
+
+ Sample output from a run of this script:
+ <screen><computeroutput>
+Event: device 13 type 4 detail 1 flags 0x0 nval: 0 ::
+Event: device 13 type 6 detail 0 flags 0xa nval: 1 :: 0: 1
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 2 1: -1
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 2 1: -1
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 4 1: -3
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 3 1: -3
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 3 1: -2
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 2 1: -2
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 2 1: -2
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 2 1: -2
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 1: -1
+Event: device 13 type 6 detail 0 flags 0xa nval: 2 :: 0: 1: -1
+Event: device 13 type 5 detail 1 flags 0x0 nval: 0 ::
+ </computeroutput></screen>
+
+ </para>
+
+ </example>
</sect1>