前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Perfetto 系列 2:Perfetto Trace 抓取

Android Perfetto 系列 2:Perfetto Trace 抓取

作者头像
233333
发布2024-06-27 09:18:35
6390
发布2024-06-27 09:18:35
举报
文章被收录于专栏:linux驱动个人学习

使用 Perfetto 分析问题跟使用 Systrace 分析问题的步骤是一样的:

  1. 首先你需要抓取 Perfetto 文件
  2. ui.perfetto.dev 中打开 Trace 文件进行分析或者使用命令行来进行分析

这篇文章就简单介绍一下使用 Perfetto 抓取 Trace 文件的方法,个人比较推荐使用命令行来抓取,不管是自己配置的命令行还是官方的命令行抓取工具,都非常实用。

1. 使用命令行来抓取 Perfetto(推荐)

基本命令 - adb shell perfetto

对于之前一直用 Systrace 工具的小伙伴来说,命令行抓取 Trace 非常方便。同样,Perfetto 也提供了简单的命令行来抓取,最简单的使用方法与 Systrace 基本一致。你可以直接连到你的 Android 设备上使用/system/bin/perfetto命令来启动跟踪。例如:

代码语言:javascript
复制
//1. 首先执行命令
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

// 2. 操作手机,复现场景,比如滑动或者启动等

// 3. 将 trace 文件 pull 到本地
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

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

执行 adb pull 命令把 trace pull 出来,就可以直接在ui.perfetto.dev 上打开了。

进阶命令 adb shell perfetto with config file

这里就是 Perfetto 与 Systrace 不同的地方,Perfetto 可以抓取的信息非常多,其数据来源也非常多,每次都用命令行加一大堆配置的话会很不方便。这时候我们就可以使用一个单独的配置文件(Config),来存储这些信息,每次抓取的时候,指定这个配置文件即可。

对于在 Android 12 之前和之后版本上使用 Perfetto 的配置文件传递,以下是详细的指南和对应的命令行示例。

在 Android 12 及之后的设备上

从 Android 12 开始,可以直接使用/data/misc/perfetto-configs目录来存储配置文件,这样就不需要通过 stdin 来传递配置文件了。具体命令如下:

代码语言:javascript
复制
adb push config.pbtx /data/misc/perfetto-configs/config.pbtx
adb shell perfetto --txt -c /data/misc/perfetto-configs/config.pbtx -o /data/misc/perfetto-traces/trace.perfetto-trace

在这个例子中,首先将配置文件config.pbtx推送到/data/misc/perfetto-configs目录中。然后,直接在 Perfetto 命令中通过-c选项指定配置文件的路径来启动跟踪。

在 Android 12 之前的设备上

由于 SELinux 的严格规则,直接通过文件路径传递配置文件在非 root 设备上会失败。因此,需要使用标准输入(stdin)来传递配置文件。这可以通过将配置文件的内容cat到 Perfetto 命令中实现。具体命令如下:

代码语言:javascript
复制
adb push config.pbtx /data/local/tmp/config.pbtx
adb shell 'cat /data/local/tmp/config.pbtx | perfetto -c - -o /data/misc/perfetto-traces/trace.perfetto-trace'

这里,config.pbtx是你的 Perfetto 配置文件,首先使用adb push命令将其推送到设备的临时目录中。然后,使用cat命令将配置文件的内容传递给 Perfetto 命令。

Config 的来源

Config 我建议使用 ui.perfetto.devRecord new trace 这里进行选择定制,然后再保存到本地的文件里面,不同的场景就加载不同的 Config 即可,文章最后一部分有详细讲到这部分,感兴趣的可以看一下。

官方也提供了 share 按钮,你可以把你自己的 config share 给其他人,非常方便。同时我也会建了一个 Github 的库,方便大家在分享(进行中)。

官方代码库也有一些已经配置好的,各位可以下下来自己使用:https://cs.android.com/android/platform/superproject/main/+/main:external/perfetto/test/configs/

注意事项

  • 确保 adb 正常:在使用这些命令之前,请确保你的设备已经启用了 USB 调试,并且已经通过adb devices命令确认设备已经正确连接。Ctrl+C 中断: 当使用adb shell perfetto命令时,如果你尝试使用 Ctrl+C 来提前结束跟踪,这个信号不会通过 ADB 传播。如果你需要提前结束跟踪,建议使用一个交互式的 PTY-based session 来运行adb shell。
  • SELinux 限制: 在 Android 12 之前的非 root 设备上,由于 SELinux 的严格规则,配置文件只能通过cat config | adb shell perfetto -c -的方式传递(其中-c -表示从标准输入读取配置)。从 Android 12 开始,可以使用/data/misc/perfetto-configs路径来存储配置文件。
  • 在 Android 10 之前的版本, adb 没法直接把 /data/misc/perfetto-traces pull 出来. 你可以使用 adb shell cat /data/misc/perfetto-traces/trace > trace 来替代

