Android Perfetto 系列 15:Boot Trace、长时间现场 Trace 与偶发问题抓取
1 | echo 'activate_triggers: "app_ui_jank"' | \ |
STOP trigger 适合“根因在触发之前”的议题,比如慢帧、ANR 前兆、音频 underrun。START trigger 适合“事件发生后还要继续观察”的状况,比如温度进入 hot 状态后继续抓 10 秒。
使用 START trigger 时,不要再同时配置普通 duration_ms;触发窗口由 trigger_config 管。
trigger 未命中的收尾也要写进工具链。按 TraceConfig 的官方语义,STOP_TRACING 和 START_TRACING 在 trigger_timeout_ms 到期且没有任何 trigger 命中时,session 会被停止且不返回统计结果——输出文件是空的,这是设计行为,不是采集失败。脚本要把这种结果显式记录成 trigger_matched=false 并清理空文件,不要把空 trace 当成“没有发生难题”的证据。反过来,trigger 一旦命中,session 在 stop_delay_ms 后就结束了;要维持长期 flight recorder 覆盖,平台侧要有守护逻辑负责重启下一轮 session,并给每轮生成新的 case id 和输出文件名,避免覆盖上一次现场。
snapshot 适合调参
有些场景不想停止原 Trace,只想每隔几秒拿一张当前窗口的快照,例如调 CPU policy、thermal 参数、电源策略。--clone-by-name 这个命令行入口是 Perfetto v49.0 加入的;session 克隆能力本身也要 Android 14+ 的平台侧支持或厂商合入,最终以 adb shell perfetto --help / --version 为准。
配置里给 session 起名:
1 | unique_session_name: "thermal_snapshot" |
启动后,按需克隆当前 Ring Buffer。原 session 会继续运行:
1 | adb shell perfetto --clone-by-name thermal_snapshot \ |
snapshot 不是问题现场的唯一方案。它适合“反复观察走向”的实验,不适合需要一次性封存事故现场的触发型问题。
detached mode 少用
--detach 会让 tracing session 脱离 perfetto 命令生命周期,由 traced 业务继续持有 session。官方文档明确不推荐常规使用,因为它容易泄漏 session,让设备长时段处在 tracing 状态。
必须用 detached mode 时,配置里要打开 write_into_file,并准备检查和停止命令:
1 | adb shell perfetto --detach=field_session --txt \ |
工程脚本里要有兜底清理:启动前检查旧 session,测试结束后停止 session,超过 TTL 自动停止。
Bugreport 是现场兜底入口
现场问题经常由使用者、测试或运维先触发 bugreport。需要跟 bugreport 合包的长 Trace,要在 TraceConfig 里显式声明:
1 | unique_session_name: "field_ui_jank_bugreport" |
bugreport_score > 0 才会成为 bugreport 候选;分数越高,越优先被保存。bugreport_filename 从 Android 15 / Perfetto v42 起可用于 --save-all-for-bugreport 的可读文件名,旧版本会按默认名字保存。它和普通 -o /path/trace.perfetto-trace、--upload 是不同路径:前者服务兼容 bugreport,后两者服务本次命令输出或 framework reporting。
研发或平台脚本可以用这两条命令验证 bugreport 行为:
1 | adb shell perfetto --save-for-bugreport |
Android 12/13 上,bugreport 保存会取走 trace 资讯并提前停止 session;Android 14 及以上版本会创建只读 snapshot,原 session 可以继续运行。报告里要写清 Android 版本和验证命令输出,不要把 bugreport 合包当成普通后台 trace 的等价路径。
现场证据包里应该有什么
只拿 .perfetto-trace 不够。现场证据包至少要能回答“这是什么场景、什么时候触发、文件是否完整”。
1 | case-20260504-153012/ |
metadata.json 提议包含这些字段:
本文由News整理发布,仅供参考。

