WeTest —— 手游耗电量测试
2015-07-24 11:57
309 查看
与传统的APP相比,手游的耗电量那可不是盖的,手机还有10%的电,玩局游戏吧,正玩着HIGH呢,马上就要破记录了,无情的手机提示电量耗尽30秒后强制关机,欲哭无泪~,这电到底去哪儿了呢?
工具准备
要想省电先得搞明白电耗哪儿了?准备一个靠谱点的定量分析工具是必不可少的,下面是本人焊的一个吊丝版电量测试工具:
手机电源是一个大容量的充电宝,电压相对恒定的情况下,手机的耗电量是与流过手机的电流成正比的,但单独看手机的电流值是没有意义的,还需与相关的参照物对比才有意义。
耗电因素分析
工具准备好了,那么手游的耗电因素都有哪些呢?CPU、Screen、GPU、Network、LBS、Audio、File/Memory,这些因素是与手游关系比较密切的(好像全了)。下面采用隔离法来逐个分析上面的因素对耗电量的贡献到底有多大?下面所有实验是基于小米2S,测试时关闭无关的功能,删除无关应用,重要配置如下:
由不同手机的硬件不同,不同硬件的功耗也不一样,所以下面基于小米2S的实验只是一些参考,并不能代表所有手机。
CPU
在手机上玩游戏的过程中,CPU通常是比较忙的,在被测机上安装几个游戏,用TOP命令在玩游戏过程中粗略观察一下他们的CPU使用率:
可见这几个游戏的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这一块对手游的整体耗电影响很有限。
耗电因素影响度:
手游如何省电:
套用前段时间比较火的一个句式:用电容易,充电不易,且用且珍惜,上面各个因素都对耗电有或多或少的影响,那么如何做才可以让手游省电呢?这是一个比较深的命题,也不是三两天可以研究透的,这里只是抛砖引玉。
[align=left]合并渲染,减少渲染批次,将多个显示对象合并到一张纹理上,一次性渲染。比如全民飞机大战中的子弹和雷霆战机中满屏的子弹,这些子弹实际上长像差不多,只是位置或角度不太一样。另外,由多个图像合成的一个图案在某些场景中比较固定,那么在这个场景中可以事先直接生成这个纹理,每一帧直接渲染一次即可,而不必每次都重新组合,比如,卡牌类游戏中卡牌,卡牌有角色,有装饰物等组成,但是在某一个场景中可能相对比较固定,这时可以事先绘制一张纹理,后面直接使用,也可以减少渲染批次。[/align]
[align=left]减少渲染的面积,从前面的GPU-实验1中可以看出,在屏幕上绘制的面积越大,消耗越高,这个是美术设计需要注意的。[/align]
[align=left]如果没有开启深度测试,过度绘制(Overdraw)也需要引起注意,所谓过度绘制是指在一个像素点上绘制多次,这会会使用更多的计算资源和内存带宽,但最终只有最顶层绘制是可见的,其他的绘制就浪费了,所以降低过度绘制也可以降低消耗。[/align]
[align=left]有策略的降低FPS,降低FPS可以减少单位时间内的渲染次数。可以考虑在游戏准备界面,排行榜等界面降低FPS,比如天天酷跑,在开始游戏前,FPS被限制为30,游戏开始之后FPS才为60。天天飞车的FPS为30,但是当用户一段时间不点击界面后,FPS自动降低。[/align]
[align=left]控制CPU的使用率,较高的CPU使用率会让CPU进入全速模式,耗电量大增,可以采用多线程分担计算任务,在小米2S(4核)上实验,两个线程,每个线程CPU使用率12%的耗电量远小于一个线程CPU使用率24%。[/align]
[align=left]在3G模式下,应避免频繁收发数据包,一方面精简数据包,减少了收发数据的总量;另一方面可以将多个数据包合并一次发送,也减少了收发数据的次数。[/align]
[align=left]后台省电,当游戏切到后台后,Android系统将不再调用界面的Renderer,也就意味着游戏的渲染线程暂停了,不再消耗电量,这是系统自动暂停的,其他的一些工作线程则需要在代码中做相应的处理,暂停或是减少工作的频度,可以达到后台节能的效果。[/align]
[align=left]考虑到AMOLED屏幕在纯白色的情况下,耗电还是比较厉害的,游戏的色彩上也可以加以关注。[/align]
想了解更多细节,请上腾讯质量开放平台WeTest(http://wetest.qq.com/)。
工具准备
要想省电先得搞明白电耗哪儿了?准备一个靠谱点的定量分析工具是必不可少的,下面是本人焊的一个吊丝版电量测试工具:
手机电源是一个大容量的充电宝,电压相对恒定的情况下,手机的耗电量是与流过手机的电流成正比的,但单独看手机的电流值是没有意义的,还需与相关的参照物对比才有意义。
耗电因素分析
工具准备好了,那么手游的耗电因素都有哪些呢?CPU、Screen、GPU、Network、LBS、Audio、File/Memory,这些因素是与手游关系比较密切的(好像全了)。下面采用隔离法来逐个分析上面的因素对耗电量的贡献到底有多大?下面所有实验是基于小米2S,测试时关闭无关的功能,删除无关应用,重要配置如下:
由不同手机的硬件不同,不同硬件的功耗也不一样,所以下面基于小米2S的实验只是一些参考,并不能代表所有手机。
CPU
在手机上玩游戏的过程中,CPU通常是比较忙的,在被测机上安装几个游戏,用TOP命令在玩游戏过程中粗略观察一下他们的CPU使用率:
游戏 | 游戏过程中CPU占用率 |
雷霆战机 | 17% |
天天酷跑 | 11% |
天天飞车 | 14% |
全民飞机大战 | 11% |
我叫MT Online | 12% |
依据上面的结果,可以看到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,但是使用的频度较低。 |
套用前段时间比较火的一个句式:用电容易,充电不易,且用且珍惜,上面各个因素都对耗电有或多或少的影响,那么如何做才可以让手游省电呢?这是一个比较深的命题,也不是三两天可以研究透的,这里只是抛砖引玉。
[align=left]合并渲染,减少渲染批次,将多个显示对象合并到一张纹理上,一次性渲染。比如全民飞机大战中的子弹和雷霆战机中满屏的子弹,这些子弹实际上长像差不多,只是位置或角度不太一样。另外,由多个图像合成的一个图案在某些场景中比较固定,那么在这个场景中可以事先直接生成这个纹理,每一帧直接渲染一次即可,而不必每次都重新组合,比如,卡牌类游戏中卡牌,卡牌有角色,有装饰物等组成,但是在某一个场景中可能相对比较固定,这时可以事先绘制一张纹理,后面直接使用,也可以减少渲染批次。[/align]
[align=left]减少渲染的面积,从前面的GPU-实验1中可以看出,在屏幕上绘制的面积越大,消耗越高,这个是美术设计需要注意的。[/align]
[align=left]如果没有开启深度测试,过度绘制(Overdraw)也需要引起注意,所谓过度绘制是指在一个像素点上绘制多次,这会会使用更多的计算资源和内存带宽,但最终只有最顶层绘制是可见的,其他的绘制就浪费了,所以降低过度绘制也可以降低消耗。[/align]
[align=left]有策略的降低FPS,降低FPS可以减少单位时间内的渲染次数。可以考虑在游戏准备界面,排行榜等界面降低FPS,比如天天酷跑,在开始游戏前,FPS被限制为30,游戏开始之后FPS才为60。天天飞车的FPS为30,但是当用户一段时间不点击界面后,FPS自动降低。[/align]
[align=left]控制CPU的使用率,较高的CPU使用率会让CPU进入全速模式,耗电量大增,可以采用多线程分担计算任务,在小米2S(4核)上实验,两个线程,每个线程CPU使用率12%的耗电量远小于一个线程CPU使用率24%。[/align]
[align=left]在3G模式下,应避免频繁收发数据包,一方面精简数据包,减少了收发数据的总量;另一方面可以将多个数据包合并一次发送,也减少了收发数据的次数。[/align]
[align=left]后台省电,当游戏切到后台后,Android系统将不再调用界面的Renderer,也就意味着游戏的渲染线程暂停了,不再消耗电量,这是系统自动暂停的,其他的一些工作线程则需要在代码中做相应的处理,暂停或是减少工作的频度,可以达到后台节能的效果。[/align]
[align=left]考虑到AMOLED屏幕在纯白色的情况下,耗电还是比较厉害的,游戏的色彩上也可以加以关注。[/align]
想了解更多细节,请上腾讯质量开放平台WeTest(http://wetest.qq.com/)。
相关文章推荐
- mac os中多版本php切换
- HTTP协议知识总结
- Jquery 定时刷新
- 老叶观点:MySQL开发规范之我见(更新版)
- PHP Framework目录结构
- win10专业版怎么升级到企业版?win10专业版升级到企业版的步骤图解
- Windows USB驱动开发点滴积累备忘录
- inf0q文章集锦(永久更新)
- dsa算法(27完)
- Java finalize方法使用
- 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)
- 关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)
- Iterator Pattern
- 指针
- 2015/7/21 操作糟糕的一天,低卖高买
- Mybatis与spring项目中遇到的奇怪的问题:Loaded JDBC driver: com.mysql.jdbc.Driver
- 关于大型网站技术演进的思考(七)--存储的瓶颈(7)
- 二维数组
- WPF 流文档
- 简单正则表达式练习