Android性能专项测试之耗电量统计

电量消耗的技术框架。

电量统计(1)-原理- http://duanqz.github.io/2015-07-21-batterystats-part1
Android性能专项测试之耗电量统计API- https://blog.csdn.net/itfootball/article/details/49155979

-- Android性能专项测试之耗电量统计API
 6.0的对各个模块的消耗都交给了单独的类去计算,这些类都继承于PowerCalculator抽象类:
蓝牙耗电:BluetoothPowerCalculator.java
摄像头耗电:CameraPowerCalculator.java
Cpu耗电:CpuPowerCalculator.java
手电筒耗电:FlashlightPowerCalculator.java
无线电耗电:MobileRadioPowerCalculator.java
传感器耗电:SensorPowerCalculator.java
Wakelock耗电:WakelockPowerCalculator.java
Wifi耗电:WifiPowerCalculator.java

 BatteryStatsHelper.java- https://github.com/DoctorQ/platform_frameworks_base/blob/android-6.0.0_r1/core/java/com/android/internal/os/BatteryStatsHelper.java
 UserHandle.java- https://github.com/DoctorQ/platform_frameworks_base/blob/android-6.0.0_r1/core/java/android/os/UserHandle.java

电量计算大体可以分为两块:
 1. AppUsage:应用程序耗电量计算,是指每一个应用程序使用硬件模块所产生的耗电量
在BatteryStatsHelper.processAppUsage()这个方法中,实现了应用程序的电量计算(实际上统计的粒度是uid,不同的apk可以运行在同一个uid)。
 2. MiscUsage:其他杂项耗电量计算
所谓杂项,其实就是用户比较关心的一大类,包括:待机的耗电量、亮屏的耗电量、通话的耗电量、Wifi的耗电量等,这个统计是系统层面的, 作为app的开发人员可以忽略掉这部分内容。

 手机耗电量一般涵盖两个方面:硬件层面的功耗和软件层面的电量。手机有很多硬件模块:CPU,蓝牙,GPS,显示屏,Wifi,射频(Cellular Radio)等。
 Android框架层通过一个名为batterystats的系统服务,实现了电量统计的功能。batterystats获取电量的使用信息有两种方式:
 1.被动(push):有些硬件模块(wifi, 蓝牙)在发生状态改变时,通知batterystats记录状态变更的时间点
 2.主动(pull):有些硬件模块(cpu)需要batterystats主动记录时间点,譬如记录Activity的启动和终止时间,就能计算出Activity使用CPU的时间

电量统计服务的代码逻辑涉及到以下android源码:
 frameworks/base/services/java/com/android/server/SystemServer.java
 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
 frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
 frameworks/base/core/java/android/os/BatteryStats.java
 frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
 frameworks/base/core/java/com/android/internal/os/BatteryStatsHelper.java
 frameworks/base/core/res/res/xml/power_profile.xml

分析了以下两个问题:
 1.Android如何启动电量统计服务? Android系统启动 -> AMS启动和注册 -> batterystats启动和注册
 2.Android如何计算耗电量? 并不是直接跟踪电流消耗量,而是采用“单位时间电流量(I)×使用时间(t)”来做近似计算。不同硬件模块的单位时间电流量是需要厂商给定的。

电量统计包含几个重要的功能:信息收集、信息存储和电量计算。
 1.信息收集是指在什么时间点采用什么方式收集电量使用数据;
 2.信息存储按照什么格式存放,存放在什么位置;
 3.电量计算是指根据已经收集的信息,如何计算出不同应用、服务、进程等的电量使用情况;

你可能感兴趣的:(性能优化与测试)