库洛游戏通过 Android Studio Power Profiler 和 ODPM 为《鸣潮》降低了 9.68% 的功耗

《鸣潮》是一款由库洛游戏开发的高保真动作角色扮演游戏。优化功耗对于在长时间游戏会话中持续提供优质用户体验至关重要。

图 1. 《鸣潮》屏幕截图

Android Studio 从 Hedgehog (2023.1.1) 开始引入了功耗分析器 (Power Profiler),它可以帮助开发者根据设备端功耗监控器 (ODPM) 理解功耗数据。

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

图 2. Android Studio Power Profiler 屏幕截图

他们做了什么

库洛游戏首先使用 Android Studio Power Profiler 来了解游戏行为如何影响设备功耗。这一经验促使他们开发了一个基于 Perfetto 和 ODPM 的定制工具,其中包含以下增强功能:

  • 自定义视图 - 开发者可以过滤功耗轨并预设灵活的时间范围。
  • 更好的维护 - 开发者可以将功耗数据上传到他们的定制 QA 系统,并比较不同游戏版本之间的数据。

处理 ODPM 数据

为了访问 ODPM 数据,库洛游戏使用Perfetto Trace Processor (Python) Metric API,将来自 android_powerrails 指标的 30 秒会话的 avg_used_power_mw data(在Pertetto 指标 proto中定义为 AndroidPowerRails)处理成以下格式:

功耗轨 图形质量 FPS 亮度 平均功耗 百分比(每轨/总计)
power.rail.cpu.big 30 474.158mW 14.70%
power.rail.cpu.mid 30 470.916mW 14.60%
power.rail.cpu.little 30 438.662mW 13.60%
power.rail.gpu 30 346.761mW 10.70%
... ... ... ... ... ...

识别高功耗功耗轨

每个功耗轨都没有标准值。为了识别高功耗功耗轨,库洛游戏使用不同的测试用例(包括空闲、运行和战斗)创建了 A/B 测试。通过比较相同功耗轨的值,可以识别出具有明显高值的特定功耗轨。通过比较各种测试用例中的行为差异,功耗问题的根本原因将逐渐被找出。

优化

通过 ODPM 数据,库洛游戏可以衡量每个优化方案的改进:

  • 改变 CPU 核心调度策略并调整不同线程的优先级,以减少大核心的工作负载
  • 预编译 PSO(Pipeline State Object)以减少 CPU 的运行时着色器编译工作负载
  • 实现 PVS(Potentially Visible Sets)剔除以减少 GPU 渲染工作负载
  • 烘焙离线阴影遮挡剔除以减少 GPU 渲染工作负载

为了在相同且可重现的条件下比较测试结果,库洛游戏在测试用例中检索了相同 3D 场景、相同摄像机视角和相同持续时间的 ODPM 数据。

结果

通过利用 ODPM 和功耗分析数据,库洛游戏将总功耗降低了 9.68%,从 9 月发布版本 (0904) 的 3233mW 降至 11 月发布版本 (1.4 final) 的 2920mW。下图详细展示了在 FPS 和图形设置一致的情况下,功耗的降低情况。

图 3. 9 月版本与 11 月版本之间的功耗轨数据差异

ODPM 数据目前仅适用于 Pixel 6 及更高版本的设备,但通过 CPU 使用率、GPU 使用率和 Batterystats 等其他指标,所有 Android 设备都能看到改进。例如,库洛游戏还在 Oppo Reno 5 的相同场景中,GPU 使用率整体降低了 9.6%。

开始使用

您可以从功耗分析器开始,或使用Perfetto Power Rails数据进行高级用例。

ODPM 功耗轨名称是设备特定的。轨名称可能是“S2S_VDD_G3D”;需要对设备硬件有特定了解才能解释相应的功耗监控数据。从 Android API 级别 35 开始,您可以使用PowerMonitor,通过getSupportedPowerMonitors获取。通过 PowerMonitor,您可以检索人类可读标签与每个 OEM 设置的原始功耗轨名称之间的映射。

为了在没有 ODPM 的设备上验证改进,您可以使用 CPU 时钟、GPU 时钟和内存带宽估计值作为功耗的替代指标。

额外资源

优化能效