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、参考

相关推荐
00后程序员张1 天前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
悠哉清闲1 天前
不同车型drawable不同
android·开发语言
逍遥德1 天前
如何提高代码可读性
java·开发语言·性能优化·intellij idea·代码规范
00后程序员张1 天前
在 iOS 设备上同时监控 CPU、GPU 与内存的方法
android·ios·小程序·https·uni-app·iphone·webview
测试_AI_一辰1 天前
项目实践笔记 9:打卡/日报Agent项目Bug 修改与稳定性收口(v1.0)
android·开发语言·人工智能·功能测试·ai编程·ab测试
马 孔 多 在下雨1 天前
Kotlin协程进阶王炸之作-Kotlin的协程到底是什么
android·开发语言·kotlin
冬奇Lab1 天前
【Kotlin系列15】多平台开发实战:一次编写,多端运行
android·开发语言·kotlin
Dxy12393102161 天前
告别默认排序:MySQL自定义排序的“炼金术”
android·数据库·mysql
请叫我大虾1 天前
发现一个jdk中ArrayList的小BUG
android·java·bug
一起养小猫1 天前
Flutter for OpenHarmony 实战:双控制系统实现(按钮+键盘)
android·flutter·计算机外设·harmonyos