Perfetto 快速上手指南

1. Perfetto 是什么?

Perfetto 是 google 从 Android10 开始引入的一个全新的平台级跟踪分析工具。它可以记录 Android 系统运行过程中的关键数据,并通过图形化的形式展示这些数据。Perfetto 不仅可用于系统级的性能分析,也是我们学习系统源码流程的好帮手。

2. 如何抓取 Trace

使用 Perfetto 一般分两步进行:

  • 收集手机运行过程中的信息,这些信息通常称之为 Trace,收集的过程称之为抓取 Trace。
  • 使用 Perfetto 打开 Trace,分析 Trace

本节介绍如何抓取 Trace 。

2.1 使用命令行抓取 Trace

2.1.1 使用 perfetto 命令抓取

首先使用 usb 线将电脑和手机连接,确保 adb shell 命令能正常工作。

接着执行下面的命令:

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

这个命令会启动一个 20 秒钟的跟踪,收集指定的数据源信息,并将跟踪文件保存到 /data/misc/perfetto-traces/trace_file.perfetto-trace

最后,把 trace 文件 pull 出来:

adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

整个抓取过程就完成了。

2.1.2 使用 record_android_trace 命令抓取

record_android_trace 是 Perfetto 团队提供的一个简化脚本,使得我们的抓取工作更加简单。

curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace
chmod u+x record_android_trace
./record_android_trace -o trace_file.perfetto-trace -t 10s -b 64mb 
 sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

record_android_trace 命令能自动处理好路径,抓取完成后自动打开 Trace 文件。

2.2 使用 UI 工具抓取

2.2.1 Perfetto UI 抓取

Perfetto 也提供了图形化的工具来抓取 Trace。

该工具以网站的方式提供:ui.perfetto.dev/#!/record

打开后,第一步,完成基本的设置:

20240905142700

  • 左侧 tab 栏,选择 Record new trace 选项
  • 使用 usb 线连接好手机和电脑后,选项好目标平台
  • 选择抓取的模式
    • Stop when full,抓取的 trace 达到设置的容量后就停止
    • Ring buffer,环形缓存,设置的容量满了后会被覆盖
    • Long Trace,任性,一直记录

第二步,配置我们要抓取的内容:

20240905142708

箭头指向的内容全部选中,这部分主要是 App 相关的内容。

20240905142716

把调用栈选上,这对我们分析代码很有帮助。

最后点击,右上角的 Start Recording 就开始抓取了。

2.3 使用配置文件简化命令行抓取

在使用 Perfetto UI 抓取时,当我们配置好以后。

20240905142642

进入到 Recording command,然后把右侧两个 EOF 之间的内容复制下来,保存在 config.pbtx 配置文件中。

接着就可以用这个配置文件来抓取 Trace 了:

./record_android_trace -c config.pbtx -o trace_file.perfetto-trace -t 10s -b 64mb

3. Perfetto 使用基础

3.1 进入 Perfetto Trace 界面

使用 record_android_trace 命令或者 Perfetto UI 抓取 Trace 后,会自动打开 Perfetto Trace 界面。

使用 perfetto 命令抓取 Trace 后,需要手动打开 Perfetto Trace 界面。打开的方法如下:

使用浏览器打开 ui.perfetto.dev/,界面如下:

20240905214606

可以把 trace 文件直接拖到浏览器中,也可以通过左上角的 Open trace file 打开 trace 文件。

3.2 Perfetto Trace 界面基本内容

Perfetto Trace 界面大致可分为 4 个区域:

20240905220457

  • 操作区,主要用到 Current Trace 下的几个选项
    • Show timeline :显示当前 Trace,切到了别的界面之后,再点这个就会回到 Trace View 界面
    • Query:写 SQL 查询语句和查看执行结果的地方
    • Metrics:官方默认帮你写好的一些分析结果
    • Info and stats :当前 Trace 和手机 App 的一些信息
  • 信息区:时间与搜索。
  • Trace 内容区:图形化展示 Trace 的区域
  • 信息区:展示Trace 内容区中选择中的元素的详细信息

在 Trace 内容区中,可以通过 w/s 按键缩小放大界面, a/d 移动界面。

Trace 内容区中主要有以下一些元素:

3.2.1 slice,片段

20240905223944

鼠标单击后会有一个黑框包围住,信息区会显示相关信息:

20240905225317

slice 代表了一段代码的执行过程,起于 Trace.traceBegin ,终于 Trace.traceEnd ATRACE_END

  Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "bindApplication");
  AppBindData data = (AppBindData)msg.obj;
  handleBindApplication(data);
  Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);

3.2.2 counter,计数器

用于记录一些关键数据

20240905230524

20240905230536

对应于代码中的 Trace.traceCounter/ATRACE_INT

    ATRACE_INT(ftl::Concat("HW_VSYNC_", displayIdOpt->value).c_str(),
    displayData.vsyncTraceToggle);

3.2.3 CPU Sched Slice, cpu 调度片段

用于展示 cpu 的调度情况

20240905230803

3.2.4 thread_state,线程状态

点击片段上方线程调度信息片段(Running),可以看到线程当前运行在哪个CPU上

20240905231231

20240905231240

点击信息区中的 Running on CPU 7 旁边的斜箭头:

20240906094112

可以在 CPU 调度中看到该运行片段

20240906094611

再次点击斜箭头,可以回到原来位置

这里的 thread_state 实际是我们的主线程,由用户点击屏幕唤醒运行,实际很多线程都是又其他线程/进程唤醒的,比如在 CPU 调度中选择一个 Slice:

20240906095016

这里的意思是当前 thread 由 P(Process)/system/bin/surfaceflinger [584] 中的 T(Thread)app [689] 唤醒。

线程从就绪到运行延迟了 48us 381ns

3.2 Perfetto Trace 界面基本操作

用得最多的其实就是添加标记。

当我们选中一个片段时,点击 m,就可以做一个临时的标记,当标记另一个片段以后,前一个零时标记就会取消。

选中一个片段以后,如果点击 shift + m,就会添加一个普通标记。

标记以后,会出现两个小三角:

20240906095934

点击小三角后,信息区会出现一个 remove 按键:

20240906100414

点击即可取消

参考资料

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/22249,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?