In order to run Perfetto and get a meaningful trace you need to build (see build instructions) and run the following:
traced
:
The unprivileged trace daemon that owns the log buffers and maintains a registry of Producers and Consumers connected.
traced_probes
:
The privileged daemon that has access to the Kernel tracefs (typically mounted under /sys/kernel/debug/tracing
). It drives Ftrace and writes its protobuf-translated contents into traced
.
perfetto
:
A command line utility client that drive the trace and save back the results (either to a file or to Android's Dropbox)
A convenience script allows to run Perfetto daemons (traced
, traced_probes
) and the command line client (perfetto
) in a tmux-based terminal:
CONFIG=ftrace.cfg OUT=out/default ./tools/tmux
The script will automatically serialize the trace config defined in the CONFIG
variable (e.g., this) into a protobuf and setup the right paths. Furthermore it will automatically rebuild if necessary.
Make sure that Perfetto daemons (traced
/ traced_probes
) are running. They are enabled by default on Pixel and Pixel 2 (walleye, taimen, marlin, sailfish). On other devices start them manually by doing:
adb shell setprop persist.traced.enable 1
If this works you will see something like this in the logs:
$ adb logcat -s perfetto perfetto: service.cc:45 Started traced, listening on /dev/socket/traced_producer /dev/socket/traced_consumer perfetto: probes.cc:25 Starting /system/bin/traced_probes service perfetto: probes_producer.cc:32 Connected to the service
At which point you can grab a trace by doing:
$ adb shell perfetto --config :test --out /data/misc/perfetto-traces/trace
For more advanced configurations see the Trace Config section.
/data/misc/perfetto-traces
, tracing will fail due to SELinux.userbuild
) devices it is possible to just adb pull
the file after adb root
. On user
devices instead, in order to get the trace out of the device, do the following: adb shell cat /data/misc/perfetto-traces/trace > ~/trace
--config :test
uses a hard-coded test trace config. It is possible to pass an arbitrary trace config. See instructions in the trace config page.