引言:电量消耗控制一直是困扰所有APP开发者的一大难题,其中又以Android平台尤甚。业界同行为此做了非常多的研究与尝试,腾讯自然也不例外。本周大讲堂继续推出省电系列第二篇文章,与大家一起探讨Android开发中的省电窍门。

上篇文章罗列了很多数据,除了通过评测软件跑出来的数据外,还有些实际功耗数据,这些除了用power monitor硬件设备以外,还有是通过软件测出来的。有同学可能要挑战了,除了power monitor,其他软件形式的电量数据都是不可靠的,这种数据拿出来是没有说服力的。挑战的很好,为什么这么说,先来分析下几种可行的电量测试方法:

方法不多,有如下几种:
用电源模拟电池给手机供电,再实时监控,非专业人士这种方法可以直接pass了,投入产出比太低了。

用如monsoon power monitor的硬件设备接在手机电源上来测功耗,仍然太麻烦,而且设备太贵啊有木有,继续pass。

而且上面硬件方式最大的问题是区分不了不同硬件模块的功耗,无法实现精准测试数据。

那么读取/proc, /sys文件的方式呢?这种就更不靠谱了,首先这种方法无法给出实际功耗,也无法解决更新频率问题,另外最重要一点,如gps、cellular及屏幕等模块是没有任何数据可以使用的。当然,这些数据还是非常有用的,不过只能作为辅助功能。

通过BatteryStats、BatteryService等Battery驱动程序都是用的Linux标准的Power Supply驱动程序与上层sys文件系统做接口,主要用于读取sys中电池相关的文件信息。现在大部分电池管理软件都是基于这个实现的。包括无线部门非常牛x的专项工具GT中所提供的电量检测就是读取power_supply/battery下面数据来实现的,不过局限性较大,除了不能分模块以外还对机型有要求(原因后面解释)。

如上图表面上似乎PowerTutor已经超脱于上面所说的各种局限了,他能检测不同模块,而且给出功耗数据。但他的能耗估计实质上是估计功率,再根据功率和时间乘积算出能耗,也就是说最终检测到的功耗数据是估算出来的,而非真实功耗。不过PowerTutor得出的数据其实跟实际数据是非常接近的[1],下图是跑google map和youtube估算结果跟实际测量的功耗,从曲线上看差不多。那是否用PowerTutor就能帮助我们实际展开电量专项测试了呢?


从他的代码来看,功率的计算主要是由PhonePowerCaculator接口定义的,而且根据不同的机型实现了不同的接口,比如getThreegPower函数,只是根据目前3G接口的状态,返回该状态下的固定功率。而固定功率以硬编码的形式固定在DreamConstants.java中,这些固定功率应该是使用专门的设备进行检测出来的[2]。也就是说除了G1、G2和Nexus One,PowerTutor并不能保证准确性。而且可惜的是虽然他们官网表示会支持更多手机类型,但现实是残酷的,他们已经3年没有更新代码了,而且几个主创人员要么毕业工作了,要么换课题了,基本上可以宣告他已经烂尾了。

App电量问题其实在业界也一直困扰着很多同行,这不我在四处寻觅时看到了一位同学,也在寻觅着称手的兵器。

这位同学在跟谁讨教呢?原来是在牛X的Qualcomm公司技术论坛,向他们的产品经理请教电量工具的问题,请允许我为大家介绍Qualcomm移动设备监控工具Trepn Profiler。

trepn profiler的工作原理Qualcomm并没有太详尽的介绍,但其实也并不复杂,如上图,软件通过SnapDragon800+系列移动芯片架构中所使用的特殊EPM电路以及电池电量计芯片(如DS2780 、MAX17048等)直接获取电流数据,可以理解成SnapDragon800+系列芯片专门在如每个cpu核心、数字核心、电量监控等处build in了多个sensors,当开始运行trepn profiler时sensor就开始工作,并将数据通过图表形式展现出来,基本上可以算是从硬件直接获取的数据了

