快速上手:从零抓取并分析第一个 Trace
说实话,很多人被 Perfetto 劝退,就是因为第一步 —— 命令行抓取。看着一堆参数就头皮发麻。别怕,我带你走一遍,你会发现其实特简单。
我个人习惯先把工具链准备好,然后一条命令搞定 trace,最后丢到 UI 里看。这一套流程走下来,你就能感受到 Perfetto 的威力了。
准备工作:安装与配置
Perfetto 是 Android 系统自带的,你只需要一台开启了「开发者选项」和「USB 调试」的手机或模拟器。电脑端需要下载 perfetto 命令行工具包:
# 下载预编译的二进制
wget https://storage.googleapis.com/perfetto/mirror/.../tracebox
chmod +x tracebox
# 或者用 Android SDK 里的 platform-tools(已经内置 perfetto)
adb shell perfetto --version
小技巧: 我建议直接用
adb shell perfetto,省去推送二进制文件的麻烦。Android 10 以上系统都自带。
抓取 trace:一条命令搞定
核心命令长这样:
adb shell perfetto \
-o /data/misc/perfetto-traces/test_trace.perfetto-trace \
-t 10s \
sched freq idle am wm
解释几个关键参数:
| 参数 | 含义 | 我踩过的坑 |
|---|---|---|
-o | 输出路径 | 必须放在 /data/misc/perfetto-traces/ 下,否则没权限 |
-t 10s | 抓取时长 | 别超过 30 秒,否则文件太大,UI 加载会卡 |
sched freq idle am wm | DataSource 列表 | 新手推荐先抓 sched freq idle 就够了 |
重要提醒: 抓取过程中不要拔线!我曾经在抓取中途断开 USB,trace 文件损坏,白忙一场。
抓完后把 trace 拉到电脑上:
adb pull /data/misc/perfetto-traces/test_trace.perfetto-trace ./
使用 UI 查看 trace
打开浏览器,访问 ui.perfetto.dev(注意,是 .dev 不是 .com)。然后直接把刚才的 trace 文件拖进去。嗯,就是这么简单。
UI 加载后你会看到三个主要区域:
- 顶部时间轴: 显示全局时间线,可以拖拽选择范围
- 中间轨道区: 每一行是一个 CPU / 进程/ 线程,显示时间片
- 底部详情面板: 点击任意片段,这里会显示详细信息
基本操作:缩放、平移、选区、标记
这些操作和大部分 timeline 工具类似,但有几个细节我特别想说一下:
- 缩放: 鼠标滚轮放大缩小,或者按住 Ctrl + 滚轮。我习惯先概览全局,再放大到感兴趣的区间。
- 平移: 按住鼠标左键拖拽。或者用键盘 ← → 逐帧移动。
- 选区: 在时间轴上按住 Shift + 鼠标左键拖拽,可以选中一个时间范围。然后右键点击选区,选择「Slice this selection」可以只显示这个区域。
- 标记: 在时间轴顶部双击,可以添加一个黄色标记。我在分析启动耗时的时候,经常在「开机完成」时间点打标记,方便对比。
避坑指南: 我曾经不小心把视图缩放到几微秒级别,结果整个 UI 卡死。后来学乖了 —— 先用 Ctrl + 0 重置缩放,再重新定位。
实战:抓取 10 秒系统 Wide Trace
讲个实际场景。有一次我排查手机滑动卡顿,想知道是不是某个后台线程抢了 CPU。操作步骤如下:
- 连上手机,打开要测试的 App,滑动到可能卡顿的页面
- 执行命令:
adb shell perfetto \ -o /data/misc/perfetto-traces/slide_test.perfetto-trace \ -t 10s \ sched freq idle gpu freq - 迅速在手机上开始滑动操作(10 秒足够模拟一次典型的卡顿场景)
- 命令执行完毕后,拉取文件,拖入 UI
- 在 UI 里找到滑动那几秒,放大看 CPU 调度情况
你看,整个过程不超过 2 分钟。接下来你就能看到每个 CPU 核心在干什么、哪个线程占用了多长时间、是否有频繁的上下文切换。
知识体系:命令行 + UI 的完整流程
你想想看,整个流程其实就是「选数据 → 抓 → 拉 → 拖 → 看」。我刚开始接触时也担心记不住参数,后来发现只要记 -o -t 和 sched freq idle 三个东西就够了。其他的用到再查。
一句话记住: adb shell perfetto -o /data/.../xxx -t 10s sched freq idle – 搞定 80% 的日常性能分析。