[toc]
一、四种运用办法
- 命令行办法
- 1、运用 /external/perfetto/tools/record_android_trace 自动化脚本
- 需求装置python,下载python脚本东西 record_android_trace
- 2、直接运用手机上的命令行客户端东西 /system/bin/perfetto
- 1、运用 /external/perfetto/tools/record_android_trace 自动化脚本
- UI东西
- 3、通过ui.perfetto.dev/ 中的”录制“页面
- 自测在 window 不管用
- 大概由于需求根据 bash 的命令行东西
- 4、运用手机上的 ”体系盯梢“,在开发者选项里面
- 关于大部分人满足运用了,可是关于搞功能的还是运用命令行更灵敏。
- 3、通过ui.perfetto.dev/ 中的”录制“页面
二、引荐的运用办法:命令行客户端 /system/bin/perfetto
-
命令行客户端有两种形式:
-
轻量形式
- 运用 atrace 和 ftrace 作为数据来历。类似于 systrace 接口
-
通用形式
- 从协议缓冲区获取其装备,并且可以让您运用 atrace 和 ftrace 之外的数据源
-
注:本篇文章介绍的运用过程运用 通用形式,运用window体系的cmd命令行。
注:ui.perfetto.dev/#!/record/i… 给的命令是根据 bash 的命令,并不能在window cmd命令行上直接履行。
注:以下运用过程是在Android 12 体系上。Android 11 以及以下不可以。
三、运用过程
1、履行以下命令。这时候命令行窗口会处于等候输入状况
cat <<EOF > /data/misc/perfetto-configs/config && perfetto --txt -o /data/misc/perfetto-traces/trace -c /data/misc/perfetto-configs/config
<<EOF 表示 EOF 作为输入流的结束符
2、在 ui.perfetto.dev/#!/record 挑选trace的装备信息
- 在 Probes项下,挑选 CPU、GPU、power、Memory、Android apps & svcs 这些项中的内容,按需挑选。可以无脑全选。
- 点击 Recording command ,仿制小窗口中 <<EOF 之后的信息 到手机等候输入的shell窗口,回车结束输入后开始抓trace。
或许疏忽第一步,简单点,直接仿制以下内容到手机shell中,回车就可以抓trace了。只不过用的是我装备的这个数据源。
cat <<EOF > /data/misc/perfetto-configs/config && perfetto --txt -o /data/misc/perfetto-traces/trace -c /data/misc/perfetto-configs/config
buffers: {
size_kb: 63488
fill_policy: DISCARD
}
buffers: {
size_kb: 2048
fill_policy: DISCARD
}
data_sources: {
config {
name: "android.gpu.memory"
}
}
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
proc_stats_poll_ms: 1000
}
}
}
data_sources: {
config {
name: "android.log"
android_log_config {
}
}
}
data_sources: {
config {
name: "android.surfaceflinger.frametimeline"
}
}
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
meminfo_period_ms: 1000
vmstat_period_ms: 1000
stat_period_ms: 1000
stat_counters: STAT_CPU_TIMES
stat_counters: STAT_FORK_COUNT
}
}
}
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: "gpu_mem/gpu_mem_total"
ftrace_events: "raw_syscalls/sys_enter"
ftrace_events: "raw_syscalls/sys_exit"
ftrace_events: "mm_event/mm_event_record"
ftrace_events: "kmem/rss_stat"
ftrace_events: "ion/ion_stat"
ftrace_events: "dmabuf_heap/dma_heap_stat"
ftrace_events: "kmem/ion_heap_grow"
ftrace_events: "kmem/ion_heap_shrink"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "lowmemorykiller/lowmemory_kill"
ftrace_events: "oom/oom_score_adj_update"
ftrace_events: "ftrace/print"
atrace_apps: "*"
}
}
}
duration_ms: 15000
EOF
3、pull出trace文件
adb pull /data/misc/perfetto-traces/trace
4、浏览器检查trace
- 打开网站 ui.perfetto.dev/
- 点击左侧 Open trace file 挑选pull出的trace文件
- 等候浏览器加载trace文件,解析完成就可以检查trace了
四、进阶
- 检查 perfetto.dev/docs/refere… 装备信息,自己挑选需求的装备抓trace
- 或许检查 /external/perfetto/protos/perfetto/config/trace_config.proto
五、问题排查
- echo 0 > /sys/kernel/tracing/tracing_on
- 0 敞开,“1” 则抛弃该数据源
- 有其他进程正在获取ftrace。这种状况,咱们需求退出相关进程
- Android 9 (P) and 10 (Q) 非 Pixel 的手机 默许不敞开。Android 12 默许敞开
- 敞开命令:
- adb shell setprop persist.traced.enable 1
- 服务进程是否敞开、 ftrace是否被占用
- traced_probes、traced :运用 ps -el | grep traced 检查是否有这俩进程
- getprop debug.atrace.user_initiated,这个值需求为“空”,或未设置
附:
浏览器检查trace运用的快捷键:
- shift+m 选中区域
- W键放大或许ctrl+滚轮
- Perfetto检查runnable的唤醒办法和systrace不一样
- 点击runnable,看不到是谁唤醒的。需求紧接着点击:running