Android功耗评测系列之——软件评测方案原理

 软件评测方案也有很多种,但核心原理都是同一个。 
      软件评测方案中,所有Android功耗的统计都是通过代码进行估算,没有任何实体电路和硬件设备参与统计汇报。

      这个配置文件存储在Android设备的以下路径中:

/frameworks/base/core/res/res/xml/power_profile.xml

(不同的厂商定制ROM中,此文件的路径可能会稍有不同)

        

      配置文件内容节选示例如下:

 

 

      文件中会详细设定手机中的每个部件在不同工况中的功耗单位值。所以,软件评测准确与否,与该文件息息相关。某些品牌的手机由于造假吹牛成风,故不可用于功耗评测。嗯,你知道我说的是谁。

 

      在电源配置文件中,功耗表示额定电压下的电流消耗量,单位为毫安 (mA),也可用微安(uA) 表示(分数值)。该值应代表电池上消耗的电流,而非与电池消耗的电流不对应的相应电源轨的值。

 

      例如,显示屏电源配置文件列出了当显示屏开启状态下保持最低亮度和最高亮度时需消耗的电流量 (mA)。为了确定显示屏常亮时所需的电源成本(即由显示屏组件所消耗的电池量),框架会跟踪在各个亮度级别下维持的时间,然后将这些时间间隔乘以通过插值算法计算的显示亮度成本。

软件评测的计算方法和原理

      Android系统为了进行电源管理,设计了PowerManagement框架,其中包含BatteryState服务。BatteryStats 会不断地收集信息,并存储这些信息以便在重新启动后继续使用。该服务不会直接跟踪电池中消耗的电流,而是通过收集计时信息来估算不同组件所消耗的电量。

 

该框架使用以下方法收集统计信息:

    · 推送:服务察觉到组件状态发生变化后,会将状态变化推送到 BatteryStats 服务中。

    · 拉取:对于应用使用的 CPU 等组件,框架会在转换点(例如启动活动或停止活动)自动拉取数据以截取快照。

 

      资源消耗与使用资源的应用相关。当多个应用同时使用某项资源(例如防止系统挂起的唤醒锁)时,框架会将资源消耗量分摊到这些应用上,但不一定会均分。

 

      为了避免由于系统关闭事件而丢失电池使用统计信息(这些统计信息可能表明存在电池功耗问题,比如由于电池电量耗尽而关闭),框架会大约每 30 分钟发送一次统计信息。

 

      要确定电源配置文件的有关数值,请使用测量设备耗电量的硬件,并执行需要信息的各种操作。测量执行这些操作时的电量使用情况并计算各项值(在适当情况下与其他基准操作的电量消耗做对比所得的差异值)。

 

      电源配置文件的目的在于适当地估算电量消耗情况,电源配置文件的有关数值以电流(安培)表示。Android 框架用电流乘以子系统处于激活状态的时间,并计算毫安时值,然后将此值用于评估应用/子系统消耗的电池电量。

 

原理似乎不太复杂,那实际中到底是咋算的呢?

 

(以下内容摘自网络,侵删。)

在BatteryStatsHelper.java 中,有这么一个方法:

 

 

processAppUsage()方法中,一个应用的总功耗在这里体现出来了:

      ·        cpu

      ·        Wakelock(保持唤醒锁)

      ·        数据天线(2G/3G/4G)

      ·        WIFI

      ·        蓝牙

      ·        传感器

      ·        相机

      ·        闪光灯

 

      这些数据,将决定着你的应用在耗电排行榜中的位置,以及是否给予用户警告高耗电。这些警告对于应用来说可能是致命的,用户可能因此而卸载应用。

应用总功耗是上述八个统计值的和。这八个统计器同继承自 PowerCalculator.java

具体来说,这八个耗电计算器的算法分别如下:

 

 

posted @ 2018-12-19 22:53  燕十三丶  阅读(494)  评论(0编辑  收藏  举报
AmazingCounters.com