说到这里有必要简单介绍下fuel gauge IC(即电量计芯片),因为手机需要确定电池的可用电量以及充电状态(SOC),主要是根据剩余电量与电池容量的比来确定的,而手机电池经过多次充放电导致电池容量变化,以及电压与电量之间不存在明确的关系。所以为了达到足够高的电量计量精度,引入了fuel gauge IC,下图是现在使用比较广泛的MAXIM DS2786[3]。工作原理就不详述了,有兴趣的自研,市面上一般不是MAXIM的就是TI的,资料都在官网。

不过也基于依赖fuel gauge IC获取数据的原因,电池类型不同芯片肯定不同,手机不同芯片也有可能不同,所以某些设备的数据并不准确,如已知以下几款(发现木有都是三星啊…):

· Samsung Galaxy S III (SCH-I535)

· Samsung Galaxy S4 (SCH-I545)

· Samsung Galaxy S5

· Samsung Galaxy Note II

· Samsung Galaxy Note 3 (SM-N900V)

· DragonBoard (all versions)

· Inforce IFC6410 SBC

推荐使用以下几款经Qualcomm测试确认数据无误的手机:

· Google/ASUS Nexus 7

· LG Nexus 4

· LG Nexus 5

· HTC One (2013)

· Sony Xperia ZL

· HTC Droid DNA

· LG Optimus G Pro

说到这里就可以回答一下为何专项工具GT随身测对有机型要求,因为其中也用到了实时获取电流来判断电量损耗的方法,其中说到经试验暂时只在nexus 1和4上可用,其实也是跟fuel gauge IC有关,太子1和4可用是因为android原生支持的原因。

再回到软件本身,鉴于上面介绍的实现原理,我们可以确定trepn profiler的数据是可靠准确的(相较其他非硬件检测类方法而言),虽然他也无法区分各个模块的功耗(MDP工程机支持分模块监控,手头无设备,详情见附录),但他的优势在于他能同时监控其他硬件指标,于是我们可以从侧面来印证各模块的功耗,先加载检测所有可能相关的硬件模块,通过曲线图来判断电量走势与哪些硬件使用关系最大。

比如下面这张我用谷歌地球的情况,同时检测电量功耗、cpu、gpu、gps、wifi以及屏幕的使用情况可以看到中间有一段时间电量基本再低谷,而其他曲线除了cpu外基本上也是平的,就可以分析得出这段空闲时间cpu使用并不影响多少电量,相反可以发现电量曲线跟粉红色曲线很相近,再仔细一看原来粉红色曲线是GPU使用,那就难怪了。当然我这个图截得不好,纵轴其实是可以以mW为单位的。

所以通过trepn profiler检测到的数据,再加上些个人分析,基本可以满足我们电量专项测试的需求了。不过如果买一台SnapDragon MDP工程机,再用trepn profiler的话还能支持查看各模块的电流、电压情况,再加上已知的功耗及模块对应关系,其实就可以估算出比较准确的各模块实际功耗情况了。但手头没有MDP工程机,只是个人猜测而已。

另外比较令人兴奋的是,trepn profiler还支持eclipse插件,开发测试两相宜。

当然强大的Qualcomm公司可不止只有这点能耐,对于他们的OEMs或合作伙伴,他们有更强大的QEPM电量监控软件,不过实在难以一睹真容,找了张图权且看看,似乎是一整套性能检测方案,通过web端实时查看数据。但考虑到获得授权的可能性,还是作罢了

硬件检测电量测试方法:相比用power monitor这种东西,用Qualcomm的trepn profiler来完成,简单方便而且无成本,最重要的是检测结果是准确可靠的。而且如果能搞一台MDP能得到更详尽和精确的数据。主要问题是存在机型适配的问题。

通过读取系统文件方法:首先也存在机型适配问题,其次频率、支持模块都存在问题,最重要是数据并不能保证准确性。不建议用以做电量专项测试。

