【Android 性能分析工具】第二天:认识Perfetto

Perfetto 是什么?

Perfetto 是一套开源的软件开发工具包(SDK)、守护进程(daemon)和工具集合,它通过追踪技术帮助开发者理解复杂系统的行为,并定位客户端/嵌入式系统中的功能问题与性能瓶颈。

它包含以下组件:

  • 高性能追踪守护进程:可捕获单台设备上多个进程的追踪信息,整合到一个统一的追踪文件中,用于后续离线分析与可视化。
  • 低开销追踪 SDK:适用于 C/C++ 代码的直接用户态到用户态追踪,可记录时序信息与状态变化。
  • 丰富的系统级探针(Android 与 Linux):在追踪过程中捕获更广泛的系统级上下文信息,例如调度状态、CPU 频率、内存分析、调用栈采样等。
  • 完全本地化的浏览器端 UI:可在时间轴上可视化大量复杂、相互关联的数据。该 UI 支持所有主流浏览器,无需安装,可离线使用,且能打开其他(非 Perfetto)追踪工具录制的追踪文件。
  • 功能强大的 SQL 分析库:可通过编程方式在时间轴上分析大量复杂、相互关联的数据,即便这些数据并非通过 Perfetto 录制工具收集。

为什么要使用 Perfetto?

Perfetto 从设计之初就定位为 Android 系统和 Chrome 浏览器的默认追踪系统。因此,Perfetto 官方支持以下场景的追踪数据收集、分析与可视化:

  • Android 系统追踪:用于调试和定位 Android 平台及 Android 应用中的功能问题与性能瓶颈。Perfetto 适用于调试多种场景,例如启动缓慢、丢帧(卡顿)、动画异常、内存不足导致的进程被杀、应用无响应(ANR)以及各类常规故障行为。
  • Android 上的 Java 堆转储与原生堆分析:分别用于调试和定位 Android 平台及 Android 应用中 Java/Kotlin 代码与 C++ 代码的高内存占用问题。
  • Android 上的调用栈采样分析:用于调试和定位 Android 平台及 Android 应用中 C++/Java/Kotlin 代码的高 CPU 占用问题。
  • Chrome 浏览器追踪:用于调试和定位浏览器、V8 引擎、Blink 渲染引擎中的问题,在高级场景下还可用于定位网站自身的问题。

除上述"官方"场景外,Perfetto 还包含一套高度灵活的工具集,使其可作为通用追踪系统、性能数据分析工具或时间轴可视化工具使用。

Perfetto 团队会投入部分精力支持这些场景,但其支持优先级低于官方场景。

Perfetto 其他常见的使用场景包括:

  • 收集、分析和可视化应用内追踪数据:用于调试 Windows、macOS 及基于 Linux 的嵌入式系统上 C/C++ 应用与库的功能问题和性能瓶颈。
  • 收集、分析和可视化 Linux 上的堆分析数据:用于调试 C/C++/Rust 应用与库的高内存占用问题。
  • 分析和可视化 Linux 上的 CPU 分析数据(Linux perf 分析结果):用于优化 C/C++/Rust 应用与库的 CPU 占用。

此外,Perfetto 还能分析和可视化多种追踪与分析格式的数据。

它可打开其他各类工具生成的追踪文件和分析结果,让你能在多个数据源上使用 Perfetto UI 及其基于 SQL 的查询引擎,支持的格式包括:

  • Chrome JSON 格式
  • Firefox Profiler JSON 格式
  • Linux perf(二进制与文本格式)
  • Linux ftrace 文本格式
  • macOS Instruments 格式
  • Fuchsia 追踪格式

Perfetto 还可分析和可视化任意"类追踪"数据。

只要数据能转换为 Perfetto 协议缓冲区(protobuf)格式,其分析与可视化工具就能处理所有"类追踪"数据(例如包含时间戳和有效载荷的数据),具体应用场景仅受限于想象力!

为什么不建议使用 Perfetto?

以下几类问题要么并非 Perfetto 的设计目标,要么属于其明确不支持的场景:

1. 为分布式/服务器系统录制追踪数据

Perfetto 并非 OpenTelemetry、Jaeger、Datadog 这类分布式追踪工具。Perfetto 的录制工具仅用于客户端追踪数据的录制,尤其聚焦系统级追踪。我们团队认为,分布式/服务器追踪领域已有上述成熟项目覆盖,这与 Android、Linux/嵌入式系统等客户端系统的情况不同。

不过,若能将分布式追踪数据转换为 Perfetto 支持的格式,仍可使用 Perfetto UI 进行可视化。事实上,Google 内部经常采用这种做法。

2. 在 Windows 或 macOS 上录制系统级追踪数据

Perfetto 的录制工具未与 Windows 或 macOS 上的任何系统级数据源集成。

但 Perfetto 可用于分析和可视化通过 Instruments(macOS 自带工具)收集的 macOS 追踪数据,因为它原生支持 Instruments XML 格式。

3. 在关键路径上消费追踪数据

Perfetto 的生产者(producer)代码已针对低开销追踪写入进行优化,但消费者(consumer)端并未针对低延迟回读优化。

