Android Performance Analyzer (APA) 是 Android 新的 profiler 和 performance analysis 工具,主要是用在整个 Android 生态的性能分析,特别是偏向 App / Game / Vulkan / GPU / 系统级 trace 场景。
一般它会用在我们熟悉的分析 CPU、GPU、Memory 、Power 、还有 App / Game 与系统行为之间的关系,整体偏向系统级性能观测,比如:CPU core 调度、频率、线程活动、GPU counters、SurfaceFlinger、帧耗时、功耗、截图时间线等。
而 APA 其实是 Samsung Austin Research Center (SARC) 和 LunarG 合作开发的,它依靠 Perfetto 进行系统跟踪,后续还会推出的帧分析/调试功能(依赖 LunarG 的 GFXReconstruct 的图形捕获和回放)。
目前 APA 有两个不同渠道版本:
- 一个是独立的轻量级的独立桌面 App
- 另一个是 Android Studio Panda 4 canary 版本及更高版本
独立的桌面应 App 不需要 Android Studio 项目和 Gradle 构建也可以使用,还提供对录制配置的深度自定义、用于图形分析的内置 Vulkan 层、对 GPU 计数器的深度检查等等,支持 Windows、MacOS 和 Linux 上原生运行 。
这个独立 App 用的 CMP 做的哦:
基本功能
APA 可以选择在启动时或手动触发时从设备捕获跟踪数据,App 上可以选择跟踪中捕获的 GPU 计数器和其他数据,如果需要自定义,还可以配置:
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"
}
}
}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"
}
}
}
然后运行 perfetto --txt -c config.pbtx -o trace_file.perfetto-trace ,
然后通过 APA,你就可以在一个 UI 里分析整个系统的运行情况,比如 CPU 的频率和上面调度的任务,或者检查进程和对应的线程活动,
对于图形密集型应用,APA 提供来自高通、Arm、Imagination 和三星等厂商的 GPU 性能计数器数据,你甚至可以跟踪电池和功耗。
另外,为了准确了解帧的运行时间,SurfaceFlinger 事件提供了对「渲染」和「显示合成管线」的深入挖掘,涵盖从「初始代码获取」到「最终显示」的所有环节,同时借助全新的屏幕截图功能,就可以直观看到问题。
此之外,还可以打开现有的 Perfetto 轨迹,缩放时间轴查看细节,并使用标尺测量工作和事件的持续时间,然后在添加书签和注释,甚至将关键轨迹 PIN 到顶部。
另外 APA 采用项目模型,可以通过 project 跟踪多个测试结果,这在收集 A/B 测试和纵向测试的结果比较实用,并且可以将所有结果集中在一起:
最有意思的是,利用屏幕截图进行可视化导航 ,APA 可以通过屏幕截图进行导航来梳理时间线,通过浏览时间线来快速定位影响性能的区:
另外,APA 还支持渲染通道的 Vulkan Debug Markers*,开发者可以直接在 APA 中显示的跟踪和切片中查看从代码库设置的渲染通道名称:
除此之外,还可以利用 AI 构建 SQL 查询以进行自定义分析 ,APA 支持通过 SQL 查询进行跟踪分析,并附带一项全新的 Perfetto SQL 技能,可以和任何 AI 代理配合使用:
另外还添加了另一项 Perfetto 分析技能,可以回答诸如「为什么我的应用程序启动速度很慢?」之类的高级问题,帮助在分析复杂跟踪记录时找到切入点。
最后还有 FPS 和帧持续时间,可以在跟踪中查看 FPS 和帧持续时间:
当然,最重要的是,现在 APA 渲染跟踪的速度通常比 Android GPU Inspector 快 6 到 26 倍,同时在处理大型跟踪时,APA 的稳定性明显更高。
比如 Forge 团队就利用 APA 找到了需要批量调用 vkCmdBindDescriptorSets,从而将 CPU 设置成本降低了约 50%。反过来又降低了设备的发热量降低了 2-3 倍,延长了会话时间,然后还利用 APA 发现了将字体和 UI 渲染工作转移到 GPU 的场景,提高了可扩展性:
Netmarble 利用 APA 对游戏进行了微调,重点是通过改变着色器的精度来提高性能,最终将某些场景的 GPU 渲染成本降低高达 90%:
Google 自己的 Filament 也类似,通过 APA 测试了各种场景,找到 GPU 处理能力不足的复杂场景,以及如何通过改进纹理压缩和优化几何体来降低复杂度,从而达到 60FPS 的目标帧率,降低了内存消耗:
那它和以前 Android 工具链的关系是什么?其实 Android 很早就有 Perfetto 了,但是 Perfetto UI 对很多 App / 游戏团队来说还是偏底层工具,而 APA 的价值是把 Perfetto 的系统级 trace 能力包装成更面向 Android 开发者的 UI 和工作流。
另外之前 Android GPU Inspector,官方这次也直接拿 APA 和 Android GPU Inspector 做了对比,说 APA 渲染 trace 的速度通常比 AGI 快 6x 到 26x,并且在处理大型 traces 时更稳定,说明它也覆盖了 GPU Inspector。
最后就是 Android Studio System Trace Viewer,APA 会作为 Android Studio Panda 4 Canary 及之后版本的更新版 System Trace Viewer 集成进去,也就是也有他就是全新的 System Trace Viewer,还支持联动 AI ,可以说已经 Android 的性能优化可以更搞笑了。
所以,我选择下载独立 App 。