移动App性能测评与优化2.1.1 硬件测试

2.1.1 硬件测试

方法1:通过Android API获取,代码如下:

registerReceiver(receiver,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

这种方法的缺点:获取手机整机耗电,实时性差精度小(只能监控电池电量剩余量和跳变),测试工具本身的性能消耗,手机休眠后无法持续监测。

方法2:通过读取系统电池传感器设备节点。

/sys/class/power_supply/battery/uevent

这种方法的缺点是:测试工具本身的性能消耗,持续采集频率不得超过100Hz,只有部分机型支持此节点(Nexus
4, Nexus One)。

方法3:使用外置电流仪。

这种测试方案可以很好弥补上面两种方案的缺点,不受测试机型限制,不会造成测试方案本身带来的额外的性能消耗,可以达到很高的测试精度,可以达到很高的采集频率。唯一的缺点就是电流仪价格高得感人。

确定了测试方案,下面详细介绍测试环境的搭建,测试工具的使用,以及一些方案落地成果。

1. 硬件测试工具简介

测试工具包括如图2-2所示。图2-2a是直流恒压电源(Agilent 66319D)。图2-2b是GPIB(通用接口总线)。图2-2c是模拟电池。图2-2d是PC端电流软件。

使用方法如下:

1)把假电池装进待测试的手机,如图2-3a所示。

2)假电池出来的两根引线连接到稳压电源的输出接口OUTPUT上引线的接线正负位置,如图2-3b所示。

3)GPIB线连接稳压电源和电脑,如图2-3c所示。

4)整体连接图展示,如图2-3d所示。

完成以上步骤后,PC端装好电流软件,启动,设置相关的参数,然后开启稳压电源,开启手机,就可以进入手机的电流测试了。

 

图2-2 硬件测试工具示意图

 

图2-3 硬件测试工具接线图

采集数据流程如下:

1)Reset电源的初始状态。

2)直流恒压电源设置为4.2V电压值。

3)参数配置完成后按下DLOG按钮记录日志(参数配置见使用手册)。

4)按下Measure按钮开始电流测试,测试完成后保存LOG到自定义目录。

分析结果如下:单击Marker线,会产生2条垂直的标记线,可以任意移动,软件右下方自动产生成2条标记线之间的时间和耗电量,如图2-4所示(耗电量=时间×电流)。

 

图2-4 数据采集软件

2. 案例分享

以上介绍的硬件测试方法,主要适用于对整机场景功耗的量化。下面介绍下我们在使用这种测试方法在实际项目上的应用成果。

【例2-1】分析CPU频率与电量消耗的关系

CPU的功耗会随着频率提升而增加已经是大家的共识,仅仅只考虑CPU的频率而定论它的功耗是否正确呢,对此我们做了一系列的测试,同时控制CPU的频率和使用率,观察在各个场景下的电流值,如图2-5所示。

 

 

图2-5 CPU主频与耗电的关系

通过测试数据发现,在CPU空闲的情况下,CPU频率对耗电的影响几乎是忽略不计的,因此在系统空闲的时候对手机强制降频是不能节电的(单核的情况下,在多核的情况下场景会更加复杂);在CPU使用率30%的情况下,手机达到800MHz以后手机的功耗随CPU频率增加的幅度增加,这时候可以考虑适当降低CPU频率获得更好的功耗控制;在CPU使用达到50%,手机的功耗已经和频率成直线增加,这时候降低CPU频率增加CPU使用率,并不一定会给手机功耗带来很好的成效;所以在选择降频节能方法时,要充分考虑CPU频率和使用率带来的是真的省电还是徒劳无功。

【例2-2】分析手机屏幕背景色与功耗的关系

在手机的正常使用过程中,屏幕其实是最大的耗电元凶,那么显示屏幕材质,以及选择屏幕背景色对手机功耗的影响到底是怎么样的,我们可以通过硬件的测试方式来做一个详细的对比。表2-1是当年主流手机显示屏技术与功耗的对照表。

而不同的显示屏幕实现技术在不同颜色显示上的表现是怎么样的?在不同的屏幕上我们长时间使用的背景色应该怎么选择呢?以下是三星官方给出的OLED和LED的色彩功耗对比图,如图2-6所示。

 

表2-1 各种材质屏幕和功耗的关系

技术     材质类型     功耗

LCD      LCD+LED背光  

      TFT-LCD    

      IPS

      SLCD   

OLED    AMOLED    

      Super AMOLED 

 

 

图2-6 不同屏幕不同颜色与功耗的关系

可以看出全白的时候OLED耗电是LCD的3倍,全黑的时候LCD耗电是OLED的10倍,30%白色的时候两者相当。

针对LCD屏幕,我们只需要关注屏幕亮度值(0~255)带来的耗电,值越大耗电越大;而针对OLED屏幕,我们不但要关注屏幕的亮度值,还需要关注每个像素的RGB值。对此我们也做了一些验证,帮助项目组在适配不同机型时,选择怎么样的色彩,如图2-7所示。

由以上的数据可知SLCD屏幕同图片耗电最亮是最暗的2~3倍,建议在亮度选择的时候使用适当的亮度;Super AMOLED最高亮度时全黑比全白节电60%,建议应用UI尽量采用深色调。

 

图2-7 SLCD对比Super AMOLED屏幕亮度与功耗

时间: 2024-12-25 02:34:40

移动App性能测评与优化2.1.1 硬件测试的相关文章

