25ef208d7c
Update to reflect new user interface and command line options in Android 4.3+. Also add section on using application-level tracing. Fixes for bugs: b/7306847 b/10113361 b/9425766 b/7306847 b/9262485 Change-Id: Ia1c2a54fa2edc12cd68da27055aebe7ec47df745
470 lines
15 KiB
Plaintext
470 lines
15 KiB
Plaintext
page.title=Systrace
|
||
parent.title=Tools
|
||
parent.link=index.html
|
||
@jd:body
|
||
|
||
|
||
<p>The Systrace tool helps analyze the performance of your application by capturing and
|
||
displaying execution times of your applications processes and other Android system processes. The
|
||
tool combines data from the Android kernel such as the CPU scheduler, disk activity, and
|
||
application threads to generate an HTML report that shows an overall picture of an Android
|
||
device’s system processes for a given period of time.</p>
|
||
|
||
<p>The Systrace tool is particularly useful in diagnosing display problems where an
|
||
application is slow to draw or stutters while displaying motion or animation. For more information
|
||
on how to use Systrace, see <a href="{@docRoot}tools/debugging/systrace.html">Analyzing
|
||
Display and Performance</a>.</p>
|
||
|
||
|
||
|
||
<h2 id="requirements">Requirements</h2>
|
||
|
||
<p>In order to run Systrace, you must have Android SDK Tools 20 or later installed. You must also
|
||
have <a href="http://www.python.org/">Python</a> installed and included in your development
|
||
computer's execution path. In order to generate a trace, you must connect a device running Android
|
||
4.1 (API Level 16) or higher to your development system using a
|
||
<a href="{@docRoot}tools/device.html#setting-up">USB debugging connection</a>.</p>
|
||
|
||
<p>The Systrace tool can be run either from one of the Android SDK's graphical user interface
|
||
tools, or from the command line. The following sections describe how to run the tool using either
|
||
of these methods.</p>
|
||
|
||
|
||
<h2 id="gui">User Interface</h2>
|
||
|
||
<p>The Systrace tool can be run from the
|
||
<a href="{@docRoot}tools/help/adt.html">Android Developer Tools</a> (ADT) in Eclipse,
|
||
<a href="{@docRoot}sdk/installing/studio.html">Android Studio</a>,
|
||
or the Android <a href="{@docRoot}tools/help/monitor.html">Device Monitor</a>.
|
||
|
||
<p>To run the Systrace user interface:</p>
|
||
|
||
<div class="toggle-content closed">
|
||
<p style="margin-top:5px"><a href="#" onclick="return toggleContent(this)">
|
||
<img src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
|
||
/>Using Eclipse</a></p>
|
||
|
||
<div class="toggle-content-toggleme">
|
||
<ol>
|
||
<li>In Eclipse, open an Android application project.</li>
|
||
<li>Switch to the DDMS perspective, by selecting <strong>Window > Perspectives >
|
||
DDMS</strong>.</li>
|
||
<li>In the <strong>Devices</strong> tab, select the device on which to run a trace. If no
|
||
devices are listed, make sure your device is connected via USB cable and that debugging is
|
||
enabled on the device.</li>
|
||
<li>Click the Systrace icon <img src="{@docRoot}images/systrace/systrace-button.png"
|
||
style="margin:0"/> at the top of the <strong>Devices</strong> panel to configure tracing.</li>
|
||
<li>Set the tracing options and click <strong>OK</strong> to start the trace.</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="toggle-content closed">
|
||
<p style="margin-top:5px"><a href="#" onclick="return toggleContent(this)">
|
||
<img src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
|
||
/>Using Android Studio</a></p>
|
||
|
||
<div class="toggle-content-toggleme">
|
||
<ol>
|
||
<li>In <a href="{@docRoot}sdk/installing/studio.html">Android Studio</a>, open an
|
||
Android application project.</li>
|
||
<li>Open the Device Monitor by selecting <strong>Tools > Android > Monitor</strong>.</li>
|
||
<li>In the <strong>Devices</strong> tab, select the device on which to run a trace. If no
|
||
devices are listed, make sure your device is connected via USB cable and that debugging is
|
||
enabled on the device.</li>
|
||
<li>Click the Systrace icon <img src="{@docRoot}images/systrace/systrace-button.png"
|
||
style="margin:0"/> at the top of the <strong>Devices</strong> panel to configure tracing.</li>
|
||
<li>Set the tracing options and click <strong>OK</strong> to start the trace.</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="toggle-content closed">
|
||
<p style="margin-top:5px"><a href="#" onclick="return toggleContent(this)">
|
||
<img src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
|
||
/>Using Device Monitor</a></p>
|
||
|
||
<div class="toggle-content-toggleme">
|
||
<ol>
|
||
<li>Navigate to your SDK {@code tools/} directory.</li>
|
||
<li>Run the {@code monitor} program.</li>
|
||
<li>In the <strong>Devices</strong> tab, select the device on which to run a trace. If no
|
||
devices are listed, make sure your device is connected via USB cable and that debugging is
|
||
enabled on the device.</li>
|
||
<li>Click the Systrace icon <img src="{@docRoot}images/systrace/systrace-button.png"
|
||
style="margin:0"/> at the top of the <strong>Devices</strong> panel to configure tracing.</li>
|
||
<li>Set the tracing options and click <strong>OK</strong> to start the trace.</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<h2 id="options">Command Line Usage</h2>
|
||
|
||
<p>The Systrace tool has different command line options for devices running Android 4.3 (API
|
||
level 18) and higher versus devices running Android 4.2 (API level 17) and lower. The following
|
||
sections describe the different command line options for each version.</p>
|
||
|
||
<p>The general syntax for running Systrace from the command line is as follows.</p>
|
||
|
||
<pre>
|
||
$ python systrace.py [options] [category1] [category2] ... [categoryN]
|
||
</pre>
|
||
|
||
<p>See the sections below for example Systrace sessions.</p>
|
||
|
||
|
||
<h3 id="options-4.3">Android 4.3 and higher options</h3>
|
||
|
||
<p>When you use Systrace on devices running Android 4.3 and higher, you must specify at least one
|
||
trace category tag. Here is an example execution run that sets trace tags and generates a trace
|
||
from a connected device.</p>
|
||
|
||
<pre>
|
||
$ cd <em>android-sdk</em>/platform-tools/systrace
|
||
$ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm
|
||
</pre>
|
||
|
||
<p class="note">
|
||
<strong>Tip:</strong> If you want to see the names of tasks in the trace output, you <em>must</em>
|
||
include the {@code sched} category in your command parameters.
|
||
</p>
|
||
|
||
<p>The table below lists the Systrace command line options for devices running Android 4.3
|
||
(API level 18) and higher.</p>
|
||
|
||
<table>
|
||
<tr>
|
||
<th>Option</th>
|
||
|
||
<th>Description</th>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><nobr><code>-h, --help</code></nobr></td>
|
||
|
||
<td>Show the help message.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-o <<em>FILE</em>></code></td>
|
||
|
||
<td>Write the HTML trace report to the specified file.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-t N, --time=N</code></td>
|
||
|
||
<td>Trace activity for <em>N</em> seconds. The default value is 5 seconds.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-b N, --buf-size=N</code></td>
|
||
|
||
<td>Use a trace buffer size of <em>N</em> kilobytes. This option lets you limit the total size
|
||
of the data collected during a trace.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-k <<em>KFUNCS</em>><br>
|
||
--ktrace=<<em>KFUNCS</em>></code></td>
|
||
|
||
<td>Trace the activity of specific kernel functions, specified in a comma-separated list.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-l, --list-categories</code></td>
|
||
|
||
<td>List the available tracing category tags. The available tags are:
|
||
|
||
<ul>
|
||
<li><code>gfx</code> - Graphics</li>
|
||
<li><code>input</code> - Input</li>
|
||
<li><code>view</code> - View</li>
|
||
<li><code>webview</code> - WebView</li>
|
||
<li><code>wm</code> - Window Manager</li>
|
||
<li><code>am</code> - Activity Manager</li>
|
||
<li><code>audio</code> - Audio</li>
|
||
<li><code>video</code> - Video</li>
|
||
<li><code>camera</code> - Camera</li>
|
||
<li><code>hal</code> - Hardware Modules</li>
|
||
<li><code>res</code> - Resource Loading</li>
|
||
<li><code>dalvik</code> - Dalvik VM</li>
|
||
<li><code>rs</code> - RenderScript</li>
|
||
<li><code>sched</code> - CPU Scheduling</li>
|
||
<li><code>freq</code> - CPU Frequency</li>
|
||
<li><code>membus</code> - Memory Bus Utilization</li>
|
||
<li><code>idle</code> - CPU Idle</li>
|
||
<li><code>disk</code> - Disk input and output</li>
|
||
<li><code>load</code> - CPU Load</li>
|
||
<li><code>sync</code> - Synchronization Manager</li>
|
||
<li><code>workq</code> - Kernel Workqueues</li>
|
||
</ul>
|
||
|
||
<p class="note"><strong>Note:</strong> Some trace categories are not supported on all
|
||
devices.</p>
|
||
|
||
<p class="note"><strong>Tip:</strong> If you want to see the names of tasks in the trace
|
||
output, you <em>must</em> include the {@code sched} category in your command parameters.</p>
|
||
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-a <<em>APP_NAME</em>><br>
|
||
--app=<<em>APP_NAME</em>></code></td>
|
||
|
||
<td>Enable tracing for applications, specified as a comma-separated list of
|
||
<a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package names</a>.
|
||
The apps must contain tracing instrumentation calls from the {@link android.os.Trace} class.
|
||
For more information, see <a href="{@docRoot}tools/debugging/systrace.html#app-trace">Analyzing
|
||
Display and Performance</a>.
|
||
</td>
|
||
</tr>
|
||
|
||
|
||
|
||
<tr>
|
||
<td><code>--link-assets</code></td>
|
||
|
||
<td>Link to the original CSS or JavaScript resources instead of embedding them in the HTML
|
||
trace report.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>--from-file=<<em>FROM_FILE</em>></code></td>
|
||
|
||
<td>Create the interactive Systrace report from a file, instead of running a live trace.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>--asset-dir=<<em>ASSET_DIR</em>></code></td>
|
||
|
||
<td>Specify a directory for the trace report assets. This option is useful for maintaining a
|
||
single set of assets for multiple Systrace reports.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td style="white-space:nowrap">
|
||
<code>-e <<em>DEVICE_SERIAL</em>><br>
|
||
--serial=<<em>DEVICE_SERIAL</em>></code></td>
|
||
|
||
<td>Conduct the trace on a specific connected device, identified by its
|
||
<a href="{@docRoot}tools/help/adb.html#devicestatus">device serial number</a>.</td>
|
||
</tr>
|
||
|
||
</table>
|
||
|
||
|
||
<h3 id="options-pre-4.3">Android 4.2 and lower options</h3>
|
||
|
||
<p>Using Systrace on the command line with devices running Android 4.2 and lower is typically a
|
||
two-step process. You must first set the trace tags you want to capture and then run the trace.
|
||
Here is an example execution run that sets trace tags and generates a trace from a connected
|
||
device.</p>
|
||
|
||
<pre>
|
||
$ cd <em>android-sdk</em>/platform-tools/systrace
|
||
$ python systrace.py --set-tags gfx,view,wm
|
||
$ adb shell stop
|
||
$ adb shell start
|
||
$ python systrace.py --disk --time=10 -o mynewtrace.html
|
||
</pre>
|
||
|
||
<p>The table below lists the Systrace command line options for devices running Android 4.2
|
||
(API level 17) and lower.</p>
|
||
|
||
<table>
|
||
<tr>
|
||
<th>Option</th>
|
||
|
||
<th>Description</th>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><nobr><code>-h, --help</code></nobr></td>
|
||
|
||
<td>Show the help message.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-o <<em>FILE</em>></code></td>
|
||
|
||
<td>Write the HTML trace report to the specified file.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-t N, --time=N</code></td>
|
||
|
||
<td>Trace activity for <em>N</em> seconds. The default value is 5 seconds.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-b N, --buf-size=N</code></td>
|
||
|
||
<td>Use a trace buffer size of <em>N</em> kilobytes. This option lets you limit the total size
|
||
of the data collected during a trace.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-d, --disk</code></td>
|
||
|
||
<td>Trace disk input and output activity. This option requires root access on the device.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-f, --cpu-freq</code></td>
|
||
|
||
<td>Trace CPU frequency changes. Only changes to the CPU frequency are logged, so the initial
|
||
frequency of the CPU when tracing starts is not shown.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-i, --cpu-idle</code></td>
|
||
|
||
<td>Trace CPU idle events.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-l, --cpu-load</code></td>
|
||
|
||
<td>Trace CPU load. This value is a percentage determined by the interactive CPU frequency
|
||
governor.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><nobr><code>-s, --no-cpu-sched</code></nobr></td>
|
||
|
||
<td>Prevent tracing of the CPU scheduler. This option allows for longer trace times by reducing
|
||
the rate of data flowing into the trace buffer.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><nobr><code>-u, --bus-utilization</code></nobr></td>
|
||
|
||
<td>Trace the bus utilization levels. This option requires root access on the device.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>-w, --workqueue</code></td>
|
||
|
||
<td>Trace kernel work queues. This option requires root access on the device.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td id="tags"><code>--set-tags=<<em>TAGS</em>></code></td>
|
||
|
||
<td>Set the enabled trace tags in a comma separated list. The available tags are:
|
||
<ul>
|
||
<li><code>gfx</code> - Graphics</li>
|
||
<li><code>input</code> - Input</li>
|
||
<li><code>view</code> - View</li>
|
||
<li><code>webview</code> - WebView</li>
|
||
<li><code>wm</code> - Window Manager</li>
|
||
<li><code>am</code> - Activity Manager</li>
|
||
<li><code>sync</code> - Synchronization Manager</li>
|
||
<li><code>audio</code> - Audio</li>
|
||
<li><code>video</code> - Video</li>
|
||
<li><code>camera</code> - Camera</li>
|
||
</ul>
|
||
<p class="note"><strong>Note:</strong> When setting trace tags from the command line, you
|
||
must stop and restart the framework ({@code $ adb shell stop; adb shell start}) for the
|
||
tag tracing changes to take effect.</p>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><code>--link-assets</code></td>
|
||
|
||
<td>Link to the original CSS or JS resources instead of embedding them in the HTML trace
|
||
report.</td>
|
||
</tr>
|
||
|
||
</table>
|
||
|
||
<p>You can set the trace <a href="#tags">tags</a> for Systrace on
|
||
your Android 4.2 and lower device by navigating to <strong>Settings > Developer options >
|
||
Monitoring > Enable traces</strong>.</p>
|
||
|
||
|
||
<h2 id="viewing-options">Trace Viewing Shortcuts</h2>
|
||
|
||
<p>The table below lists the keyboard shortcuts that are available while viewing a Systrace
|
||
trace HTML report.</p>
|
||
|
||
<table>
|
||
<tr>
|
||
<th>Key</th>
|
||
|
||
<th>Description</th>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>w</strong></td>
|
||
|
||
<td>Zoom into the trace timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>s</strong></td>
|
||
|
||
<td>Zoom out of the trace timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>a</strong></td>
|
||
|
||
<td>Pan left on the trace timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>d</strong></td>
|
||
|
||
<td>Pan right on the trace timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>e</strong></td>
|
||
|
||
<td>Center the trace timeline on the current mouse location.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>g</strong></td>
|
||
|
||
<td>Show grid at the start of the currently selected task.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>Shift+g</strong></td>
|
||
|
||
<td>Show grid at the end of the currently selected task.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>Right Arrow</strong></td>
|
||
|
||
<td>Select the next event on the currently selected timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>Left Arrow</strong></td>
|
||
|
||
<td>Select the previous event on the currently selected timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>Double Click</strong></td>
|
||
|
||
<td>Zoom into the trace timeline.</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>Shift+Double Click</strong></td>
|
||
|
||
<td>Zoom out of the trace timeline.</td>
|
||
</tr>
|
||
|
||
</table>
|