应用耗电的统计

一:按照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;

三:相关事件触发(开启或者关闭)时,触发对应时间计数器的方法(打开或者关闭),具体是:

应用耗电的统计_第1张图片
Paste_Image.png
应用耗电的统计_第2张图片
Paste_Image.png

四:耗电结果统计
根据时间计数器算出相应耗电项目的数值,具体是:

应用耗电的统计_第3张图片
Paste_Image.png

具体耗电项目的计算不一样,
比如 cpu会根据 cpu频率 * 单位耗电值 * 时间计数器的时间 算出耗电量
比如 非wifi的数据流量会根据流量值估算耗电量,同样的,wifi情况下,有两种计算方式,一种比较精确,和流量数据无关,一种也是根据流量值来估计耗电量,所以vpn类的产品,耗电量就是这么被计算上去的。

你可能感兴趣的:(应用耗电的统计)