1*6dbdd20aSAndroid Build Coastguard Worker# PERFETTO(1) 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard Worker## NAME 4*6dbdd20aSAndroid Build Coastguard Worker 5*6dbdd20aSAndroid Build Coastguard Workerperfetto - capture traces 6*6dbdd20aSAndroid Build Coastguard Worker 7*6dbdd20aSAndroid Build Coastguard Worker## DESCRIPTION 8*6dbdd20aSAndroid Build Coastguard Worker 9*6dbdd20aSAndroid Build Coastguard WorkerThis section describes how to use the `perfetto` commandline binary to capture 10*6dbdd20aSAndroid Build Coastguard Workertraces. Examples are given in terms of an Android device connected over ADB. 11*6dbdd20aSAndroid Build Coastguard Worker 12*6dbdd20aSAndroid Build Coastguard Worker`perfetto` has two modes for configuring the tracing session (i.e. what and how 13*6dbdd20aSAndroid Build Coastguard Workerto collect): 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Worker__lightweight mode__ 16*6dbdd20aSAndroid Build Coastguard Worker: all config options are supplied as commandline flags, 17*6dbdd20aSAndroid Build Coastguard Worker but the available data sources are restricted to ftrace and atrace. This mode 18*6dbdd20aSAndroid Build Coastguard Worker is similar to 19*6dbdd20aSAndroid Build Coastguard Worker [`systrace`](https://developer.android.com/topic/performance/tracing/command-line). 20*6dbdd20aSAndroid Build Coastguard Worker 21*6dbdd20aSAndroid Build Coastguard Worker__normal mode__ 22*6dbdd20aSAndroid Build Coastguard Worker: the configuration is specified in a protocol buffer. This allows for full 23*6dbdd20aSAndroid Build Coastguard Worker customisation of collected traces. 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Worker## GENERAL OPTIONS 27*6dbdd20aSAndroid Build Coastguard Worker 28*6dbdd20aSAndroid Build Coastguard WorkerThe following table lists the available options when using `perfetto` in either 29*6dbdd20aSAndroid Build Coastguard Workermode. 30*6dbdd20aSAndroid Build Coastguard Worker 31*6dbdd20aSAndroid Build Coastguard Worker`-d`, `--background` 32*6dbdd20aSAndroid Build Coastguard Worker: Perfetto immediately exits the command-line interface and continues 33*6dbdd20aSAndroid Build Coastguard Worker recording your trace in background. 34*6dbdd20aSAndroid Build Coastguard Worker 35*6dbdd20aSAndroid Build Coastguard Worker`-o`, `--out` _OUT_FILE_ 36*6dbdd20aSAndroid Build Coastguard Worker: Specifies the desired path to the output trace file, or `-` for stdout. 37*6dbdd20aSAndroid Build Coastguard Worker `perfetto` writes the output to the file described in the flags above. 38*6dbdd20aSAndroid Build Coastguard Worker The output format compiles with the format defined in 39*6dbdd20aSAndroid Build Coastguard Worker [AOSP `trace.proto`](/protos/perfetto/trace/trace.proto). 40*6dbdd20aSAndroid Build Coastguard Worker 41*6dbdd20aSAndroid Build Coastguard Worker`--dropbox` _TAG_ 42*6dbdd20aSAndroid Build Coastguard Worker: Uploads your trace via the 43*6dbdd20aSAndroid Build Coastguard Worker [DropBoxManager API](https://developer.android.com/reference/android/os/DropBoxManager.html) 44*6dbdd20aSAndroid Build Coastguard Worker using the tag you specify. Android only. 45*6dbdd20aSAndroid Build Coastguard Worker 46*6dbdd20aSAndroid Build Coastguard Worker`--no-guardrails` 47*6dbdd20aSAndroid Build Coastguard Worker: Disables protections against excessive resource usage when enabling the 48*6dbdd20aSAndroid Build Coastguard Worker `--dropbox` flag during testing. 49*6dbdd20aSAndroid Build Coastguard Worker 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard Worker`--reset-guardrails` 52*6dbdd20aSAndroid Build Coastguard Worker: Resets the persistent state of the guardrails and exits (for testing). 53*6dbdd20aSAndroid Build Coastguard Worker 54*6dbdd20aSAndroid Build Coastguard Worker`--query` 55*6dbdd20aSAndroid Build Coastguard Worker: Queries the service state and prints it as human-readable text. 56*6dbdd20aSAndroid Build Coastguard Worker 57*6dbdd20aSAndroid Build Coastguard Worker`--query-raw` 58*6dbdd20aSAndroid Build Coastguard Worker: Similar to `--query`, but prints raw proto-encoded bytes of 59*6dbdd20aSAndroid Build Coastguard Worker `tracing_service_state.proto`. 60*6dbdd20aSAndroid Build Coastguard Worker 61*6dbdd20aSAndroid Build Coastguard Worker`-h`, `--help` 62*6dbdd20aSAndroid Build Coastguard Worker: Prints out help text for the `perfetto` tool. 63*6dbdd20aSAndroid Build Coastguard Worker 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard Worker## SIMPLE MODE 66*6dbdd20aSAndroid Build Coastguard Worker 67*6dbdd20aSAndroid Build Coastguard WorkerFor ease of use, the `perfetto` command includes support for a subset of 68*6dbdd20aSAndroid Build Coastguard Workerconfigurations via command line arguments. On-device, these 69*6dbdd20aSAndroid Build Coastguard Workerconfigurations behave equivalently to the same configurations provided 70*6dbdd20aSAndroid Build Coastguard Workerby a *CONFIG_FILE* (see below). 71*6dbdd20aSAndroid Build Coastguard Worker 72*6dbdd20aSAndroid Build Coastguard WorkerThe general syntax for using `perfetto` in *simple mode* is as follows: 73*6dbdd20aSAndroid Build Coastguard Worker 74*6dbdd20aSAndroid Build Coastguard Worker``` 75*6dbdd20aSAndroid Build Coastguard Worker adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ] 76*6dbdd20aSAndroid Build Coastguard Worker [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME]... 77*6dbdd20aSAndroid Build Coastguard Worker``` 78*6dbdd20aSAndroid Build Coastguard Worker 79*6dbdd20aSAndroid Build Coastguard Worker 80*6dbdd20aSAndroid Build Coastguard WorkerThe following table lists the available options when using `perfetto` in 81*6dbdd20aSAndroid Build Coastguard Worker*simple mode*. 82*6dbdd20aSAndroid Build Coastguard Worker 83*6dbdd20aSAndroid Build Coastguard Worker`-t`, `--time` _TIME[s|m|h]_ 84*6dbdd20aSAndroid Build Coastguard Worker: Specifies the trace duration in seconds, minutes, or hours. 85*6dbdd20aSAndroid Build Coastguard Worker For example, `--time 1m` specifies a trace duration of 1 minute. 86*6dbdd20aSAndroid Build Coastguard Worker The default duration is 10 seconds. 87*6dbdd20aSAndroid Build Coastguard Worker 88*6dbdd20aSAndroid Build Coastguard Worker`-b`, `--buffer` _SIZE[mb|gb]_ 89*6dbdd20aSAndroid Build Coastguard Worker: Specifies the ring buffer size in megabytes (mb) or gigabytes (gb). 90*6dbdd20aSAndroid Build Coastguard Worker The default parameter is `--buffer 32mb`. 91*6dbdd20aSAndroid Build Coastguard Worker 92*6dbdd20aSAndroid Build Coastguard Worker`-s`, `--size` _SIZE[mb|gb]_ 93*6dbdd20aSAndroid Build Coastguard Worker: Specifies the max file size in megabytes (mb) or gigabytes (gb). 94*6dbdd20aSAndroid Build Coastguard Worker By default `perfetto` uses only in-memory ring-buffer. 95*6dbdd20aSAndroid Build Coastguard Worker 96*6dbdd20aSAndroid Build Coastguard Worker 97*6dbdd20aSAndroid Build Coastguard WorkerThis is followed by a list of event specifiers: 98*6dbdd20aSAndroid Build Coastguard Worker 99*6dbdd20aSAndroid Build Coastguard Worker`ATRACE_CAT` 100*6dbdd20aSAndroid Build Coastguard Worker: Specifies the atrace categories you want to record a trace for. 101*6dbdd20aSAndroid Build Coastguard Worker For example, the following command traces Window Manager using atrace: 102*6dbdd20aSAndroid Build Coastguard Worker `adb shell perfetto --out FILE wm`. To record other categories, see the 103*6dbdd20aSAndroid Build Coastguard Worker [list of atrace categories](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/native/cmds/atrace/atrace.cpp). 104*6dbdd20aSAndroid Build Coastguard Worker Note: Available categories are Android version dependent. 105*6dbdd20aSAndroid Build Coastguard Worker 106*6dbdd20aSAndroid Build Coastguard Worker`FTRACE_GROUP/FTRACE_NAME` 107*6dbdd20aSAndroid Build Coastguard Worker: Specifies the ftrace events you want to record a trace for. 108*6dbdd20aSAndroid Build Coastguard Worker For example, the following command traces sched/sched_switch events: 109*6dbdd20aSAndroid Build Coastguard Worker `adb shell perfetto --out FILE sched/sched_switch` 110*6dbdd20aSAndroid Build Coastguard Worker 111*6dbdd20aSAndroid Build Coastguard Worker 112*6dbdd20aSAndroid Build Coastguard Worker## NORMAL MODE 113*6dbdd20aSAndroid Build Coastguard Worker 114*6dbdd20aSAndroid Build Coastguard WorkerThe general syntax for using `perfetto` in *normal mode* is as follows: 115*6dbdd20aSAndroid Build Coastguard Worker 116*6dbdd20aSAndroid Build Coastguard Worker``` 117*6dbdd20aSAndroid Build Coastguard Worker adb shell perfetto [ --txt ] --config CONFIG_FILE 118*6dbdd20aSAndroid Build Coastguard Worker``` 119*6dbdd20aSAndroid Build Coastguard Worker 120*6dbdd20aSAndroid Build Coastguard WorkerThe following table lists the available options when using `perfetto` in 121*6dbdd20aSAndroid Build Coastguard Worker*normal* mode. 122*6dbdd20aSAndroid Build Coastguard Worker 123*6dbdd20aSAndroid Build Coastguard Worker`-c`, `--config` _CONFIG_FILE_ 124*6dbdd20aSAndroid Build Coastguard Worker: Specifies the path to a configuration file. In normal mode, some 125*6dbdd20aSAndroid Build Coastguard Worker configurations may be encoded in a configuration protocol buffer. 126*6dbdd20aSAndroid Build Coastguard Worker This file must comply with the protocol buffer schema defined in AOSP 127*6dbdd20aSAndroid Build Coastguard Worker [`trace_config.proto`](/protos/perfetto/config/trace_config.proto). 128*6dbdd20aSAndroid Build Coastguard Worker You select and configure the data sources using the DataSourceConfig member 129*6dbdd20aSAndroid Build Coastguard Worker of the TraceConfig, as defined in AOSP 130*6dbdd20aSAndroid Build Coastguard Worker [`data_source_config.proto`](/protos/perfetto/config/data_source_config.proto). 131*6dbdd20aSAndroid Build Coastguard Worker 132*6dbdd20aSAndroid Build Coastguard Worker`--txt` 133*6dbdd20aSAndroid Build Coastguard Worker: Instructs `perfetto` to parse the config file as pbtxt. This flag is 134*6dbdd20aSAndroid Build Coastguard Worker experimental, and it's not recommended that you enable it for production. 135