快速上手:从零抓取并分析第一个 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 wmDataSource 列表新手推荐先抓 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 工具类似,但有几个细节我特别想说一下:

  1. 缩放: 鼠标滚轮放大缩小,或者按住 Ctrl + 滚轮。我习惯先概览全局,再放大到感兴趣的区间。
  2. 平移: 按住鼠标左键拖拽。或者用键盘 ← → 逐帧移动。
  3. 选区: 在时间轴上按住 Shift + 鼠标左键拖拽,可以选中一个时间范围。然后右键点击选区,选择「Slice this selection」可以只显示这个区域。
  4. 标记: 在时间轴顶部双击,可以添加一个黄色标记。我在分析启动耗时的时候,经常在「开机完成」时间点打标记,方便对比。

避坑指南: 我曾经不小心把视图缩放到几微秒级别,结果整个 UI 卡死。后来学乖了 —— 先用 Ctrl + 0 重置缩放,再重新定位。

实战:抓取 10 秒系统 Wide Trace

讲个实际场景。有一次我排查手机滑动卡顿,想知道是不是某个后台线程抢了 CPU。操作步骤如下:

  1. 连上手机,打开要测试的 App,滑动到可能卡顿的页面
  2. 执行命令:
    adb shell perfetto \
      -o /data/misc/perfetto-traces/slide_test.perfetto-trace \
      -t 10s \
      sched freq idle gpu freq
  3. 迅速在手机上开始滑动操作(10 秒足够模拟一次典型的卡顿场景)
  4. 命令执行完毕后,拉取文件,拖入 UI
  5. 在 UI 里找到滑动那几秒,放大看 CPU 调度情况

你看,整个过程不超过 2 分钟。接下来你就能看到每个 CPU 核心在干什么、哪个线程占用了多长时间、是否有频繁的上下文切换。

知识体系:命令行 + UI 的完整流程

Perfetto 命令行抓取 → UI 分析流程 命令行阶段 UI 阶段 ① 选择 Datasource sched, freq, idle, gpu... ② adb shell perfetto -t 10s -o /data/.../.perfetto-trace ③ adb pull 到电脑 adb pull /data/.../xxx . 拖入 ④ 打开 UI ui.perfetto.dev 拖入文件 ⑤ 时间轴与轨道 缩放、平移、选区 ⑥ 分析瓶颈 详情面板 + 统计 小提示:首次使用建议抓取 10s 的 sched+freq+idle 即可,文件约 50~200MB 别贪多,先跑通流程再扩展 DataSource

你想想看,整个流程其实就是「选数据 → 抓 → 拉 → 拖 → 看」。我刚开始接触时也担心记不住参数,后来发现只要记 -o -t 和 sched freq idle 三个东西就够了。其他的用到再查。

一句话记住: adb shell perfetto -o /data/.../xxx -t 10s sched freq idle – 搞定 80% 的日常性能分析。