Android Perfetto学习
Perfetto 是一个现代化的平台级跟踪工具,为Android、Linux和Chrome平台提供了一种通用的性能检测和跟踪分析工具集。它不仅用于获取和解析 Systrace 数据,还能提供更多的功能和灵活性,调试分析更方便快捷。

抓取trace
adb shell perfetto直接抓取
最简单的是使用adb shell perfetto去抓取
1、手机打开开发者模式链接电脑,打开cmd,输入下面的adb命令
1 | |
参数解释:
-o /data/misc/perfetto-traces/trace_file.perfetto-trace:
- 作用: 指定跟踪文件的输出路径和文件名。
- 用法: 这个选项告诉 Perfetto 将跟踪数据保存到
/data/misc/perfetto-traces/目录下的trace_file.perfetto-trace文件中。请确保该目录存在并且有写权限。
-t 20s:
- 作用: 设置跟踪的持续时间。
- 用法:
-t选项后跟一个时间字符串(如20s表示 20 秒),指定 Perfetto 应该运行多长时间来收集跟踪数据。
-b 64mb:
- 作用: 这个选项指定了在收集数据期间用于缓冲的内存大小。
- 用法:
-b选项后跟一个存储空间大小字符串
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory:
- 作用: 这些是要跟踪的事件类别。
- 用法: 列出了一系列的跟踪类别,Perfetto 将根据这些类别收集相应的性能数据。每个类别的含义如下:
sched: 跟踪调度器活动。freq: 跟踪 CPU 频率变化。idle: 跟踪系统空闲状态。am: 跟踪 Activity Manager(活动管理器)相关事件。wm: 跟踪 Window Manager(窗口管理器)相关事件。gfx: 跟踪图形渲染相关事件。view: 跟踪视图系统的事件。binder_driver: 跟踪 Binder 驱动器的事件,Binder 是 Android 的进程间通信机制。hal: 跟踪硬件抽象层(HAL)的事件。dalvik: 跟踪 Dalvik 虚拟机(用于运行 Android 应用的虚拟机)的事件。camera: 跟踪相机相关事件。input: 跟踪输入事件(如触摸和键盘输入)。res: 跟踪资源使用情况。memory: 跟踪内存使用情况。
2、操作手机,复现场景
3、获取trace文件
1 | |
将抓取的trace文件拉取到当前目录
在线工具抓取
Perfetto 还提供了一个强大的在线工具,允许开发者通过浏览器配置和启动跟踪。你只需点击“Record new trace”,然后根据需要选择数据源和配置参数。确保你的设备通过 ADB 连接到电脑,并且在网页端选择“Add ADB device”。之后,点击“Start Recording”即可开始收集跟踪数据

分析Trace
一些快捷键
导航
| w/s | Zoom in/out |
|---|---|
| a/d | Pan left/right |
鼠标控制
| Click | Select event |
|---|---|
| Ctrl + Scroll wheel | Zoom in/out |
| Click + Drag | Select area |
| Shift + Click + Drag | Pan left/right |
快捷键
| 按键 | 作用 |
|---|---|
| shift + M | 根据当前选择添加新的span注释 |
| Esc | 取消选择 |
| F | 聚焦当前选择 |
| 回车 | 下一个搜索结果 |
| shift+回车 | 上一个搜索结果 |
| ] | 移动到下一个flow |
| [ | Move prev flow |
| Ctrl+] | Next flow |
| Ctrl+shift+P | Open command palette |
| Ctrl+[ | Prev flow |
| Delete | Remove selected note |
| Ctr+lO | Run query |
| / | Search |
| Ctrl+A | Select all |
| M | 根据当前选择设置临时跨度注释 |
| ? | Show help |
| Q | 切换抽屉展示(展示or隐藏下面的详细信息) |
| Ctrl+B | 切换左侧工具栏 |
| Ctrl+Alt+S | 与其他PerfettoUI选项卡切换时间轴同步 |
Trace分析
查看线程运行状态:

查看线程唤醒关系:
Perfetto可以通过Runnable上提供的跳转按钮,点击自动跳转到线程调度区域中对应的轨道,并显示当前线程的唤醒端和唤醒延迟时间:

线程标记:
点击左侧pin,可以将该线程置顶,方便快速查看:

Android Perfetto学习
https://chujian521.github.io/blog/2024/09/15/Android-Perfetto学习/