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.
It is possible to push binaries to, and run on, a remote target over ssh (even when cross-compiling):
CONFIG=ftrace.cfg OUT=out/default SSH_TARGET=user@my-device-host ./tools/tmux
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.
*** aside If the output file is not under /data/misc/perfetto-traces
, tracing will fail due to SELinux.
*** aside For security reasons the trace file is written with 0600 (rw-------) permissions and owned by shell. On rooted (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.
For building the trace UI see the build instructions page. To run the UI using your local build:
$ ui/run-dev-server out/[your_build_dir]
To run the documentation server using your local build:
$ make -C docs test
You might need to install docsify
and docsify-cli
($ npm i -g docsify docsify-cli
) before running the documentation server.