1. Perfetto简介
Perfetto 是一个用于 Android 系统的性能跟踪工具,可以帮助开发者分析系统性能和调试问题。
Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。
在低于Android R的版本上面默认是关闭的,需要先执行命令打开:
adb shell setprop persist.traced.enable 1
对比Systrace 有很多优点:
进程名称显示完整
Binder跨进程点击跳转,跟踪方便,不需要类似systrace一样跟踪Binder跳转时需要挨个查看线程号
支持置顶你感兴趣的线程,放在一起分析更容易
看线程被谁唤醒非常方便
可以同时跟踪内存/电压/event log等信息
2. 抓取方式
perfetto 命令包含以下两种模式:
轻量模式:只能选择一部分数据源,具体来说就是 atrace 和 ftrace。但此模式可提供类似于 systrace 的接口。
普通模式:从协议缓冲区获取其配置,并且可以让您使用 atrace 和 ftrace 之外的数据源,从而更加充分地利用 perfetto 的功能。
2.1 轻量模式
在轻量模式下使用 perfetto 的一般语法如下:
adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ] [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]…
抓取:
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view
取出文件:
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
参考链接:
抓取Systrace方法汇总
2.2 普通模式
在普通模式下使用 perfetto 的一般语法如下:
adb shell perfetto [ --txt ] --config CONFIG_FILE
选项 | 说明 |
---|---|
- -config CONFIG_FILE 或 -c CONFIG_FILE | 指定配置文件的路径。 |
- -txt | 指示 perfetto 将配置文件解析为 pbtxt。此标记为实验性标记,不建议您在正式版中启用此标记。 |
执行命令
adb push perfetto–config.pbtx /data/misc/perfetto-traces/
adb shell perfetto --txt --config /data/misc/perfetto-traces/perfetto_config.pbtx --out /data/misc/perfetto-traces/1.perfetto-trace
adb pull /data/misc/perfetto-traces/1.perfetto-trace
配置文件:perfetto_config.pbtx
buffers: {
size_kb: 522240
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 2048
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
data_sources: {
config {
name: "android.log"
android_log_config {
}
}
}
data_sources: {
config {
name: "android.surfaceflinger.frametimeline"
}
}
data_sources: {
config {
name: "android.game_interventions"
}
}
data_sources: {
config {
name: "android.packages_list"
}
}
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "power/suspend_resume"
ftrace_events: "sched/sched_wakeup"
ftrace_events: "sched/sched_wakeup_new"
ftrace_events: "sched/sched_waking"
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/gpu_frequency"
ftrace_events: "raw_syscalls/sys_enter"
ftrace_events: "raw_syscalls/sys_exit"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "ftrace/print"
atrace_categories: "gfx"
atrace_categories: "input"
atrace_categories: "view"
atrace_categories: "wm"
atrace_categories: "am"
atrace_categories: "hal"
atrace_categories: "res"
atrace_categories: "dalvik"
atrace_categories: "bionic"
atrace_categories: "pm"
atrace_categories: "ss"
atrace_categories: "database"
atrace_categories: "aidl"
atrace_categories: "binder_driver"
atrace_categories: "binder_lock"
atrace_categories: "sched"
atrace_categories: "freq"
atrace_apps: "*"
}
}
}
duration_ms: 10000
write_into_file: true
file_write_period_ms: 2500
max_file_size_bytes: 256000000
flush_period_ms: 30000
incremental_state_config {
clear_period_ms: 5000
}
3. 打开Trace文件
打开网站:
https://ui.perfetto.dev/
将trace文件拖入即可