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.dev → Open 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.dev → Record new trace
  2. 选 Android → Connect new device(Chrome/Edge 支持 WebUSB)
  3. 在页面上勾选数据源(CPU、Memory、Native Heap 等)→ 点 Start Recording
  4. 操作手机复现场景 → 结束录制,网页自动跳转到分析页。

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


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

目的 操作
看卡顿 搜索 Choreographer#doFrame 或 DrawFrame → 检查是否超过 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.sh,chmod +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 后,同一网页就能打开分析,无需再装其他工具。祝你调试愉快!

相关推荐
the3clipse33 分钟前
视频编码技术如何赋能游戏性能优化:从硬件隔离到AI驱动的带宽革命
游戏·性能优化·音视频·视频编码·硬件加速·ai编码·自适应编码
余槐i35 分钟前
将AI Agent嵌入现有Java系统时,Spring Boot 3.2的异步冲突与内存泄漏排查
人工智能·spring boot·性能优化·kubernetes·ai agent
157092511341 小时前
Android 架构模式详解:从 MVC、MVP 到 MVVM
android·架构·mvc
艺杯羹1 小时前
240GB流量击穿与频繁OOM:从云端瘫痪到客户端自治的本地优先架构重构实录
性能优化·系统架构·fastapi·桌面客户端·本地优先
天天喝旺仔2 小时前
浏览器渲染原理:从解析 HTML/CSS、构建渲染树到重排重绘与首屏优化
前端·javascript·css·性能优化·html
aaajj2 小时前
Android手机连接鼠标情况
android
其实防守也摸鱼2 小时前
SQL注入实验笔记
android·运维·数据库·安全·oracle·自动化
找茬小王子3 小时前
Android原生Monkey工具的使用
android·monkey
Code Man3 小时前
实现 Android 字符设备驱动
android·驱动开发·lineageos