1、Perfetto 简介
Perfetto是谷歌提供的一个用于性能检测和 trace 文件抓取分析的生产级开源工具包。它可以帮助我们进行应用层面以及系统层面的 trace 文件抓取、native/java 内存剖析。它还提供了一个强大的库能够帮助我们在 web 网页上对抓取的trace 文件进行可视化分析,并使用 SQL 语句对大GB trace 进行查询分析。
2、trace采集
2.1、动态配置
支持开发者通过动态配置的方式抓取自己所关注的性能 trace 文件。
2.2、Android/Linux 平台系统级 trace 采集
在 Android 和 Linux 平台上, Perfetto 通过不同的系统接口来采集详细的性能数据并打包成多个数据源。如:
Kernel tracing:Perfetto 整合了 Linux’s ftrace ,支持抓取 kernel events (如scheduling events, syscalls)。
/proc and /sys pollers:支持采样一段时间内进程和系统的 Cpu 、内存的状态。
battery and energy-usage counters:整合了 Android HAL 层相关模块,采集电池和耗电的情况。
Native heap profiling:一种低开销的heap profiler ,独立于被测进程,通过 hook 内存 malloc/free/new/delete 事件并关联内存调用堆栈分析 native 内存。
Java heap profiling:独立于被测进程,通过 Android Runtime 机制获取 java 堆内存快照,dump出完整的堆内容,分析 java 内存使用情况。
2.3、Tracing SDK
Perfetto 提供的 Tracing SDK 允许 C++ 开发人员使用特定的跟踪点来追踪应用程序的相关 trace。可以使用 Track Event Library 来自定义你想要追踪的事件类型以及相应数据源。
3、trace分析
Perfetto 除了提供 trace 采集的功能,还支持导入、解析、查询 trace 。Trace Processor 基于 SQLite 引擎向外提供表存储能力(SQL tables),能够将 trace 文件保存在数据表中,并让用户可以通过 SQL 语句进行查询分析。可以将 trace 文件解析后的结果通过 JSON 或者 protobuf 的形式输出。
3.1、Trace 可视化
可视化工具 Perfetto UI可以打开和查询已经抓好的 trace 文件。基于 Trace Processor 和SQLite,它支持分析和查询trace文件。
Perfetto UI 打开1次后,就可以离线工作。通过Perfetto UI 打开trace文件后,浏览器在本地解析文件,不需要与服务器交互。