安卓开机时间/性能优化
开机时间追踪:
https://perfetto.dev/docs/case-studies/android-boot-tracing
然后设置几个属性用于开机启动追踪
setprop persist.debug.atrace.boottrace 1
setprop persist.debug.perfetto.boottrace 1
setprop persist.traced.enable 1
增加追踪项配置到/data/misc/perfetto-configs/boottrace.pbtxt
# https://perfetto.dev/docs/case-studies/android-boot-tracing
#
# /data/misc/perfetto-configs/boottrace.pbtxt
# setprop persist.debug.perfetto.boottrace 1
buffers {
size_kb: 65536
fill_policy: DISCARD
}
buffers {
size_kb: 4096
fill_policy: DISCARD
}
data_sources {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "sched/sched_switch"
ftrace_events: "power/suspend_resume"
ftrace_events: "sched/sched_blocked_reason"
ftrace_events: "sched/sched_wakeup"
ftrace_events: "sched/sched_wakeup_new"
ftrace_events: "sched/sched_waking"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "ftrace/print"
atrace_categories: "adb"
atrace_categories: "aidl"
atrace_categories: "am"
atrace_categories: "audio"
atrace_categories: "binder_driver"
atrace_categories: "binder_lock"
atrace_categories: "bionic"
atrace_categories: "database"
atrace_categories: "gfx"
atrace_categories: "hal"
atrace_categories: "input"
atrace_categories: "pm"
atrace_categories: "power"
atrace_categories: "res"
atrace_categories: "ss"
atrace_categories: "view"
atrace_categories: "wm"
disable_generic_events: true
}
}
}
data_sources {
config {
name: "linux.process_stats"
process_stats_config {
}
}
}
data_sources {
config {
name: "linux.sys_stats"
sys_stats_config {
stat_period_ms: 500
stat_counters: STAT_CPU_TIMES
stat_counters: STAT_FORK_COUNT
cpufreq_period_ms: 500
}
}
}
duration_ms: 30000
打开 https://ui.perfetto.dev/
将安卓目录下的 /data/misc/perfetto-traces/boottrace.perfetto-trace 复制出来导入
加载数据,即可看到整个开机过程的线程资源占用分布:

点开里面分析占用时间较长的进程,
logcat --pid=xxx
查看pid对应日志
结合各部分开机时间统计
https://juejin.cn/post/7345379878240206859
logcat -b events | grep -E "boot_progress|sf_stop_bootanim|wm_boot_animation_done"
发现在boot_progress_pms_ready到boot_progress_ams_ready耗时高达30s,大大影响了安卓开机到桌面的时间。
这个结果和上面trace图表现一致,system_server在堵塞,startService MTKTVINPUT服务过程时长高达24s。
- Pivot Table时长排行

- 火焰图片段

另外,工具不可用的时候,也可以通过logcat -d | grep "SystemService"导入表格来分析日志之间的时间间隔。
接下来就只分析该服务就可以了
logcat分析服务
匹配启动时间较长的日志正则表达式如下(匹配1000ms以上的)
##(匹配10000ms即10s以上的)
took to complete: [1-9][0-9][0-9][0-9][0-9]+ms
Also
--------蓝天上的云_转载请注明出处.

浙公网安备 33010602011771号