# Recording traces on Android boot Since Android 13 (T), perfetto can be configured to automatically start recording traces on boot. This can be useful to profile the boot process. ## Steps * Create a file with the desired [trace configuration](/docs/concepts/config.md) in Text format (not binary). Example (more in [/test/configs/](/test/configs/)): ``` # 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 ``` * Put the file on the device at `/data/misc/perfetto-configs/boottrace.pbtxt`: ``` adb push /data/misc/perfetto-configs/boottrace.pbtxt ``` * Enable the `perfetto_trace_on_boot` service: ``` adb shell setprop persist.debug.perfetto.boottrace 1 ``` The property is reset on boot. In order to trace the next boot, the command must be reissued. * Reboot the device. * The output trace will be written at `/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-trace ``` **N.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](https://ui.perfetto.dev/) ## Implementation details * The trace will start only after persistent properties are loaded, which happens after /data has been mounted. * The command to start the trace is implemented as oneshot init service.