通过电量消耗模型估算的方法:以PowerTutor为代表,可以检测不同模块的功耗,而且数据准确度较高。但对不同机型要有不同模型适配(主要是固定功率),而且软件已停止更新。所以如果用适配机型来测电量还是可以接受的,其他机型还是算了。

所以现在看来MDP工程机+trepn profiler是最可行的一种方案,甚至直接只使用trepn profiler的话也不失可行。

但别忘了PowerTutor,虽然他已死,但他的实现方式及思路是非常值得借鉴的,有个韩国棒子称PowerTutor为state of the ART,他将这门art发扬了下去并且做得更好,不过本文暂且不表。

附录(Snapdragon 800(MDP工程机)支持的电量测量范围):

Power Stats are measured in mW or mWh. Power Stat values are given as adjusted values relative to the baseline measurement. Battery Power values can be set to relative values or raw values by toggling the Show Deltas preference.
Trepn Profiler captures different power statistics depending on the hardware.

Follow the device links for a list of corresponding Power Stats:

On this device, power/current values are available for:
n Audio – Power consumed by the audio codec
n Battery Power – Power consumed by the whole system from battery
n Battery Status – Charging status of the battery; automatically selected when the Battery Power data is selected, but not selectable individually
¨ 0 – Not Charging
¨ 1 – Charging (USB)
¨ 2 – Charging (AC)
¨ 3 – Charging (Generic Source)
n CPU – Power consumed by the CPU
n Camera – Power consumed by the camera
n Codec/GPS/Wireless – Power consumed by the codec, camera, GPS, and wireless
n Digital Core/SD Card/USB – Power consumed by the digital core, SD card, USB
n Graphics – Power consumed by the GPU
n Internal Memory – Power consumed by eMMC memory
n LCD Backlight – Power consumed by the display backlight
n SD Card – Power consumed by the micro-SD card
n USB – Power consumed by the USB
n WLAN/BT/FM – Power consumed by Wi-Fi, Bluetooth, and FM radio

[1] L. Zhang and et.al., “Accurate Online Power Estimation and Automatic Battery Behavior Based Power Model Generation for Smartphones,” in Proc. of CODES+ISSS, 2010.

[2] https://github.com/msg555/PowerTutor

[3] www.maximintegrated.com

转自:http://qoofan.com/a/50764.html

如何才能更持久系列之——如何才能准确测量APP的功耗相关推荐

  1. 项目管理excel_项目管理甘特图是什么?怎么做才能更高效?(EXCEL制作甘特图详细步骤)...

    项目管理甘特图是什么?甘特图即Gantt chart,又被称之为横道图.条状图.其命名是由提出者亨利·L·甘特(Henrry L.Ganntt)先生的名字而来的.甘特图是以图示的方式,并通过活动列表和 ...

  2. 短视频剪辑如何才能更吸引人?

    短视频剪辑如何才能更吸引人? [导语]近几年,短视频的火爆大家有目共睹,尤其是抖音平台的崛起,人人都可以成为短视频创作者,大家也越来越喜欢用短视频来记录分享自己生活中的趣事,那么短视频剪辑如何才能更吸 ...

  3. 项目管理甘特图是什么?怎么做才能更高效?(EXCEL制作甘特图详细步骤)

    项目管理甘特图是什么?甘特图即Gantt chart,又被称之为横道图.条状图.其命名是由提出者亨利·L·甘特(Henrry L.Ganntt)先生的名字而来的.甘特图是以图示的方式,并通过活动列表和 ...

  4. 网站优化该做好哪些细节才能更有力的吸引蜘蛛?

    网站优化想要排名高就要现有很好的收录基础,这就需要蜘蛛对网站进行更多更高质量的爬行和抓取,一般网站的权重越高,蜘蛛对网页爬行和深度也就越高,更利于网站收录.那么在网站优化中,能做好哪些细节的优化才能更 ...

  5. 网站如何布局才能更利于提升用户体验?

    随着做互联网的人们越来越多,网站优化也越来越多,同样,网站优化的竞争压力也越来越大,想要让更多的人们了解你的网站,就要保证自己的网站要更突出有亮点,那么这就涉及到网站布局方面来了,接下来,就带大家一起 ...

  6. 如何对待新事物_如何利用这个专栏才能更高效地进步?

    记住,只要你带上个人的主观好恶来看待某个事物,你就立刻停止了成长. 真正的强者,对待任何事物的态度都是『为我所用』,而弱者永远在评价他人. 01 前言 时隔三个月,Steven终于又和大家见面了,不知 ...

  7. 【话题】产品经理如何排期rd任务,才能更好控制产品节奏

    小咖前言: 本文来自pmcaff产品经理群的每晚9点开始的大圆桌话题讨论:"产品经理如何排期rd任务,才能更好控制产品节奏?"你是不是也遇到同样的问题,看看我们小伙伴的回答,是不是 ...

  8. 怎么才能更好的掌握Python这门语言?该怎么学呢?

    人工智能时代的到来,很多文章都会说这么一句:"不会Python,就不要说自己是程序员",这说的有点夸张了.但确实觉得目前Python这个语言值得学习,而且会Python是薪资高的程 ...

  9. 云栖专辑 | 阿里开发者们的第3个感悟:从身边开源开始学习,用过才能更好理解代码

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  10. 在你们看来,信息网络的定级如何才能更好的发展?或者说有什么影响因素使得定级工作不好开展?

    在你们看来,信息网络的定级如何才能更好的发展?或者说有什么影响因素使得定级工作不好开展? 可以从三个层面考虑: (定级工作步骤:定级,备案,建设整改,等级测评,安全监管) 国家层面:国家级会议.重大体 ...

