Since Android 13 (T), perfetto can be configured to automatically start recording traces on boot. This can be useful to profile the boot process.
# One buffer allocated within the central tracing binary for the entire trace, # shared by the two data sources below. buffers { size_kb: 32768 fill_policy: DISCARD } # Ftrace data from the kernel, mainly the process scheduling events. data_sources { config { name: "linux.ftrace" target_buffer: 0 ftrace_config { ftrace_events: "sched_switch" ftrace_events: "sched_waking" ftrace_events: "sched_wakeup_new" ftrace_events: "task_newtask" ftrace_events: "task_rename" ftrace_events: "sched_process_exec" ftrace_events: "sched_process_exit" ftrace_events: "sched_process_fork" ftrace_events: "sched_process_free" ftrace_events: "sched_process_hang" ftrace_events: "sched_process_wait" } } } # Resolve process commandlines and parent/child relationships, to better # interpret the ftrace events, which are in terms of pids. data_sources { config { name: "linux.process_stats" target_buffer: 0 } } # 10s trace, but can be stopped prematurely via `adb shell pkill -u perfetto`. duration_ms: 10000
/data/misc/perfetto-configs/boottrace.pbtxt
:adb push <yourfile> /data/misc/perfetto-configs/boottrace.pbtxt
perfetto_trace_on_boot
service:adb shell setprop persist.debug.perfetto.boottrace 1The property is reset on boot. In order to trace the next boot, the command must be reissued.
/data/misc/perfetto-traces/boottrace.perfetto-trace
. The file will be removed before a new trace is started.adb pull /data/misc/perfetto-traces/boottrace.perfetto-traceN.B.: The file will appear after the recording has stopped (be sure to set
duration_ms
to a reasonable value in the config) or after the first flush_period_ms
.boottrace.perfetto-trace
can now be opened in ui.perfetto.dev