与传统的APP相比,手游的耗电量那可不是盖的,手机还有10%的电,玩局游戏吧,正玩着HIGH呢,马上就要破记录了,无情的手机提示电量耗尽30秒后强制关机,欲哭无泪~,这电到底去哪儿了呢?
要想省电先得搞明白电耗哪儿了?准备一个靠谱点的定量分析工具是必不可少的,下面是本人焊的一个吊丝版电量测试工具:
手机电源是一个大容量的充电宝,电压相对恒定的情况下,手机的耗电量是与流过手机的电流成正比的,但单独看手机的电流值是没有意义的,还需与相关的参照物对比才有意义。
工具准备好了,那么手游的耗电因素都有哪些呢?CPU、Screen、GPU、Network、LBS、Audio、File/Memory,这些因素是与手游关系比较密切的(好像全了)。下面采用隔离法来逐个分析上面的因素对耗电量的贡献到底有多大?下面所有实验是基于小米2S,测试时关闭无关的功能,删除无关应用,重要配置如下:
由不同手机的硬件不同,不同硬件的功耗也不一样,所以下面基于小米2S的实验只是一些参考,并不能代表所有手机。
在手机上玩游戏的过程中,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处于非全速状态。
目前主要有两种屏幕,IPS屏和三星主推的AMOLED屏,屏幕的亮度对整机耗电影响较大,这个众所周知的,现在很多手机的屏幕亮度是通过光传感器自动调节的,但对手游来说屏幕亮度是其无法控制的,所以这里不作讨论。但是手游的色彩明暗是游戏可控制的,有些游戏色彩偏暗,有些游戏色彩偏明亮,那么游戏的色彩对耗电有没有影响呢?
我制作了5张纯色图片,分别是:黑、红、绿、蓝、白,然后从全民飞机大战和雷霆战机上分别截取了排行榜的屏幕截图:
然后,分别在三星S3(AMOLED屏)和小米2S(IPS)上显示,做屏幕耗电实验,结果如下:
AMOED屏幕的耗电量是与显示色彩是有关系的,而且在两个极端的情况下差距还不小,纯黑和纯白相差了150mA,但是实际游戏中不可能有这种极端情况,全民飞机大战的色彩偏亮,而雷霆战机色彩偏暗,显示两个截图屏幕耗电量相差大约25mA,因为三星手机用户量还是比较多,AMOLED是三星主推的屏幕材质,所以色彩也是耗电要需要考虑的一个因素。
这里所说的GPU泛指手机上的显卡,玩PC游戏的同学都知道显卡对游戏的重要性,PC机上一个好的显卡往往要配一个大功率的电源,好的显卡还要配2-3个风扇散热。
那么在手机上玩游戏时GPU对耗电量的贡献多少呢?带着这个问题,使用cocos2dx引擎做几组实验,实验前测得不启动游戏,保持屏幕正常点亮,手机的耗电量为180mA,下面开始实验。
实验一:
结论:相同条件下,在屏幕上渲染的面积越大,所消耗的电量越高,结合本次试验看,渲染的面积对耗电量贡献很大。
实验二:
结论:在其他条件不变的前提下,降低FPS,可以有效的降低耗电量。
实验三:
结论:渲染内容不变的前提下,合并渲染,减少渲染批次可以减轻CPU和GPU的负担,降低耗电量。
未启动游戏,手机背景耗电180mA,该游戏Demo,不包含网络等其他额外功能,从各个测试项可见GPU的耗电量相比其他因素还是“恐怖”的。
实例:
分别收集两款比较火的手游雷霆战机和全民飞机大战的耗电数据,雷霆战机玩无尽模式,全民大飞机玩,那就打飞机吧,数据如下:
总的来说,雷霆战机耗电量要比全民飞机大战要高,耗电量波形图:
雷霆战机耗电波动较大,多数时候耗电量都在600-700mA,低的时候在400mA上下,高峰时候甚至接近800mA;而全民飞机大战耗电相对平稳,集中在500mA~600mA。
雷霆战机的CPU比全民飞机大战的CPU要高,这是耗电原因的一部分,另外,看一下GPU渲染情况:
全民飞机大战中使用了较多的合并渲染,相比雷霆战机渲染批次减少不少,降低了GPU的负担,也起到了节省功耗的作用,可能也还有其他因素,目前还没有研究到。
下面分别用WIFI和3G持续收发一定量的数据,观察耗电变化。
可见,WIFI下面收发数据的耗电量要远小于3G模式下,不过本实验中的数据收发比较大,而且比较密集,实际游戏中应该不会出现长时间如此密集的收发数据,但是3G模式下来还是应该控制数据传输的量和次数。
音频也是游戏的一个重要部分,游戏中除了背景声还有各种音效,下面就针这种情况分析来测试一下音频对游戏的影响:
上面的声音是直接用手机的扬声器播放的,音量调整到75%,可见声音对耗电量的贡献大约在40mA左右。
下面是模拟手游的内存读写和文件读写操作,游戏中内存操作是比较频繁的,但是文件读写相比内存是要少的,特别是写文件,下面分别设计了两个模拟场景,并记录耗电情况。
从这个模拟结果看,内存读写对耗电的影响很小,文件读写对耗电的贡献也很有限。
虽然不少游戏中有LBS功能,一般用于查找附近的玩家,实际玩游戏过程中使用的并不频繁,甚至是比较少的,所以LBS这一块对手游的整体耗电影响很有限。
因素 | 影响度 | 说明 |
---|---|---|
GPU | 高 | GPU是耗电主要原因,而且是手游可以优化的。 |
CPU | 中 | 观察CPU是否在正常范围,如果游戏使用CPU经常处于全速运行模式,也是非常耗电的。 |
Network | 中 | 3G模式下,持续发送数据耗电还是挺高的,所以要注意观察游戏的流量大小和发包频率。 |
Audio | 低 | 注意观察打开和关闭背景音乐及音效的耗电差。 |
Screen | 低 | 屏幕虽然是手机耗电主要原因,但对游戏来说无法控制,在测试过程注意将亮度设为固定即可,AMOLD屏可以关注游戏色彩明暗。 |
File/Memory | 低 | 目前来看对耗电影响不大。 |
LBS | 低 | 游戏中虽然有LBS,但是使用的频度较低。 |
套用前段时间比较火的一个句式:用电容易,充电不易,且用且珍惜,上面各个因素都对耗电有或多或少的影响,那么如何做才可以让手游省电呢?这是一个比较深的命题,也不是三两天可以研究透的,这里只是抛砖引玉。
想了解你的手游有多耗电吗?上WeTest(http://wetest.qq.com/)为你的手游做一次耗电量测试吧。