这意味着,不建议在需要端到端低延迟追踪的场景中使用 Perfetto。

4. 以尽可能低的开销录制追踪数据

Perfetto SDK 并未宣称自己是"最快的追踪录制方式":我们清楚,市面上存在能以更低开销捕获追踪数据的库和工具。例如,通过在共享内存(shmem)环形缓冲区中记录固定大小事件并递增原子指针,就能实现比我们的追踪 SDK 更低的开销。

相反,Perfetto 的录制库与守护进程更注重在追踪的性能、灵活性和安全性之间取得良好平衡。

例如,Perfetto 支持任意大小的事件(如高分辨率截图)、多进程追踪协调、不同配置的并发追踪会话、动态缓冲区多路复用、附加到追踪事件的任意嵌套键值参数、动态字符串驻留、用于关联追踪事件的流转(flow)以及动态追踪事件名------这些功能是许多低开销追踪系统所不具备的。

不过,若其他非 Perfetto 工具录制的追踪数据能转换为 Perfetto 协议缓冲区格式,或转换为我们原生支持的其他格式(如 Chrome JSON、Fuchsia 格式等),仍可使用 Perfetto UI 进行可视化。

5. 为游戏录制、分析或可视化 GPU 追踪数据

游戏的追踪与分析与通用软件的追踪存在显著差异,原因包括:整个系统围绕"帧"构建、对 GPU 及其利用率的高度关注、游戏引擎的存在及与之集成的需求等。

由于 Perfetto 并未专门针对游戏开发者关注的核心需求进行优化,我们认为它并不适合这类场景。

虽然我们在 Android 上提供了部分 GPU 渲染阶段和 GPU 计数器录制支持,但这些功能在 Android GPU Inspector(其底层将 Perfetto 作为数据源之一)中得到了更好的支持。

如何开始使用 Perfetto?

我们理解 Perfetto 包含多个组件,新手可能难以判断哪些内容与自己相关。因此,我们专门提供了一个页面解答此问题:《如何开始使用 Perfetto?》(How do I start using Perfetto?)。

目前哪些用户在使用 Perfetto?

Perfetto 是 Android 操作系统和 Chromium 浏览器的默认追踪系统。因此,Google 内部的这些团队会广泛使用 Perfetto,既用于主动发现性能优化点,也用于在本地、实验室甚至生产环境中被动调试/定位问题。

Google 内部还有许多其他团队以各种方式使用 Perfetto,其中包括对追踪系统的"非传统"使用。此外,Perfetto 也已在行业内得到广泛采用,许多其他公司都在使用它。

以下是公开博客文章、文章和视频中提及 Perfetto 的部分案例(非完整列表):

  • Google I/O 2023 - 《Dart 与 Flutter 新特性》(What's new in Dart and Flutter)
  • Google I/O 2023 - 《Jetpack Compose 调试》(Debugging Jetpack Compose)
  • 性能专题:Perfetto Traceviewer - MAD Skills 系列视频("在本期 MAD Skills 性能专题中,Android 性能工程师 Carmen Jackson 将介绍 Perfetto Traceviewer------这是一款可替代 Android Studio 的系统追踪查看工具。")
  • Meta Quest 平台上的性能与优化(Performance: Perfetto Traceviewer - MAD Skills)
  • 通过比例追踪进行性能测试(Performance testing through proportional traces)
  • Twoscomplement 播客某期("我们效率最高的一期播客。Ben 和 Matt 在不到 30 分钟内讨论了性能测试与优化。")
  • Collabora:使用 Perfetto 分析虚拟化 GPU 加速(Profiling virtualized GPU acceleration with Perfetto)
  • Snap:大规模客户端追踪(Client Tracing at Scale)("由于 Android 设备种类繁多,定位性能问题颇具挑战。通过追踪数据,我们能了解导致糟糕用户体验的具体场景。本文将探讨我们如何为 Snapchat 应用添加埋点,以获取足够的信号来解释问题;此外,还将介绍我们如何将追踪集成到开发流程中------从本地调试、性能测试到最终的生产环境。")
  • Microsoft:用于分析 Android、Linux 和 Chromium 浏览器性能的 Perfetto 工具(Perfetto tooling for analyzing Android, Linux, and Chromium browser performance)
  • Mesa 3D 图形库:在部分驱动中集成了 Perfetto,用于 GPU 计数器和渲染阶段监控。
  • Jane Street 的 MagicTrace:一款基于 Perfetto 的工具,用于录制和可视化 Intel 处理器追踪数据。

在哪里可以获取更多关于 Perfetto 的信息并获得帮助?

Perfetto 遵循 Google 开源社区准则(Google's Open Source Community Guidelines)。

要不要我帮你整理一份Perfetto 核心功能与使用场景对照表 ?表格会清晰列出其核心组件、适用场景、不适用场景及对应替代工具,方便你快速查阅和决策。

相关推荐
李堇27 分钟前
android滚动列表VerticalRollingTextView
android·java
lxysbly2 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者85 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20355 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥5 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓5 小时前
[JDBC]元数据
android
独行soc5 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能6 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿6 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc6 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