上一篇文章 Android Perfetto 系列 1Perfetto 工具简介 介绍了 Perfetto 是什么这篇简单介绍一下 Perfetto 的抓取。随着 Google 宣布 Systrace 工具停更推出 Perfetto 工具Perfetto 在我的日常工作中已经基本能取代 Systrace 工具。同时 Oppo、Vivo 等大厂也已经把 Systrace 切换成了 Perfetto许多新接触 Android 性能优化的小伙伴对于 Perfetto 那眼花缭乱的界面和复杂的功能感觉头疼希望我能把之前的那些 Systrace 文章使用 Perfetto 来呈现。Paul Graham 说要么给大部分人提供有点想要的东西要么给小部分人提供非常想要的东西。Perfetto 其实就是小部分人非常想要的东西那就开始写吧欢迎大家多多交流和沟通发现错误和描述不准确的地方请及时告知我我会及时修改以免误人子弟。本系列旨在通过 Perfetto 这个工具从一个新的视角审视 Android 系统的整体运作方式。此外它还旨在提供一个不同的角度来学习 App 、 Framework、Linux 等关键模块。尽管你可能已经阅读过许多关于 Android Framework、App 、性能优化的文章但或许因为难以记住代码或不明白其运行流程你仍感到困惑。通过 Perfetto 这个图形化工具你可能会获得更深入的理解。Perfetto 系列目录Android Perfetto 系列目录Android Perfetto 系列 1Perfetto 工具简介Android Perfetto 系列 2Perfetto Trace 抓取Android Perfetto 系列 3熟悉 Perfetto ViewAndroid Perfetto 系列 4使用命令行在本地打开超大 TraceAndroid Perfetto 系列 5Android App 基于 Choreographer 的渲染流程Android Perfetto 系列 6为什么是 120Hz高刷新率的优势与挑战Android Perfetto 系列 7 - MainThread 和 RenderThread 解读Android Perfetto 系列 8深入理解 Vsync 机制与性能分析Android Perfetto 系列 9 - CPU 信息解读Android Perfetto 系列 10 - Binder 调度与锁竞争视频(B站) - Android Perfetto 基础和案例分享视频(B站) - Android Perfetto 分享 - 出图类型分享AOSP、WebView、Flutter OEM 系统优化分享如果大家还没看过 Systrace 系列下面是传送门Systrace 系列目录 系统介绍了 Perfetto 的前身 Systrace 的使用并通过 Systrace 来学习和了解 Android 性能优化和 Android 系统运行的基本规则。个人博客 个人博客主要是 Android 相关的内容也放了一些生活和工作相关的内容。欢迎大家在 关于我 页面加入微信群或者星球讨论你的问题、你最想看到的关于 Perfetto 的部分以及跟各位群友讨论所有 Android 开发相关的内容正文使用 Perfetto 分析问题跟使用 Systrace 分析问题的步骤是一样的首先你需要抓取 Perfetto 文件在ui.perfetto.dev 中打开 Trace 文件进行分析或者使用命令行来进行分析这篇文章就简单介绍一下使用 Perfetto 抓取 Trace 文件的方法个人比较推荐使用命令行来抓取不管是自己配置的命令行还是官方的命令行抓取工具都非常实用。1. 使用命令行来抓取 Perfetto推荐基本命令 - adb shell perfetto对于之前一直用 Systrace 工具的小伙伴来说命令行抓取 Trace 非常方便。同样Perfetto 也提供了简单的命令行来抓取最简单的使用方法与 Systrace 基本一致。你可以直接连到你的 Android 设备上使用/system/bin/perfetto命令来启动跟踪。例如//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 来传递配置文件了。具体命令如下adb push config.pbtx /data/misc/perfetto-configs/config.pbtxadb 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 命令中实现。具体命令如下adb push config.pbtx /data/local/tmp/config.pbtxadb 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.dev 的Record new trace这里进行选择定制然后再保存到本地的文件里面不同的场景就加载不同的 Config 即可文章最后一部分有详细讲到这部分感兴趣的可以看一下。官方也提供了 share 按钮你可以把你自己的 config share 给其他人非常方便。同时我也会建了一个 Github 的库方便大家在分享进行中。官方代码库也有一些已经配置好的各位可以下下来自己使用https://cs.android.com/android/platform/superproject/main//main:external/perfetto/test/configs/注意事项确保 adb 正常在使用这些命令之前请确保你的设备已经启用了 USB 调试并且已经通过adb devices命令确认设备已经正确连接。CtrlC 中断 当使用adb shell perfetto命令时如果你尝试使用 CtrlC 来提前结束跟踪这个信号不会通过 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 Maccurl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_tracechmod ux 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 memoryOn Windows:curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_tracepython3 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 来指定配置文件比如curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_tracechmod ux 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。这个应用内置于开发者选项中可以让你通过几个简单的步骤来配置和启动性能跟踪。启动系统跟踪应用启用开发者选项首先确保你的设备已经启用了开发者选项。如果你的设置里面没有开发者选项你需要在关于手机那里找到编译编号然后连续点击 7 次就可以打开开发者选项。打开开发者选项在设置菜单中找到并打开开发者选项。启动系统跟踪在开发者选项中向下滚动直到找到系统跟踪System Trace或类似的选项。点击它将打开系统跟踪应用。大概长下面这样每个手机可能界面或者文字会有差异但是功能是一样的系统跟踪应用提供了一系列的配置选项包括但不限于跟踪时长你可以指定跟踪的持续时间例如 10 秒或更长时间。数据源选择你想要收集数据的来源。这可能包括 CPU、内存、网络等多种不同的数据源。输出文件位置指定跟踪文件保存的位置。启动和停止跟踪配置好所有需要的参数后你可以通过点击录制跟踪记录按钮来启动跟踪。再次录制跟踪记录按钮就可以结束抓取完成抓取后通常会有一个提示告诉你抓取已经完成并提供查看或分享跟踪文件的选项。就可以将跟踪文件导出到电脑上使用 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 的至于其他的有啥用可以自己探索后续的 Perfetto 也会介绍到每个部分和他在 Trace 上的呈现帮助大家更快入手 Perfetto。从网页端提取参数前面提到网页端的可以图形化选择 Config 这个很方便选好之后点击 Recording command 这里就可以看到已经选好的 Config你在保存的时候记得把下面这几行去掉就可以了参考文档https://perfetto.dev/docs/quickstart/android-tracinghttps://perfetto.dev/docs/concepts/confighttps://developer.android.com/tools/releases/platform-tools?hlzh-cnhttps://juejin.cn/post/7344983784549400613https://cs.android.com/android/platform/superproject/main//main:external/perfetto/test/configs/关于我 博客下面是个人的介绍和相关的链接期望与同行的各位多多交流三人行则必有我师!博主个人介绍 里面有个人的微信和微信群链接。本博客内容导航 个人博客内容的一个导航。个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 欢迎大家自荐和推荐 微信私聊即可Android性能优化知识星球 欢迎加入多谢支持一个人可以走的更快 , 一群人可以走的更远