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 后,同一网页就能打开分析,无需再装其他工具。祝你调试愉快!

相关推荐
stevenzqzq1 小时前
Android Studio Logcat 基础认知
android·ide·android studio·日志
代码不停2 小时前
MySQL事务
android·数据库·mysql
山峰哥2 小时前
数据库工程与SQL调优实战:从原理到案例的深度解析
java·数据库·sql·oracle·性能优化·编辑器
朝花不迟暮2 小时前
使用Android Studio生成apk,卡在Running Gradle task ‘assembleDebug...解决方法
android·ide·android studio
yngsqq2 小时前
使用VS(.NET MAUI)开发第一个安卓APP
android·.net
cn_mengbei2 小时前
鸿蒙原生PC应用开发实战:从零搭建到性能优化,掌握ArkTS与DevEco Studio高效开发技巧
华为·性能优化·harmonyos
Android-Flutter2 小时前
android compose LazyVerticalGrid上下滚动的网格布局 使用
android·kotlin
Android-Flutter2 小时前
android compose LazyHorizontalGrid水平滚动的网格布局 使用
android·kotlin
千里马-horse2 小时前
RK3399E Android 11 将自己的库放到系统库方法
android·so·设置系统库
美狐美颜sdk2 小时前
Android直播美颜SDK:选择指南与开发方案
android·人工智能·计算机视觉·第三方美颜sdk·视频美颜sdk·人脸美型sdk