WeTest —— 手游耗电量测试

与传统的APP相比,手游的耗电量那可不是盖的,手机还有10%的电,玩局游戏吧,正玩着HIGH呢,马上就要破记录了,无情的手机提示电量耗尽30秒后强制关机,欲哭无泪~,这电到底去哪儿了呢?

工具准备
要想省电先得搞明白电耗哪儿了?准备一个靠谱点的定量分析工具是必不可少的,下面是本人焊的一个吊丝版电量测试工具:

手机电源是一个大容量的充电宝,电压相对恒定的情况下,手机的耗电量是与流过手机的电流成正比的,但单独看手机的电流值是没有意义的,还需与相关的参照物对比才有意义。

耗电因素分析
工具准备好了,那么手游的耗电因素都有哪些呢?CPU、Screen、GPU、Network、LBS、Audio、File/Memory,这些因素是与手游关系比较密切的(好像全了)。下面采用隔离法来逐个分析上面的因素对耗电量的贡献到底有多大?下面所有实验是基于小米2S,测试时关闭无关的功能,删除无关应用,重要配置如下:

由不同手机的硬件不同,不同硬件的功耗也不一样,所以下面基于小米2S的实验只是一些参考,并不能代表所有手机。

CPU
在手机上玩游戏的过程中,CPU通常是比较忙的,在被测机上安装几个游戏,用TOP命令在玩游戏过程中粗略观察一下他们的CPU使用率:

游戏

游戏过程中CPU占用率

雷霆战机

17%

天天酷跑

11%

天天飞车

14%

全民飞机大战

11%

我叫MT Online

12%

可见这几个游戏的CPU平均使用率大约分布在11%~17%上下(小米2S是4核手机,25%为其中一核满负载)。下面写一个普通的APP执行斐波那契数学计算,并控制CPU占用率在特定值,比较一下电量的消耗情况,统计结果如下:

依据上面的结果,可以看到CPU占用率较在非全速运行下,耗电量贡献并不是很高,大约20-40mA。但是当CPU占用率达到较高的状态后,CPU的功耗骤然升高,这是因为现代CPU使用动态调整频率和电压来节省电力和减少发热,称为DVFS技术(动态电压和频率调整),所以应控制CPU的使用,尽量让CPU处于非全速状态。

Screen
目前主要有两种屏幕,IPS屏和三星主推的AMOLED屏,屏幕的亮度对整机耗电影响较大,这个众所周知的,现在很多手机的屏幕亮度是通过光传感器自动调节的,但对手游来说屏幕亮度是其无法控制的,所以这里不作讨论。但是手游的色彩明暗是游戏可控制的,有些游戏色彩偏暗,有些游戏色彩偏明亮,那么游戏的色彩对耗电有没有影响呢?
我制作了5张纯色图片,分别是:黑、红、绿、蓝、白,然后从全民飞机大战和雷霆战机上分别截取了排行榜的屏幕截图:

然后,分别在三星S3(AMOLED屏)和小米2S(IPS)上显示,做屏幕耗电实验,结果如下:

AMOED屏幕的耗电量是与显示色彩是有关系的,而且在两个极端的情况下差距还不小,纯黑和纯白相差了150mA,但是实际游戏中不可能有这种极端情况,全民飞机大战的色彩偏亮,而雷霆战机色彩偏暗,显示两个截图屏幕耗电量相差大约25mA,因为三星手机用户量还是比较多,AMOLED是三星主推的屏幕材质,所以色彩也是耗电要需要考虑的一个因素。

GPU
这里所说的GPU泛指手机上的显卡,玩PC游戏的同学都知道显卡对游戏的重要性,PC机上一个好的显卡往往要配一个大功率的电源,好的显卡还要配2-3个风扇散热。

那么在手机上玩游戏时GPU对耗电量的贡献多少呢?带着这个问题,使用cocos2dx引擎做几组实验,实验前测得不启动游戏,保持屏幕正常点亮,手机的耗电量为180mA,下面开始实验。

实验一

结论:相同条件下,在屏幕上渲染的面积越大,所消耗的电量越高,结合本次试验看,渲染的面积对耗电量贡献很大。

实验二

结论:在其他条件不变的前提下,降低FPS,可以有效的降低耗电量。

实验三

结论:渲染内容不变的前提下,合并渲染,减少渲染批次可以减轻CPU和GPU的负担,降低耗电量。
未启动游戏,手机背景耗电180mA,该游戏Demo,不包含网络等其他额外功能,从各个测试项可见GPU的耗电量相比其他因素还是“恐怖”的。

实例
分别收集两款比较火的手游雷霆战机和全民飞机大战的耗电数据,雷霆战机玩无尽模式,全民大飞机玩,那就打飞机吧,数据如下:

总的来说,雷霆战机耗电量要比全民飞机大战要高,耗电量波形图:

雷霆战机耗电波动较大,多数时候耗电量都在600-700mA,低的时候在400mA上下,高峰时候甚至接近800mA;而全民飞机大战耗电相对平稳,集中在500mA~600mA。
雷霆战机的CPU比全民飞机大战的CPU要高,这是耗电原因的一部分,另外,看一下GPU渲染情况:

全民飞机大战中使用了较多的合并渲染,相比雷霆战机渲染批次减少不少,降低了GPU的负担,也起到了节省功耗的作用,可能也还有其他因素,目前还没有研究到。

Network:
下面分别用WIFI和3G持续收发一定量的数据,观察耗电变化。

可见,WIFI下面收发数据的耗电量要远小于3G模式下,不过本实验中的数据收发比较大,而且比较密集,实际游戏中应该不会出现长时间如此密集的收发数据,但是3G模式下来还是应该控制数据传输的量和次数。

Audio:
音频也是游戏的一个重要部分,游戏中除了背景声还有各种音效,下面就针这种情况分析来测试一下音频对游戏的影响:

上面的声音是直接用手机的扬声器播放的,音量调整到75%,可见声音对耗电量的贡献大约在40mA左右。

File/Memory:
下面是模拟手游的内存读写和文件读写操作,游戏中内存操作是比较频繁的,但是文件读写相比内存是要少的,特别是写文件,下面分别设计了两个模拟场景,并记录耗电情况。

从这个模拟结果看,内存读写对耗电的影响很小,文件读写对耗电的贡献也很有限。

LBS:

虽然不少游戏中有LBS功能,一般用于查找附近的玩家,实际玩游戏过程中使用的并不频繁,甚至是比较少的,所以LBS这一块对手游的整体耗电影响很有限。

耗电因素影响度:

因素

影响度

说明

GPU

GPU是耗电主要原因,而且是手游可以优化的。

CPU

观察CPU是否在正常范围,如果游戏使用CPU经常处于全速运行模式,也是非常耗电的。

Network

3G模式下,持续发送数据耗电还是挺高的,所以要注意观察游戏的流量大小和发包频率。

Audio

注意观察打开和关闭背景音乐及音效的耗电差。

Screen

屏幕虽然是手机耗电主要原因,但对游戏来说无法控制,在测试过程注意将亮度设为固定即可,AMOLD屏可以关注游戏色彩明暗。

File/Memory

目前来看对耗电影响不大。

LBS

游戏中虽然有LBS,但是使用的频度较低。


手游如何省电:
套用前段时间比较火的一个句式:用电容易,充电不易,且用且珍惜,上面各个因素都对耗电有或多或少的影响,那么如何做才可以让手游省电呢?这是一个比较深的命题,也不是三两天可以研究透的,这里只是抛砖引玉。
  • 合并渲染,减少渲染批次,将多个显示对象合并到一张纹理上,一次性渲染。比如全民飞机大战中的子弹和雷霆战机中满屏的子弹,这些子弹实际上长像差不多,只是位置或角度不太一样。另外,由多个图像合成的一个图案在某些场景中比较固定,那么在这个场景中可以事先直接生成这个纹理,每一帧直接渲染一次即可,而不必每次都重新组合,比如,卡牌类游戏中卡牌,卡牌有角色,有装饰物等组成,但是在某一个场景中可能相对比较固定,这时可以事先绘制一张纹理,后面直接使用,也可以减少渲染批次。
  • 减少渲染的面积,从前面的GPU-实验1中可以看出,在屏幕上绘制的面积越大,消耗越高,这个是美术设计需要注意的。
  • 如果没有开启深度测试,过度绘制(Overdraw)也需要引起注意,所谓过度绘制是指在一个像素点上绘制多次,这会会使用更多的计算资源和内存带宽,但最终只有最顶层绘制是可见的,其他的绘制就浪费了,所以降低过度绘制也可以降低消耗。
  • 有策略的降低FPS,降低FPS可以减少单位时间内的渲染次数。可以考虑在游戏准备界面,排行榜等界面降低FPS,比如天天酷跑,在开始游戏前,FPS被限制为30,游戏开始之后FPS才为60。天天飞车的FPS为30,但是当用户一段时间不点击界面后,FPS自动降低。
  • 控制CPU的使用率,较高的CPU使用率会让CPU进入全速模式,耗电量大增,可以采用多线程分担计算任务,在小米2S(4核)上实验,两个线程,每个线程CPU使用率12%的耗电量远小于一个线程CPU使用率24%。
  • 在3G模式下,应避免频繁收发数据包,一方面精简数据包,减少了收发数据的总量;另一方面可以将多个数据包合并一次发送,也减少了收发数据的次数。
  • 后台省电,当游戏切到后台后,Android系统将不再调用界面的Renderer,也就意味着游戏的渲染线程暂停了,不再消耗电量,这是系统自动暂停的,其他的一些工作线程则需要在代码中做相应的处理,暂停或是减少工作的频度,可以达到后台节能的效果。
  • 考虑到AMOLED屏幕在纯白色的情况下,耗电还是比较厉害的,游戏的色彩上也可以加以关注。


想了解更多细节,请上腾讯质量开放平台WeTest(http://wetest.qq.com/)。

阅读更多
文章标签: 手游 测试 耗电量
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