Android perfetto - Perfetto 新手入门指南

Perfetto 是一个开源的性能分析工具,旨在帮助开发者了解复杂系统的行为并排查性能和功能问题。它提供高效、低开销的系统和应用层追踪功能,可以记录系统运行时的详细信息,并进行后续的离线分析。

对于 Perfetto 新手,这份入门指南将帮助你快速理解 Perfetto 的基本概念和使用步骤。

1、什么是 Perfetto?

Perfetto 是一个性能分析框架,包括以下几个关键部分:

  • 高性能 tracing 守护进程:用于从同一台机器上的多个进程捕获追踪信息,合并成统一的 trace 文件,供离线分析;
  • 低开销用户态 tracing SDK:用于在应用程序中直接记录执行时间和状态变化,适合 C/C++ 等编程语言;
  • 系统级 OS probes:捕获 Android 和 Linux 系统层面的信息,例如线程调度、CPU 频率、内存使用等;
  • 浏览器可视化 UI:用于查看和分析 trace 数据,提供基于时间线的直观展示;
  • SQL 分析库:用于编程化地分析 trace 数据,支持复杂的 SQL 查询;

Perfetto 主要用于捕获性能瓶颈、系统行为和应用程序执行过程中的重要事件,帮助开发者进行性能调优和故障排查。

2、安装 Perfetto

2.1、安装 Perfetto 工具

Perfetto 是一个跨平台的工具,支持 Android、Linux 和 Chrome 等平台。可以选择以下方式安装 Perfetto:

  • Android Studio:对于 Android 开发者,Perfetto 可以通过 Android Studio 的 Profiler 进行集成;

  • 从源码构建:也可以从 Perfetto 的 GitHub 仓库下载并编译源码;

  • 通过 AOSP (Android Open Source Project) :如果用的是 Android 设备,可以通过 AOSP 的 Perfetto 服务进行集成;

2.2、安装 Perfetto UI

Perfetto 的 UI 是完全本地的、基于浏览器的工具。只需要打开浏览器并加载 trace 文件,无需安装额外的工具。可以访问以下链接:

3、创建并记录 Perfetto Trace

3.1、启动 Trace 记录

Perfetto 支持多种方法来启动 trace 记录。常用的方式是使用命令行工具trace或者通过SDK 直接在应用程序中插入 tracing 代码。

使用命令行工具录制 trace:

# 启动 Perfetto 记录一个简单的 trace perfetto --trace-config=config_file --output=trace_file

config_file是配置文件,指定了你想记录的追踪数据类型(如线程调度、CPU 事件等)。trace_file 是保存的输出文件。

3.2设置 Trace 配置

Perfetto 通过配置文件来定义要记录的数据。配置文件包含了跟踪项(如线程、CPU、内存)和其他设置。可以根据需要灵活配置,选择特定的事件进行跟踪。

css 复制代码
duration_ms: 10000

buffers {
  size_kb: 65536
  fill_policy: RING_BUFFER
}

data_sources {
  config {
    name: "linux.ftrace"
    target_buffer: 0
    ftrace_config {
      ftrace_events: "sched_switch"
      ftrace_events: "sched_wakeup"
    }
  }
}

4分析和可视化 Trace 数据

4.1使用 Perfetto UI 查看 Trace 数据

Perfetto 提供了一个基于浏览器的界面,用于可视化 trace 文件中的数据。打开浏览器并加载 trace 文件,可以看到系统的时间轴、事件流和调用图。

步骤
  1. 打开 Perfetto UI:Perfetto UI
  2. 上传或加载录制的 trace 文件。
  3. 查看时间线、事件、调用栈等信息。

Perfetto UI 可以:

  • 直观地查看系统的事件流。
  • 放大、缩小时间轴,查看详细的每个事件。
  • 根据不同的维度(线程、CPU、事件等)对数据进行过滤。

4.2使用 SQL 分析 Trace 数据

Perfetto 还提供了强大的 SQL 分析库(Trace Processor),可以通过 SQL 查询对 trace 数据进行深度分析。

示例 SQL 查询

-- 获取所有线程的活动时间 SELECT utid, SUM(dur) FROM slice GROUP BY utid;

如何使用 Trace Processor
  1. 在命令行中启动trace_processor

    trace_processor trace_file

  2. 进入查询模式,开始执行 SQL 查询,分析 trace 数据。

什么是PerfettoSQL可以参考 Android perfetto - PerfettoSQL是什么?

5常见使用场景

Perfetto 可以用于以下场景:

  • 性能瓶颈排查:定位 CPU 消耗高、内存泄漏、I/O 阻塞等问题。
  • 卡顿(Jank)分析:通过 trace 数据分析应用卡顿的根本原因(线程阻塞、GC、UI 线程问题等)。
  • 多线程分析:分析线程调度、竞争条件、线程锁等多线程性能问题。
  • 系统级分析:通过操作系统级别的探针,获取调度信息、内存使用情况等。

6学习资源

  • Perfetto 文档Perfetto 官方文档
  • Perfetto GitHub 仓库Perfetto GitHub
  • Perfetto UIPerfetto UI
  • 教程与示例:可以参考 Perfetto GitHub 上的示例,学习如何在不同平台和语言中使用 Perfetto 进行追踪。

7总结

Perfetto 是一个强大的性能分析工具,它通过高效的 tracing 功能帮助开发者深入理解应用和系统的行为,解决复杂的性能问题。通过掌握 Perfetto 的使用方法,我们可以高效地记录、分析和优化应用程序的性能。

8、参考

相关推荐
冰_河17 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android