移动App性能测评与优化导读

前 言 Preface 写作背景 当前移动设备越来越多地涌现在我们日常生活中,像网络购物.充值缴费.新闻资讯.理财.团购.车辆保养等都可以通过移动设备来搞定.通过移动设备可以帮助人们更便捷高效地完成很多事,同时越来越多的需求也希望能通过移动设备来完成,这样也催生了很多工作机会,让IT技术人员能开发更多的App来满足不同用户的不同需求.相对于传统PC,移动设备有其自身的特点,如屏幕小.移动网络复杂且需要收费.电量有限等.因此,在完成用户一系列需求的背后,我们也面临一系列的问题.比如说,如何能保证开

移动App性能测评与优化2.1.2 软件测试

2.1.2 软件测试 上面一节讲述的都是从整机层面去量化并控制手机功耗,相比做App的公司来说做手机ROM的厂商较少.那么从应用的性能优化出发,上面讲述的硬件测试方法就不那么实用了,原因如下: 每个App本身的耗电是微量的,硬件测试方法中仪器本身波动可能无法体现App的功耗: 硬件测试方法只能通过测试整机功耗来体现App耗电,而这样很难避免其他App影响测试结果. 为了解决这个问题,MIG专项测试组从分析Android系统电量统计原理入手,并结合在实际项目中对耗电优化做的工作,来分享下对App功

移动App性能测评与优化1.3.2 问题所在

1.3.2 问题所在 在了解DVM分配释放内存的机制后,根据dumpsys观察到的现象,猜测可能出现了页利用率问题(页内碎片).如图1-13所示,第一行:在开始阶段,内存分配较满.第二行:经过GC(垃圾回收)后,大部分对象被释放,少部分留下来.   图1-13 产生内存碎片 这种情况下可能会产生的问题是,整页的4KB内存中可能只有一个小对象,但统计PrivateDirty/Pss时还是按4KB计算. 在通常的JVM中,借助Compacting GC机制,整理内存对象,将散布的内存移动到一起.但根

移动App性能测评与优化1.4.2 smaps

1.4.2 smaps 由于Android底层基于Linux内核,进程内存信息也和Linux一致,所以Dalvik Heap之外的信息都能够从/proc/<pid>/smaps中取得. 在smaps中,列出了进程的各个内存区域,并根据分配的不同用途做标识,以下是root用户使用cat /proc/<pid>/smaps的一个例子: 788c2000-789bf000 rw-p 00000000 00:00 0          [stack:5113] Size:         

移动App性能测评与优化1.6 本章小结

1.6 本章小结 在这一章里,我们通过对几个案例的分析,基本了解了Android应用的各种内存组成,以及这些成分是如何被消耗的,也总结出了一些节约和优化内存的经验.在这一小节里我们把经验都列出来供读者参考. 内存的主要组成索引: Native Heap:Native代码分配的内存,虚拟机和Android框架本身也会分配 Dalvik Heap:Java代码分配的对象 Dalvik Other:类的数据结构和索引 so mmap:Native代码和常量 dex mmap:Java代码和常量 内存工

移动App性能测评与优化1.5.4 dex文件优化

1.5.4 dex文件优化 为了达到优化的目的,我们需要先了解dex文件的结构.dex文件结构如表1-2所示. 表1-2 dex文件结构 区 域  描 述  内 容 Header             索引区  String Id list 指向Data的偏移量         Type Id list             Method Prototype Id list             Field Id list              Method Id list      

移动App性能测评与优化1.5 案例:优化dex相关内存

1.5 案例:优化dex相关内存 上一节提到,随着代码功能的增加,代码复杂度也在不断地变大,这时我们往往会发现Dalvik Other和Dex Mmap这两部分消耗的内存也在不断增加.在之前的例子里,我们知道这两部分的内存已经接近总内存的一半.在Dalvik Heap已经充分优化的情况下,我们有必要继续研究这部分内存如何优化. 我们已经知道Dalvik Other存放的是类的数据结构及关系,而Dex Mmap是类函数的代码和常量.通常情况下,要减少这部分内存,需要从代码出发,精简无用代码,或者将

移动App性能测评与优化1.2.1 测试流程

1.2.1 测试流程 由于内存测试属于性能测试,Android系统又和Linux有很多相通之处,因此我们可以参考常见的Linux性能测试方法和指标,来制定客户端性能测试方案.常见的测试方法包括Monkey/UIAutomator类的常规压力测试.大数据/操作的峰值压力测试.长时间运行的稳定性测试等.这些方法都可以叠加在内存测试的方案中,观察这类场景下的应用内存情况,经常能够发现类似内存泄漏或OOM的问题. 参考了常见性能测试的方案,以及总结了以往对内存性能测试的经验后,我们总结出了一套进行内存测

移动App性能测评与优化1.4.1 从物理内存到应用

1.4.1 从物理内存到应用 我们首先要了解系统的内存机制,搞清楚物理内存是如何被分配到各个进程的,以及共享内存的机制,等等,理解这些机制对测试及优化都会有很大帮助. 根据Google提供的Android整体架构图,如图1-17所示,可以看到Android系统是基于Linux内核的,因此底层的内存分配及共享机制与Linux基本相同.但由于Android是为移动设备设计的,所以整套架构为了符合移动设备的特性,需要有较低的内存及能耗需求.因此Android只使用了Linux内核,不使用传统Linux