Android Perfetto学习

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

抓取trace

adb shell perfetto直接抓取

最简单的是使用adb shell perfetto去抓取

1、手机打开开发者模式链接电脑,打开cmd,输入下面的adb命令

1
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s -b 64mb sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

参数解释:

-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
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace ./

将抓取的trace文件拉取到当前目录

在线工具抓取

Perfetto 还提供了一个强大的在线工具,允许开发者通过浏览器配置和启动跟踪。你只需点击“Record new trace”,然后根据需要选择数据源和配置参数。确保你的设备通过 ADB 连接到电脑,并且在网页端选择“Add ADB device”。之后,点击“Start Recording”即可开始收集跟踪数据

image-20240916152143062

分析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分析

查看线程运行状态:

image-20240917151415286

查看线程唤醒关系:

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

image-20240917150552089

线程标记:

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

image-20240917151247290


Android Perfetto学习
https://chujian521.github.io/blog/2024/09/15/Android-Perfetto学习/
作者
Encounter
发布于
2024年9月15日
许可协议