一:按照uid粒度类统计。
二:每个uid维护了一堆的时间计数器,有打开和关闭这些时间计数器的方法。具体是:
StopwatchTimer mWifiRunningTimer;
StopwatchTimer mFullWifiLockTimer;
StopwatchTimer mWifiScanTimer;
StopwatchTimer[] mWifiBatchedScanTimer;
StopwatchTimer mWifiMulticastTimer;
StopwatchTimer mAudioTurnedOnTimer;
StopwatchTimer mVideoTurnedOnTimer;
StopwatchTimer mFlashlightTurnedOnTimer;
StopwatchTimer mCameraTurnedOnTimer;
StopwatchTimer mForegroundActivityTimer;
StopwatchTimer[] mProcessStateTimer;
BatchTimer mVibratorOnTimer;
LongSamplingCounter[] mNetworkByteActivityCounters;
LongSamplingCounter[] mNetworkPacketActivityCounters;
LongSamplingCounter mMobileRadioActiveTime;
LongSamplingCounter mMobileRadioActiveCount;
LongSamplingCounter[] mWifiControllerTime =
new LongSamplingCounter[NUM_CONTROLLER_ACTIVITY_TYPES];
LongSamplingCounter[] mBluetoothControllerTime =
new LongSamplingCounter[NUM_CONTROLLER_ACTIVITY_TYPES];
LongSamplingCounter mUserCpuTime = new LongSamplingCounter(mOnBatteryTimeBase);
LongSamplingCounter mSystemCpuTime = new LongSamplingCounter(mOnBatteryTimeBase);
LongSamplingCounter mCpuPower = new LongSamplingCounter(mOnBatteryTimeBase);
LongSamplingCounter[][] mCpuClusterSpeed;
三:相关事件触发(开启或者关闭)时,触发对应时间计数器的方法(打开或者关闭),具体是:
![](https://img.haomeiwen.com/i1784193/f25328e38697da5b.png)
![](https://img.haomeiwen.com/i1784193/392b6a5faf3923ca.png)
四:耗电结果统计
根据时间计数器算出相应耗电项目的数值,具体是:
![](https://img.haomeiwen.com/i1784193/2242ef10f115fe85.png)
具体耗电项目的计算不一样,
比如 cpu会根据 cpu频率 * 单位耗电值 * 时间计数器的时间 算出耗电量
比如 非wifi的数据流量会根据流量值估算耗电量,同样的,wifi情况下,有两种计算方式,一种比较精确,和流量数据无关,一种也是根据流量值来估计耗电量,所以vpn类的产品,耗电量就是这么被计算上去的。
![](https://img.haomeiwen.com/i1784193/04df0a5349bbd0fb.png)
网友评论