随着游戏内容不断丰富、业务逻辑持续复杂化、画面表现持续升级,功耗问题正在成为移动游戏领域越来越突出的痛点。
很多团队都会遇到类似情况:
游戏帧率稳定,但设备发热严重
测试阶段一切正常,但长时间运行后功耗异常
明明做了大量优化,但续航依然不理想
过去一年,我们针对移动游戏功耗问题进行了大量调研与实践,并逐步整理出一套相对可量化的功耗分析方法。
这套方法的目标很简单:不仅能看到功耗变化,更能找到功耗产生的真正原因。
《移动端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
热门跟贴