Kuro Games 使用 Android Studio 功耗性能分析器和 ODPM 为 Wuthering Waves 降低了 9.68% 的功耗

鸣潮是一款由 Kuro Games 开发的高保真动作角色扮演游戏。为了持续为长时间的游戏会话提供卓越的用户体验,优化功耗非常重要。

图 1. Wuthering Waves 屏幕截图

Android Studio 从 Hedgehog (2023.1.1) 引入了功耗性能分析器,可帮助开发者根据设备端电源轨监视器 (ODPM) 了解功耗数据。

借助 Android Studio 中的功耗性能分析功能,您还可以有效地对 Android 应用功能的功耗进行 A/B 测试(如下所示)。

图 2. Android Studio 功耗性能分析器屏幕截图

策略

Kuro Games 首先使用 Android Studio 功耗性能分析器来了解游戏行为如何影响设备功耗。基于这段经历,他们开发了一款基于 Perfetto 和 ODPM 的自定义工具,其中包含以下增强功能:

  • 自定义视图 - 开发者可以过滤电源轨和预设灵活的时间范围。
  • 更好地进行维护 - 开发者可以将功耗数据上传到其自定义的质量检查系统,并比较不同游戏版本的数据。

处理 ODPM 数据

如需访问 ODPM 数据,Kuro Games 使用了 Perfetto Trace Processor (Python) Metric APIandroid_powerrails 指标(在 Perfetto 指标 proto 中定义为 AndroidPowerRails)中的 30 秒时段的 avg_used_power_mw data 处理为以下格式:

电源轨 画质 FPS 亮度 平均功耗 百分比(每个轨道 / 总计)
power.rail.cpu.big 30 474.158 毫瓦 14.70%
power.rail.cpu.mid 30 470.916 毫瓦 14.60%
power.rail.cpu.little 30 438.662 毫瓦 13.60%
power.rail.gpu 30 346.761 毫瓦 10.70%

找出功耗高的电源轨

每个电源轨都没有标准值。为了确定功耗较高的电源轨,Kuro Games 使用了不同的测试用例(包括空闲、运行和战斗)创建了 A/B 测试。您可以通过比较同一电源轨的值来确定值明显偏高的特定电源轨。通过比较各种测试用例的行为差异,我们可以逐步找出功耗问题的根本原因。

优化

借助 ODPM 数据,Kuro Games 可以衡量每种优化场景的改进效果:

  • 更改 CPU 核心调度策略并调整不同线程的优先级,以减少大核心的工作负载
  • 预编译 PSO(流水线状态对象),以减少 CPU 的运行时着色器编译工作负载
  • 实现 PVS(可能可见的集合)剔除以减少 GPU 渲染工作负载
  • 离线烘焙阴影遮挡剔除,以减少 GPU 渲染工作负载

为了比较相同且可重现的条件下的测试结果,Kuro Games 使用相同的 3D 场景和相机视角在测试用例中检索了 ODPM 数据,且时长相同。

结果

通过利用 ODPM 和功耗性能分析数据,Kuro Games 将总功耗从 9 月版本(版本 0904)的 3233 毫瓦降低到了 11 月版本(版本 1.4 最终版)的 2920 毫瓦,降低了 9.68%。下图详细介绍了在 FPS 和图形设置保持不变的情况下,这种功耗降低情况。

图 3. 9 月版与 11 月版的电源轨数据差异

ODPM 数据目前仅适用于 Pixel 6 及更新型号的设备,但您可以通过 CPU 使用率、GPU 使用率和 Batterystats 等其他指标,在所有 Android 设备上看到改进。例如,Kuro Games 还发现,在 Oppo Reno 5 上,相同场景的 GPU 使用率总体降低了 9.6%。

开始使用

对于高级用例,您可以从功耗性能分析器Perfetto 功耗轨数据着手。

ODPM 电源轨名称因设备而异。电源轨名称可能类似于“S2S_VDD_G3D”;需要具备特定的设备硬件知识才能解读相应的功耗监控器数据。从 Android API 级别 35 开始,您可以使用 getSupportedPowerMonitors 中的 PowerMonitor。借助 PowerMonitor,您可以检索可读取的标签与各个原始设备制造商 (OEM) 设置的原始电源轨名称之间的映射。

如需验证未启用 ODPM 的设备上的改进,您可以使用 CPU 时钟、GPU 时钟和内存带宽估算值作为功耗的代理。

其他资源

优化功耗效率