最新文章

  1. 简明python教程购买-简明python教程哪版(python看什么书)
  2. 如何让整个表格高度固定_财务预算太费精力?多亏了这73张财务预算表格模板,让你算量快又准!直接用...
  3. Spring Cloud异常
  4. LeetCode 1469. 寻找所有的独生节点
  5. 【JUnit】Junit命令行执行、参数化执行、Main方法执行
  6. 进程间通信(匿名管道、命名管道、共享内存)
  7. Gitee 上线多项 PR 功能优化,进一步提升审查与提交效率
  8. Qt中QScrollArea控件区域与滑动条的颜色不一致设置
  9. centos7安装mysql客户端
  10. oneno浏览器插件_谷歌浏览器插件Send to OneNote 让Chrome也拥有OneNote的快捷保存功能...
  11. plc通讯的握手信号_PLC工程师教你:从原理搞懂RS485串口通讯
  12. windows默认看图工具不见了
  13. shell(37) : java控制台运行打印颜色字体
  14. 测试测开面试要知道的那些事02
  15. bind dns mysql,linux下bind9.8+dlz+mysql 的dns服务器局域网配置
  16. java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件
  17. Walk Through the Fire,Is there a way out
  18. sqlserver 的查询最近7天的数据 group by 与with的结合 以及系统表的妙用
  19. crontab shell 每5秒执行_linux定时任务crontab 实现每秒执行一次的方法
  20. ICCV 2019 | 沉迷AI换脸?不如来试试“AI换衣”

热门文章

  1. matlab sae模型,发动机平均值模型的三篇SAE论文
  2. 自动对焦模式与af区域模式_什么是自动对焦,不同模式意味着什么?
  3. CSR8811A12-ICXR-R蓝牙芯片
  4. php spider 开发文档,爬虫进阶开发——之技巧篇 - 开发PHPSpider爬虫的常用工具 - 《phpspider开发文档》 - 书栈网 · BookStack...
  5. cad批量 谷歌翻译lisp_LISP批量打开CAD图操作
  6. 博客9-12css2
  7. java初学乍练之用Calendar打印万年历
  8. 静态链接库和动态链接库
  9. matlab平滑处理例题,(完整word版)matlab中smooth函数平滑处理数据实例
  10. 区块链专利申请量断崖式下降:阿里腾讯跌出十强 网心逆市晋身前四