随着游戏内容不断丰富、业务逻辑持续复杂化、画面表现持续升级,功耗问题正在成为移动游戏领域越来越突出的痛点

很多团队都会遇到类似情况:

  • 游戏帧率稳定,但设备发热严重

  • 测试阶段一切正常,但长时间运行后功耗异常

  • 明明做了大量优化,但续航依然不理想

过去一年,我们针对移动游戏功耗问题进行了大量调研与实践,并逐步整理出一套相对可量化的功耗分析方法

这套方法的目标很简单:不仅能看到功耗变化,更能找到功耗产生的真正原因

《移动端Unity游戏功耗调优的破局实践》主要分为三个部分:

1️⃣ 功耗分析工具介绍

2️⃣ 能耗影响因素

3️⃣ 项目中总结的功耗优化 Best Practices

本文先带大家看第一部分:功耗分析工具。

打开网易新闻 查看精彩图片

1

传统功耗分析工具的问题

在很多项目中,比较常见的做法是使用 GOT Online。通过它,我们可以看到类似这样的信息:

  • 整体功耗曲线

  • 测试过程中的功耗趋势变化

打开网易新闻 查看精彩图片

另外,在我们提供的免费性能分析工具 Gears中,也提供了类似的Power 曲线,可以直观查看:

  • 测试过程中的整体功耗走势

  • 最终的平均功耗数值

打开网易新闻 查看精彩图片

这些工具对于宏观观察功耗趋势非常有帮助。但它们有一个非常关键的局限:只能看到功耗变化,但无法告诉你功耗为什么上升。例如:是 GPU 压力过大?还是 CPU 负载过高?又或者是 某个系统模块突然消耗大量能量?

如果无法回答这些问题,功耗优化就很难真正落地。

因此,我们一直在寻找一种能够对功耗进行定量分析的工具,从而明确:到底是哪个模块导致了能耗异常增长。

打开网易新闻 查看精彩图片

2

我们尝试过的几种方案

在调研过程中,我们陆续尝试了多种工具。

1、Trepn Profiler

首先尝试的是 Trepn Profiler。从名字来看,它似乎是一个专门做能耗分析的工具。

打开网易新闻 查看精彩图片

但在实际使用过程中,我们发现:

  • 可采集的数据维度非常有限

  • 基本只能看到少量 CPU 核心频率变化

  • 很难和实际功耗问题建立有效关联

最终,这个工具并没有为我们的分析提供太大帮助,因此被放弃。

2、ADB BatteryStats

随后我们尝试了 ADB 命令行中的 BatteryStats。它可以通过命令行统计设备的电量消耗,并按 进程 UID 输出相关数据,例如:Screen、CPU、Audio、Video、Wi-Fi......

打开网易新闻 查看精彩图片

如果将这些数据整理并做可视化分析,就可以得到类似这样的趋势:斜率越高,对应模块的能耗越大。

这种方式确实能让我们大致判断:

  • 哪些模块的功耗占比较高

  • 功耗趋势是上升还是下降

但它仍然存在两个明显问题:

1️⃣ 数据维度仍然偏抽象

2️⃣ 无法进一步定位具体行为

例如:为什么 CPU 功耗突然升高?是脚本逻辑?动画?UI?还是物理系统?

这些问题,BatteryStats 仍然无法回答。

3、Android Studio Power Rails

后来我们发现了 Android Studio 中的 Power Rails 功能。相比前面两个工具,它的信息要详细得多。

它可以将功耗拆分到多个硬件维度,例如:

  • CPU 大核 / 中核 / 小核

  • GPU

  • Display

打开网易新闻 查看精彩图片

从数据粒度上来说,这已经非常接近我们想要的效果。

Power Rails 也有几个限制

  • 只能在 Google Pixel 设备上使用

  • 被采集的 App 必须是 debuggable

  • 测试时间不能太长,否则数据量会过大

因此在实际项目中使用仍然比较受限。

打开网易新闻 查看精彩图片

3

我们最终推荐的工具:Perfetto

经过多轮测试之后,我们最终更推荐使用 Perfetto 来进行功耗采集。

它的优势主要体现在几个方面:

1、支持更长时间的功耗采集

通过 Perfetto 的网页工具,可以开启:Battery & Power Rails相关选项。

打开网易新闻 查看精彩图片

相比 Android Studio,Perfetto支持更长时间的测试,例如:持续 1 小时的功耗采集。

打开网易新闻 查看精彩图片

对于大多数项目来说,这已经足够覆盖完整测试场景。

2、配置简单

在 Perfetto 的主界面中:

  • 点击 Record new trace

  • 选择 WebUSB 连接手机

  • 点击 Connect new device

  • 选择当前连接的设备

打开网易新闻 查看精彩图片

当界面中出现绿色提示信息时,就表示设备已经连接成功。

随后点击 Start Tracing 开始采集。测试一段时间后点击 Stop,即可生成分析数据。

3、可以直接查看模块功耗排名

在分析结果中,我们可以按照 Average Power 排序查看各模块功耗。

打开网易新闻 查看精彩图片

例如在某些测试场景中:GPU 功耗最高,这就意味着优化重点应该放在:

  • 渲染复杂度

  • Shader

  • DrawCall

  • 分辨率

  • 后处理

而在另一些测试中,我们会看到:CPU 大核功耗占比最高,这通常意味着问题可能来自:

  • 游戏逻辑

  • 动画系统

  • UI 更新

  • 物理系统

  • 资源加载

通过这种方式,我们就可以非常清晰地定位:功耗压力究竟来自哪个模块

4、支持正式版本游戏分析

Perfetto 还有一个非常重要的优势:被采集的应用不需要是 debuggable

也就是说:即使是 应用商店下载的正式版本游戏,也可以直接进行功耗分析。这对于真实项目问题定位来说非常关键。

当然,它同样存在一个限制:功耗采集仍然需要使用 Google Pixel 设备

打开网易新闻 查看精彩图片

4

未完待续

在解决了功耗数据采集问题之后,接下来更关键的是:哪些因素会真正影响游戏功耗?CPU、GPU、屏幕、系统模块分别占多少?哪些优化手段最有效?

在接下来的内容中,我们将基于大量实际项目数据,深入分析:基于工具采集到的数据,分析影响能耗的主要因素以及我们总结的一些 Best Practices。

https://edu.uwa4d.com/course-intro/1/630

打开网易新闻 查看精彩图片

1

打开网易新闻 查看精彩图片

2

打开网易新闻 查看精彩图片

3

打开网易新闻 查看精彩图片

4