Perfetto 快速上手

下面给出一份「从 0 到 1」在真机上使用 Perfetto 的完整流程,涵盖 命令行Web UI 两种主流抓 trace 方式,按需抄作业即可。所有步骤均基于 2025 年最新官方方案,兼容 Android 10+(含 Android 14/15)。


1. 准备阶段(一次搞定)

步骤 操作要点 备注
① 打开 USB 调试 设置 → 关于手机 → 版本号连点 7 次 → 开发者选项 → 打开「USB 调试」 部分品牌还需开「USB 调试(安全设置)」
② 检查 Perfetto 服务 adb shell perfetto --version 能回显版本号即可 Android 11+ 默认已集成;Android 9/10 需执行 adb shell setprop persist.traced.enable 1 重启手机
③ 宿主机安装 adb Windows 可直接下 SDK Platform-Tools 解压到任意 PATH Linux/macOS apt install android-tools-adb

2. 极简命令行抓 trace(30 秒上手)

适合「只想快速抓一次」的场景,无需写配置文件。

bash 复制代码
# 抓 10 s,包含 CPU 调度+图形+ binder 驱动等常用标签
adb shell perfetto -o /data/misc/perfetto-traces/demo.pftrace -t 10s \
  sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

# 拉取到电脑
adb pull /data/misc/perfetto-traces/demo.pftrace .

完成后用浏览器打开 ui.perfetto.devOpen trace file 即可可视化。


3. 高级:自写配置,精准抓取

当需要 指定缓冲区大小、抓取 Native 内存、自定义 ftrace 事件 时,推荐写 .pbtx 文本配置,可重复利用。

3.1 示例配置(保存为 trace.cfg
protobuf 复制代码
duration_ms: 30000          # 30 s
buffers: {
    size_kb: 65536
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
            ftrace_events: "power/suspend_resume"
            atrace_categories: "gfx"
            atrace_categories: "view"
            atrace_apps: "com.example.app"   # 替换成你的包名
        }
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 0
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}
3.2 推入手机并执行
bash 复制代码
# 推送配置
adb push trace.cfg /data/local/tmp/trace.cfg

# 抓取(Android 12+ 可用 -c 直接接文件;老版本需 cat 管道)
adb shell 'cat /data/local/tmp/trace.cfg | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.pftrace'

# 拉取
adb pull /data/misc/perfetto-traces/trace.pftrace .

4. 零配置:WebUI 一键抓取(懒人最爱)

  1. 电脑打开 ui.perfetto.devRecord new trace
  2. AndroidConnect new device(Chrome/Edge 支持 WebUSB)
  3. 在页面上勾选数据源(CPU、Memory、Native Heap 等)→ 点 Start Recording
  4. 操作手机复现场景 → 结束录制,网页自动跳转到分析页。

注意:Firefox 不支持 WebUSB,请用 Chromium 内核浏览器。


5. 分析 trace 的 3 个常用入口

目的 操作
看卡顿 搜索 Choreographer#doFrameDrawFrame → 检查是否超过 16.6 ms
看 Binder 阻塞 搜索 binder_driver → 观察蓝色长条
看内存泄漏 启用 heapprofd → 在 UI 选 Native Heap → 按分配大小排序

Perfetto UI 支持 SQL 查询,按 : 调出输入框即可,例如:

sql 复制代码
select * from slice where name like '%doFrame%' order by dur desc;

6. 常见问题速查

  • 抓不到 trace :确认 adb devices 有设备;Android 9/10 需先开 persist.traced.enable
  • pull 失败 :老机型 /data/misc/perfetto-traces 权限受限,可改用 adb shell cat ... > trace 迂回导出。
  • SELinux 拒绝读取配置 :非 root 机用 cat xxx | perfetto -c - 管道方式即可。

7. 一键脚本模板(可 CI)

把下面保存为 record.shchmod +x 后直接 ./record.sh 30 抓 30 秒:

bash 复制代码
#!/bin/bash
DUR=${1:-10}
OUT="trace_$(date +%Y%m%d_%H%M%S).pftrace"
adb shell perfetto -o /data/misc/perfetto-traces/$OUT -t ${DUR}s \
  sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
adb pull /data/misc/perfetto-traces/$OUT .
echo "done, file: $OUT"

结论

  1. 最快体验 :命令行 adb shell perfetto ... 十秒抓完。
  2. 最灵活 :写 .pbtx 配置,精准控制事件/缓冲区/进程。
  3. 最懒人 :打开 ui.perfetto.dev 点几下鼠标就能抓。

抓到 .pftrace 后,同一网页就能打开分析,无需再装其他工具。祝你调试愉快!

相关推荐
九转苍翎2 小时前
深入解析MySQL(7)——SQL调优
mysql·性能优化
fatiaozhang95272 小时前
创维桌面云终端-创维LB2002-黑盒-国科gk6323-2+8G-短接强刷固件包
android·电视盒子·刷机固件·机顶盒刷机·创维lb2002·创维lb2002-黑盒·创维lb2002-白盒
q***71858 小时前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
IT痴者10 小时前
《PerfettoSQL 的通用查询模板》---Android-trace
android·开发语言·python
游戏开发爱好者810 小时前
iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
android·ios·小程序·https·uni-app·iphone·webview
Kisang.11 小时前
【HarmonyOS】性能优化——组件的封装与复用
华为·性能优化·typescript·harmonyos·鸿蒙
alexhilton12 小时前
Jetpack Compose中的阴影艺术
android·kotlin·android jetpack
百***618715 小时前
Spring的构造注入
android·java·spring
Tom4i16 小时前
Kotlin 中的 inline 和 reified 关键字
android·开发语言·kotlin