Android 16 Perfetto pbtxt 完整配置大全 + 版本差异化深度详解
一、前置核心说明
1. pbtxt 基础规则
- 全称:Protocol Buffer Text Format,Perfetto 可读文本配置文件,替代超长命令行参数,Android 10+全量支持,Android 16 对内核ftrace、后台冻结、PSI压力、图形栈、车载HAL埋点做了大量增强。
- 录制固定执行命令(Android16推荐,规避/data权限坑)
bash
# 1. 推送配置到设备公共目录
adb push android16_full.pbtxt /sdcard/Download/
# 2. 执行录制,--txt 声明文本格式,输出到Download
adb shell perfetto -c /sdcard/Download/android16_full.pbtxt --txt -o /sdcard/Download/android16_trace.perfetto-trace
# 3. 打包批量拉取(解决adb pull通配符失效问题)
adb shell tar -czf /data/local/tmp/trace.tar.gz /sdcard/Download/android16_trace.perfetto-trace
adb pull /data/local/tmp/trace.tar.gz D:\hicar\perfetto\
adb shell rm /data/local/tmp/trace.tar.gz
2. Android 16 Perfetto 关键新增特性(直接体现在pbtxt配置)
freezer后台应用冻结/解冻完整埋点:新增atrace分类,精准追踪App被系统挂起、解冻、进程冻结导致卡顿、后台被杀;- 内核PSI压力指标增强 :
linux.sys_stats对CPU/Memory/IO压力采样精度提升,可定位系统负载瓶颈; - Ftrace新增内存回收、Cgroup、进程OOM adj更新细粒度事件;
- 图形栈升级 :
frame_timeline新增HWC硬件合成、SurfaceFlinger事务、HDR图层渲染追踪; - heapprofd Native栈回溯优化:支持匿名mmap内存、so库泄漏完整符号解析,车载车机Native内存排查更精准;
- 独占录制会话
exclusive_prio:避免多进程同时抓trace互相干扰,工程机长期调试必备; - 车载HAL补齐atrace标签 :
hal分类新增Audio/Display/Camera/Vehicle HAL调用耗时埋点(HiCar车机调试核心)。
二、Android16 完整版全量可直接使用 pbtxt 配置
文件名:android16_perfetto_all_in_one.pbtxt
protobuf
# ===================== 【顶层全局通用配置】Android16最优参数 =====================
# 双缓冲区隔离:高速内核事件放buffer0,大体积堆采样放buffer1,防止日志覆盖
buffers: {
size_kb: 65536 # 64MB 主缓冲区:ftrace、atrace、调度、Binder事件
fill_policy: RING_BUFFER# 环形缓冲区,长录制自动覆盖旧数据(必选)
}
buffers: {
size_kb: 32768 # 32MB 次缓冲区:heapprofd、hprof大体积内存快照
fill_policy: RING_BUFFER
}
duration_ms: 30000 # 录制时长30秒,设为0=手动kill终止录制
compression_type: COMPRESSION_TYPE_DEFLATE # gzip压缩,减小trace文件体积
max_file_size_bytes: 1073741824 # 单文件最大1GB,防止溢出
flush_period_ms: 5000 # 每5秒落盘一次,避免断电丢失
exclusive_prio: 10 # Android16新增:独占录制,抢占其他低优先级trace会话
# ==============================================================================
# 数据源1:linux.ftrace 内核层(卡顿、ANR、Binder死锁、内存OOM最核心)
# Android16新增vmscan、freezer进程状态、thermal温控细分事件
# ==============================================================================
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 0
ftrace_config {
# 1. CPU线程调度(主线程阻塞、抢占、休眠唤醒、ANR根因)
ftrace_events: "sched/sched_switch"
ftrace_events: "sched/sched_waking"
ftrace_events: "sched/wakeup"
ftrace_events: "sched/sched_blocked_reason"
ftrace_events: "sched/sched_process_fork"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_wait"
# 2. Binder IPC跨进程通信(HiCar多进程卡死、Binder调用超时、锁竞争)
ftrace_events: "binder/binder_transaction"
ftrace_events: "binder/binder_transaction_received"
ftrace_events: "binder/binder_lock"
ftrace_events: "binder/binder_unlock"
ftrace_events: "binder/binder_return"
# 3. 功耗/CPU调频/温控(Android16新增thermal温度阈值事件,发热降频卡顿)
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "thermal/thermal_temperature"
ftrace_events: "cpufreq/cpufreq_set_rate"
# 4. Android16重点增强:内存回收、OOM、后台冻结杀进程
ftrace_events: "vmscan/mm_vmscan_direct_reclaim_begin"
ftrace_events: "vmscan/mm_vmscan_kswapd_wake"
ftrace_events: "oom/oom_score_adj_update"
ftrace_events: "mm/page_alloc"
ftrace_events: "freezer/freezer_freeze_task"
ftrace_events: "freezer/freezer_thaw_task"
# 5. 锁竞争死锁、磁盘IO阻塞(数据库卡顿、块设备读写耗时)
ftrace_events: "lock/contention"
ftrace_events: "block/block_rq_issue"
ftrace_events: "block/block_rq_complete"
# 内核栈符号解析(Android16建议16层深度,函数调用栈更完整)
symbolize_ksyms: true
kernel_stack_size: 16
buffer_size_kb: 8192
}
}
}
# ==============================================================================
# 数据源2:android.atrace Framework应用层(Android16新增freezer分类)
# UI绘制、页面跳转、GC、车机HAL、后台冻结全埋点
# ==============================================================================
data_sources: {
config {
name: "android.atrace"
target_buffer: 0
atrace_config {
# 系统基础框架必开分类
atrace_categories: "am" # ActivityManager 页面生命周期、广播、启动耗时
atrace_categories: "wm" # WindowManager 窗口动画、横竖屏切换、弹窗
atrace_categories: "view" # View测量/布局/绘制、主线程UI卡顿
atrace_categories: "gfx" # SurfaceFlinger、VSync、帧率掉帧(UI流畅度核心)
atrace_categories: "input" # 触摸事件分发、按键响应延迟
atrace_categories: "res" # 图片解码、资源加载耗时
atrace_categories: "dalvik" # ART GC垃圾回收、JIT编译、内存抖动
atrace_categories: "binder_driver" # Framework层Binder调用耗时
atrace_categories: "app" # App主线程Looper消息队列、Handler阻塞
atrace_categories: "database" # SQLite数据库慢查询
# Android16专属新增分类
atrace_categories: "freezer" # 后台应用冻结/解冻、挂起恢复(Vitals后台限制)
atrace_categories: "standby" # App待机、应用休眠策略触发事件
# 车机HiCar专项必开
atrace_categories: "hal" # Android HAL硬件层:Audio/Display/Camera/Vehicle
atrace_categories: "network" # 网络Socket、请求耗时
atrace_categories: "power" # WakeLock电源锁、亮灭屏、耗电统计
# 抓取范围:*=全部应用;精准排查替换为包名 com.huawei.hicar
atrace_apps: "*"
}
}
}
# ==============================================================================
# 数据源3:linux.sys_stats 系统周期性指标(Android16 PSI压力增强)
# 输出CPU负载、内存曲线、IO压力、内存可用量,Perfetto UI直接看折线图
# ==============================================================================
data_sources: {
config {
name: "linux.sys_stats"
target_buffer: 0
sys_stats_config {
meminfo_period_ms: 500 # 内存每500ms采样
vmstat_period_ms: 500
stat_period_ms: 500 # CPU负载采样
diskstat_period_ms: 1000
pressure_period_ms: 500 # Android16强化:PSI CPU/MEM/IO压力指标,定位系统瓶颈
}
}
}
# ==============================================================================
# 数据源4:android.frame_timeline 帧时序分析(Android16图形栈升级)
# 精准定位掉帧、Jank、VSync延迟、HWC硬件合成分层耗时
# ==============================================================================
data_sources: {
config {
name: "android.frame_timeline"
target_buffer: 0
frame_timeline_config {
package_name: "*"
collect_display_frames: true # Android16新增:采集显示器物理刷新帧
}
}
}
# ==============================================================================
# 数据源5:android.heapprofd Native堆内存采样(Android16栈回溯优化)
# 排查so库泄漏、mmap匿名内存、车机HAL内存暴涨
# ==============================================================================
data_sources: {
config {
name: "android.heapprofd"
target_buffer: 1
heapprofd_config {
process_cmdline: "com.huawei.hicar" # 只抓目标APP,禁止全局*避免设备卡顿
sampling_interval_bytes: 4096 # 4KB采样,平衡精度与性能
dump_at_max: false
block_client: true
enable_anonymous_mmap: true # Android16新增:追踪匿名内存分配
}
}
}
# ==============================================================================
# 数据源6:android.java_hprof Java堆快照(Java内存泄漏、Bitmap未释放OOM)
# ==============================================================================
data_sources: {
config {
name: "android.java_hprof"
target_buffer: 1
java_hprof_config {
process_cmdline: "com.huawei.hicar"
dump_interval_ms: 15000
}
}
}
# ==============================================================================
# 辅助数据源:日志、进程映射、GPU内存、进程快照
# ==============================================================================
# 抓取logcat运行时日志,附带崩溃、Exception报错
data_sources: {
config {
name: "android.logcat"
target_buffer: 0
logcat_config {
dump_while_running: true
min_priority: PRIO_INFO
}
}
}
# PID与APP包名自动映射,不用手动对应进程号
data_sources: {
config {
name: "android.packages_list"
target_buffer: 0
}
}
# GPU显存占用追踪(车机大屏渲染内存溢出)
data_sources: {
config {
name: "android.gpu.memory"
target_buffer: 0
}
}
# 进程全量快照,定时刷新线程/进程列表
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
proc_stats_poll_ms: 1000
}
}
}
三、分模块深度拆解 & 排查场景对应
模块1:ftrace 内核事件(Android16新增项标注)
| 事件分组 | Android16更新点 | 排查问题 |
|---|---|---|
| sched调度 | 完善sched_process_wait等待原因 |
主线程长时间阻塞、线程被抢占、ANR |
| binder | 无变更,保持全量IPC事件 | Binder死锁、跨进程调用超时、HiCar进程卡死 |
| freezer | 新增内核冻结/解冻trace | App被系统后台挂起导致后台断流、卡顿 |
| vmscan/oom | 细化内存回收触发点 | 应用后台被LowMemoryKill杀死、内存溢出 |
| thermal温控 | 新增温度阈值上报 | 设备过热CPU降频,UI帧率暴跌 |
精简原则:日常卡顿只开
sched + binder + power + freezer即可,全开文件体积过大。
模块2:atrace 分类(Android16核心新增)
freezer/standby:Android16后台应用管控核心,排查APP进入冻结后逻辑异常、定时任务失效;hal:车机座舱必备,追踪Audio HAL、Display硬件合成、车载VHAL调用耗时;- 常规高频必开最小集合
protobuf
atrace_categories: "am"
atrace_categories: "wm"
atrace_categories: "view"
atrace_categories: "gfx"
atrace_categories: "app"
atrace_categories: "dalvik"
atrace_categories: "freezer"
模块3:内存排查双数据源(Android16优化点)
- heapprofd :新增
enable_anonymous_mmap追踪匿名内存,解决车机Native匿名内存泄漏无法定位问题;禁止用process_cmdline: "*"全局采样,只指定单个包名; - java_hprof:仅Java堆泄漏、Bitmap内存溢出使用,单次生成文件数百MB,短时间录制。
模块4:frame_timeline 帧分析
Android16新增collect_display_frames: true,可以区分APP绘制耗时 和显示器硬件刷新耗时,精准定位是代码Jank还是SurfaceFlinger/HWC合成本身瓶颈,大屏车机掉帧分析神器。
四、三套开箱即用 Android16 专项精简模板
模板1:UI掉帧/Jank/流畅度专项(最小体积)
protobuf
buffers: {size_kb: 32768 fill_policy: RING_BUFFER}
duration_ms: 15000
exclusive_prio: 5
data_sources: {
config {name: "linux.ftrace" ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "binder/binder_transaction"
}}
}
data_sources: {
config {name: "android.atrace" atrace_config {
atrace_categories: "view"
atrace_categories: "gfx"
atrace_categories: "app"
atrace_categories: "freezer"
atrace_apps: "com.huawei.hicar"
}}
}
data_sources: {config {name: "android.frame_timeline" frame_timeline_config {collect_display_frames: true}}}
data_sources: {config {name: "linux.sys_stats"}}
模板2:内存泄漏专项(Native+Java,HiCar车机)
protobuf
buffers: {size_kb: 32768 fill_policy: RING_BUFFER}
buffers: {size_kb: 16384 fill_policy: RING_BUFFER}
duration_ms: 30000
exclusive_prio: 5
data_sources: {config {name: "linux.sys_stats"}}
data_sources: {
config {name: "android.heapprofd" heapprofd_config {
process_cmdline: "com.huawei.hicar"
sampling_interval_bytes: 4096
enable_anonymous_mmap: true
}}
}
data_sources: {
config {name: "android.java_hprof" java_hprof_config {
process_cmdline: "com.huawei.hicar"
}}
}
模板3:Binder ANR/后台冻结被杀专项
protobuf
buffers: {size_kb: 65536 fill_policy: RING_BUFFER}
duration_ms: 20000
exclusive_prio: 10
data_sources: {
config {name: "linux.ftrace" ftrace_config {
ftrace_events: "sched/*"
ftrace_events: "binder/*"
ftrace_events: "lock/contention"
ftrace_events: "freezer/*"
ftrace_events: "vmscan/*"
}}
}
data_sources: {
config {name: "android.atrace" atrace_config {
atrace_categories: "binder_driver"
atrace_categories: "freezer"
atrace_categories: "am"
}}
}
五、Android16 实操避坑(车机HiCar重点)
exclusive_prio独占录制:量产车机后台常驻trace服务,加此字段避免录制被其他系统trace打断;- 输出路径强制
/sdcard/Download/:/data/misc/perfetto-traces目录adb pull不支持通配符批量拉取,前文已验证; - heapprofd匿名内存开关 :Android16才支持
enable_anonymous_mmap,低版本系统删除该行,否则配置报错; - 长时间录制配置 :超过1分钟录制增加
flush_period_ms:5000定期落盘,防止环形缓冲区数据丢失; - 文件体积控制:全量配置30秒录制约200~500MB,优先按问题选用专项模板,不要每次全量抓取。
六、Trace分析地址
浏览器打开:https://ui.perfetto.dev ,直接拖拽.perfetto-trace文件解析。
如果你需要针对HiCar启动耗时、后台冻结被杀、Native内存泄漏、车机UI掉帧其中某一个问题,我可以直接给你最终定稿单版pbtxt文件。