blob: efd3ab51284b96eeec1dc678ceabbb4ccc7f0f40 [file] [log] [blame]
James Carr2dd7e5e2016-07-20 18:48:39 -07001package com.android.internal.os;
2
3import android.os.BatteryStats;
4import android.util.Log;
5import android.util.LongSparseArray;
6
7public class MemoryPowerCalculator extends PowerCalculator {
8
9 public static final String TAG = "MemoryPowerCalculator";
10 private static final boolean DEBUG = BatteryStatsHelper.DEBUG;
11 private final double[] powerAverages;
12
13 public MemoryPowerCalculator(PowerProfile profile) {
14 int numBuckets = profile.getNumElements(PowerProfile.POWER_MEMORY);
15 powerAverages = new double[numBuckets];
16 for (int i = 0; i < numBuckets; i++) {
17 powerAverages[i] = profile.getAveragePower(PowerProfile.POWER_MEMORY, i);
18 if (powerAverages[i] == 0 && DEBUG) {
19 Log.d(TAG, "Problem with PowerProfile. Received 0 value in MemoryPowerCalculator");
20 }
21 }
22 }
23
24 @Override
25 public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
26 long rawUptimeUs, int statsType) {}
27
28 @Override
29 public void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs,
30 long rawUptimeUs, int statsType) {
31 double totalMah = 0;
32 long totalTimeMs = 0;
33 LongSparseArray<? extends BatteryStats.Timer> timers = stats.getKernelMemoryStats();
34 for (int i = 0; i < timers.size() && i < powerAverages.length; i++) {
35 double mAatRail = powerAverages[(int) timers.keyAt(i)];
36 long timeMs = timers.valueAt(i).getTotalTimeLocked(rawRealtimeUs, statsType);
37 double mAm = (mAatRail * timeMs) / (1000*60);
38 if(DEBUG) {
39 Log.d(TAG, "Calculating mAh for bucket " + timers.keyAt(i) + " while unplugged");
40 Log.d(TAG, "Converted power profile number from "
41 + powerAverages[(int) timers.keyAt(i)] + " into " + mAatRail);
42 Log.d(TAG, "Calculated mAm " + mAm);
43 }
44 totalMah += mAm/60;
45 totalTimeMs += timeMs;
46 }
47 app.usagePowerMah = totalMah;
48 app.usageTimeMs = totalTimeMs;
49 if (DEBUG) {
50 Log.d(TAG, String.format("Calculated total mAh for memory %f while unplugged %d ",
51 totalMah, totalTimeMs));
52 }
53 }
54}