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学习/