2. 使用 Perfetto 提供的官方脚本抓取(强烈推荐)

Perfetto 团队还提供了一个便捷的脚本tools/record_android_trace,它简化了从命令行记录跟踪的流程。这个脚本会自动处理路径问题,完成跟踪后自动拉取跟踪文件,并在浏览器中打开它。本质上这个脚本还是使用的 adb shell perfetto 命令,不过官方帮你封装好了,使用示例:

On Linux and Mac:

代码语言:javascript
复制
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

On Windows:

代码语言:javascript
复制
curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace
python3 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

同样的,这里也可以通过 -c 来指定配置文件,比如

代码语言:javascript
复制
curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace
chmod u+x record_android_trace
./record_android_trace -c config.pbtx -o trace_file.perfetto-trace -t 10s -b 64mb \
 sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

这将会记录一个 10 秒的跟踪,并将输出文件保存为trace_file.perfetto-trace

执行后会自动抓取 Trace, 自动在浏览器自动打开,非常方便



脚本内容可以直接访问:https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace 来查看,

3. 使用手机上的开发者工具来抓取

当然有时候会没有办法连接到电脑上,或者测试内容不能插 usb,这时候就可以使用 Android 上的自带的系统跟踪应用(System Tracing App)来抓取 Trace。这个应用内置于开发者选项中,可以让你通过几个简单的步骤来配置和启动性能跟踪。

启动系统跟踪应用

  1. 启用开发者选项:首先,确保你的设备已经启用了开发者选项。如果你的设置里面没有开发者选项,你需要在关于手机那里,找到编译编号,然后连续点击 7 次,就可以打开开发者选项。
  2. 打开开发者选项:在设置菜单中找到并打开开发者选项。
  3. 启动系统跟踪:在开发者选项中向下滚动直到找到“系统跟踪(System Trace)”或类似的选项。点击它,将打开系统跟踪应用。

大概长下面这样(每个手机可能界面或者文字会有差异,但是功能是一样的)



系统跟踪应用提供了一系列的配置选项,包括但不限于:

  • 跟踪时长:你可以指定跟踪的持续时间,例如 10 秒或更长时间。
  • 数据源:选择你想要收集数据的来源。这可能包括 CPU、内存、网络等多种不同的数据源。
  • 输出文件位置:指定跟踪文件保存的位置。

系统跟踪应用提供了一系列的配置选项,包括但不限于:

  • 跟踪时长:你可以指定跟踪的持续时间,例如 10 秒或更长时间。
  • 数据源:选择你想要收集数据的来源。这可能包括 CPU、内存、网络等多种不同的数据源。
  • 输出文件位置:指定跟踪文件保存的位置。

启动和停止跟踪

配置好所有需要的参数后,你可以通过点击“录制跟踪记录”按钮来启动跟踪。再次“录制跟踪记录”按钮就可以结束抓取,完成抓取后,通常会有一个提示告诉你抓取已经完成,并提供查看或分享跟踪文件的选项。就可以将跟踪文件导出到电脑上,使用 Perfetto 网页 UI 进行更深入的分析。

配置好所有需要的参数后,你可以通过点击“录制跟踪记录”按钮来启动跟踪。再次“录制跟踪记录”按钮就可以结束抓取,完成抓取后,通常会有一个提示告诉你抓取已经完成,并提供查看或分享跟踪文件的选项。就可以将跟踪文件导出到电脑上,使用 Perfetto 网页 UI 进行更深入的分析。

4. 使用网页端来抓取

网页端抓取的功能比较迷,很多时候你都会抓取失败,比如连不上 adb、连上之后说你需要执行 kill。所以我更推荐大家使用配置好的命令行来抓取,网页端更适合进行 Config 的配置。

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



这里选好你想抓取的信息源之后,可以点击 Recording command 来查看,这里可以看到你选好的 Config 的具体内容,你可以分享或者保存到本地的文件里面,用命令行抓取的时候使用。



选取 Config 的时候,Android apps 那一栏里面的 Atrace userspace annotations、Event log (logcat)、Frame timeline 建议都选上(command + a)



另外如果想看调用栈,可以把 Stack Samples 这里的 Callstack sampling 勾选上(注意需要最新版本的 Android 才可以,而且所 debug 的进程得是 debugable 的)



本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 使用命令行来抓取 Perfetto(推荐)
    • 进阶命令 adb shell perfetto with config file
      • 在 Android 12 及之后的设备上
        • 在 Android 12 之前的设备上
          • Config 的来源
            • 注意事项
            • 2. 使用 Perfetto 提供的官方脚本抓取(强烈推荐)
            • 3. 使用手机上的开发者工具来抓取
              • 启动系统跟踪应用
                • 系统跟踪应用提供了一系列的配置选项,包括但不限于:
                  • 启动和停止跟踪
                  • 4. 使用网页端来抓取
                  相关产品与服务
                  云开发 CLI 工具
                  云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档