1. Perfetto 和 Systrace 的差异
1.1 工具背景
-
Systrace:
-
Android 早期引入的性能分析工具,基于 Linux 内核的
ftrace
机制。 -
主要用于捕获系统级事件(如 CPU 调度、锁争用、Binder 调用等)。
-
通过命令行工具
systrace.py
使用。
-
-
Perfetto:
-
Systrace 的下一代工具,旨在提供更强大的功能和更灵活的扩展性。
-
支持更广泛的数据源(如 Android 系统、Linux 内核、Chrome 浏览器等)。
-
通过 Perfetto UI 或命令行工具
tracebox
使用。
-
1.2 功能对比
特性 | Systrace | Perfetto |
---|---|---|
数据源支持 | 仅支持 ftrace 和 atrace | 支持 ftrace 、atrace 、自定义数据源、Chrome 等 |
配置灵活性 | 较低,仅支持命令行参数 | 高,支持配置文件(config.txt ) |
分析功能 | 简单的时间轴和统计视图 | 强大的 SQL 查询、统计视图、交互式分析 |
文件格式 | .html 文件 | .perfetto-trace 或 .pftrace 文件 |
长时间跟踪 | 不适合,文件大小和性能有限 | 支持长时间跟踪,文件大小可达 GB 级别 |
跨平台支持 | 仅 Android | Android、Linux、Chrome 等 |
2. 优缺点对比
2.1 Systrace
优点:
-
简单易用:配置简单,适合快速分析。
-
低开销:基于事件驱动,性能开销较低。
-
适合短时间跟踪:适合分析短时间内的性能问题(如卡顿、掉帧)。
缺点:
-
功能有限:仅支持预定义的事件,无法自定义数据源。
-
不适合长时间跟踪:文件大小和性能限制较大。
-
分析能力弱:仅提供基本的时间轴和统计视图。
机制导致的优缺点:
-
事件驱动机制:
-
优点:低开销,适合高频率事件跟踪。
-
缺点:无法捕获非事件驱动的数据(如定时采样的 CPU 使用率)。
-
2.2 Perfetto
优点:
-
功能强大:支持多种数据源和自定义跟踪点。
-
灵活性高:支持长时间跟踪和动态配置。
-
分析能力强:提供 SQL 查询、统计视图等高级功能。
-
跨平台支持:适合 Android、Linux、Chrome 等多平台分析。
缺点:
-
配置复杂:需要学习配置文件和高级功能。
-
性能开销较高:长时间跟踪或高频率采样可能增加系统负载。
机制导致的优缺点:
-
事件驱动 + 定时采样 + 自定义数据源:
-
优点:功能强大,适合复杂场景。
-
缺点:配置复杂,性能开销较高。
-
3. 如何添加 Trace 点
3.1 Systrace
Java/Kotlin 代码:
import android.os.Trace;
public void myMethod() {
Trace.beginSection("myMethod");
try {
// 需要跟踪的代码块
} finally {
Trace.endSection();
}
}
C++ 代码:
#include <utils/Trace.h>
void myNativeFunction() {
ATRACE_NAME("myNativeFunction");
// 需要跟踪的代码块
}
3.2 Perfetto
Java/Kotlin 代码:
Perfetto 兼容 Systrace 的 Trace
API,可以直接使用 Trace.beginSection()
和 Trace.endSection()
。
C++ 代码:
使用 TRACE_EVENT
宏:
#include <perfetto/tracing.h>
void myFunction() {
TRACE_EVENT("my_category", "myFunction");
// 需要跟踪的代码块
}
Native 代码:
使用 ATRACE
宏(与 Systrace 相同):
#include <utils/Trace.h>
void myNativeFunction() {
ATRACE_NAME("myNativeFunction");
// 需要跟踪的代码块
}
4. Trace 采样方式的差异
4.1 Systrace
-
采样机制:
-
基于事件驱动,依赖
ftrace
和atrace
。 -
只有在特定事件发生时才会记录数据(如线程状态变化、锁争用等)。
-
-
特点:
-
低开销,适合短时间跟踪。
-
无法自定义采样点,功能有限。
-
4.2 Perfetto
-
采样机制:
-
支持事件驱动、定时采样和自定义数据源。
-
可以定期采集数据(如 CPU 使用率、内存占用等)。
-
-
特点:
-
灵活性高,适合长时间跟踪和复杂场景。
-
性能开销可控,但配置复杂。
-
5. 总结
Systrace:
-
优点:简单易用,低开销,适合短时间跟踪。
-
缺点:功能有限,不适合长时间跟踪。
-
适用场景:快速分析 Android 应用的性能问题(如卡顿、掉帧)。
Perfetto:
-
优点:功能强大,灵活性高,适合长时间跟踪和复杂场景。
-
缺点:配置复杂,性能开销较高。
-
适用场景:深入分析 Android、Linux、Chrome 等多平台的性能问题。
选择建议:
-
如果需要快速分析简单问题,使用 Systrace。
-
如果需要深入分析复杂问题或长时间跟踪,使用 Perfetto。