blob: b48973c36a9cddead856a6e907991f99a2cc042e [file] [log] [blame] [view]
# Quickstart: Record traces on Android
`perfetto` allows you to collect system-wide performance traces from Android
devices from a variety of data sources (kernel scheduler via ftrace, userspace
instrumentation via atrace and all other data sources listed in this site).
## Starting the tracing services
Due to Perfetto's [service-based architecture](/docs/concepts/service-model.md)
, the `traced` and `traced_probes` services need to be running to record traces.
These services are shipped on Android system images by default since Android 9
(Pie) but are not always enabled by default.
On Android 9 (P) and 10 (Q) those services are enabled by default only on Pixel
phones and must be manually enabled on other phones.
Since Android 11 (R), perfetto services are enabled by default on most devices.
To enable perfetto services run:
```bash
# Will start both traced and traced_probes.
adb shell setprop persist.traced.enable 1
```
## Recording a trace
You can collect a trace in the following ways:
* Through the record page in the [Perfetto UI](https://ui.perfetto.dev).
* Using the `perfetto` command line interface [[reference](/docs/reference/perfetto-cli.md)].
### Perfetto UI
Navigate to ui.perfetto.dev and select **Record new trace**.
From this page, select and turn on the data sources you want to include in the trace. More detail about the different data sources can be found in the
_Data sources_ section of the docs.
![Record page of the Perfetto UI](/docs/images/record-trace.png)
If you are unsure, start by turning on **Scheduling details** under the **CPU** tab.
Ensure your device is connected and select **Add ADB device**. Once your device has successfully paired (you may need to allow USB debugging on the device), select the **Start Recording** button.
Allow time for the trace to be collected (10s by default) and then you should see the trace appear.
![Perfetto UI with a trace loaded](/docs/images/trace-view.png)
Your trace may look different depending on which data sources you enabled.
### Perfetto cmdline
#### Short syntax
If you are already familiar with `systrace` or `atrace`, there is an equivalent syntax with `perfetto`:
```bash
adb shell perfetto -o mytrace.pftrace -t 20s sched freq idle am wm gfx view
```
#### Full trace config
The short syntax allows to enable only a subset of the data sources; for full
control of the trace config, pass the full trace config in input.
See the [_Trace configuration_ page](/docs/concepts/config.md) and the examples
in each data source doc page for detailed instructions about how to configure
all the various knobs of Perfetto.
If you are running on a Mac or Linux host, or are using a bash-based terminal
on Windows, you can use the following:
WARNING: The below command does not work on Android P because the `--txt` option
was introduced in Q. The binary protobuf format should be used instead; the
details of this can be found on the
[_Trace configuration_ page](https://perfetto.dev/docs/concepts/config#pbtx-vs-binary-format).
```bash
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
duration_ms: 10000
buffers: {
size_kb: 8960
fill_policy: DISCARD
}
buffers: {
size_kb: 1280
fill_policy: DISCARD
}
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "power/suspend_resume"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "ftrace/print"
atrace_categories: "gfx"
atrace_categories: "view"
atrace_categories: "webview"
atrace_categories: "camera"
atrace_categories: "dalvik"
atrace_categories: "power"
}
}
}
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
EOF
```
In all other cases, first push the trace config file and then invoke perfetto:
```bash
adb push config.txt /data/local/tmp/trace_config.txt
adb shell 'perfetto --txt -c - -o /data/misc/perfetto-traces/trace < /data/local/tmp/trace_config.txt'
```
NOTE: because of strict SELinux rules, on versions of older than Android 11
(R) passing directly the file path as `-c /data/local/tmp/config` might fail,
hence the `-c -` + stdin piping above.
Pull the file using `adb pull /data/misc/perfetto-traces/trace ~/trace.pftrace`
and upload to the [Perfetto UI](https://ui.perfetto.dev).
The full reference for the `perfetto` cmdline interface can be found
[here](/docs/reference/perfetto-cli.md).
## On-device System Tracing app
Since Android 9 (P) it's possible to collect a trace directly from the device
using the System Tracing app, from Developer Settings.
See https://developer.android.com/topic/performance/tracing/on-device for
instructions.