Perfetto项目中的ATrace数据源解析:Android系统与应用追踪事件

Perfetto项目中的ATrace数据源解析:Android系统与应用追踪事件

perfetto Performance instrumentation and tracing for Android, Linux and Chrome (read-only mirror of https://android.googlesource.com/platform/external/perfetto/) perfetto 项目地址: https://gitcode.com/gh_mirrors/pe/perfetto

什么是ATrace

ATrace是Android平台上用于系统和应用性能分析的核心追踪机制,它允许开发者在代码中插入标记点来记录执行流程和性能指标。作为Perfetto项目支持的重要数据源之一,ATrace提供了跨Java/Kotlin、Native代码和Android系统内部的多层次追踪能力。

ATrace的工作原理

ATrace通过以下三种方式向系统注入追踪事件:

  1. Java/Kotlin应用:通过android.os.Trace类提供的方法
  2. Native进程:使用NDK中的<trace.h>头文件提供的函数
  3. Android内部进程:通过libcutils/trace.h中的宏定义

这些API最终都会通过libcutils库将事件写入内核的trace_marker接口,Perfetto会捕获这些事件并将其整合到统一的追踪数据中。

ATrace事件类型

系统事件(System Events)

由Android系统内部组件产生,具有以下特点:

  • 按功能模块分组(称为"tags"),如"am"(ActivityManager)、"pm"(PackageManager)
  • 可以通过tag批量启用/禁用相关事件
  • 涵盖系统核心服务的性能数据

应用事件(App Events)

由用户应用程序产生,特点包括:

  • 所有应用事件共享同一个tag:ATRACE_TAG_APP
  • 可以按应用包名精确控制追踪范围
  • 适用于分析特定应用的性能问题

性能考量

使用ATrace需要注意以下性能影响:

  • 每个事件会产生1-10微秒的开销
  • 开销主要来自字符串处理、JNI调用和内核空间切换
  • 在高频调用的代码路径中应谨慎使用

Perfetto团队正在开发新一代的Tracing SDK以优化追踪性能,但在Android平台上目前仍推荐使用现有的ATrace API。

在Perfetto UI中的展示

ATrace事件在Perfetto界面中会显示为:

  • 切片(Slices):表示代码块的开始和结束,显示执行时间
  • 计数器(Counters):表示数值型指标的变化趋势

这些可视化元素会按照进程和线程分组,便于分析执行流和性能瓶颈。

SQL查询示例

Perfetto提供了强大的SQL接口来分析ATrace数据:

切片查询

SELECT s.ts, t.name as thread_name, t.tid, s.name as slice_name, s.dur
FROM slice as s 
LEFT JOIN thread_track as trk ON s.track_id = trk.id
LEFT JOIN thread as t ON trk.utid = t.utid

此查询可获取所有切片事件的时间戳、线程信息和持续时间。

计数器查询

SELECT ts, p.name as process_name, p.pid, t.name as counter_name, c.value
FROM counter as c 
LEFT JOIN process_counter_track as t ON c.track_id = t.id
LEFT JOIN process as p ON t.upid = p.upid

此查询可获取所有计数器事件的值及其所属进程信息。

配置ATrace数据收集

在Perfetto的TraceConfig中,可以通过以下方式配置ATrace:

data_sources {
  config {
    name: "linux.ftrace"
    ftrace_config {
      # 启用特定的系统事件tag
      atrace_categories: "am"  # ActivityManager相关事件
      atrace_categories: "pm"  # PackageManager相关事件

      # 启用特定应用的追踪
      atrace_apps: "com.example.myapp"

      # 启用所有应用的事件
      atrace_apps: "*"
    }
  }
}

最佳实践建议

  1. 针对性启用:只启用真正需要的tag和应用,避免数据过载
  2. 合理设置缓冲区:根据追踪时长调整缓冲区大小
  3. 结合其他数据源:将ATrace与CPU调度、内存等数据源一起使用
  4. 注意时间范围:长时间追踪应考虑使用环形缓冲区

通过合理使用Perfetto中的ATrace支持,开发者可以深入分析Android系统和应用的性能特征,快速定位性能瓶颈。

perfetto Performance instrumentation and tracing for Android, Linux and Chrome (read-only mirror of https://android.googlesource.com/platform/external/perfetto/) perfetto 项目地址: https://gitcode.com/gh_mirrors/pe/perfetto

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲍丁臣Ursa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值