content: package com.android.internal.os;
  
  import android.os.BatteryStats;
  import android.util.Log;
  import android.util.LongSparseArray;
  
  public class MemoryPowerCalculator extends PowerCalculator {
  
      public static final String TAG = "MemoryPowerCalculator";
      private static final boolean DEBUG = BatteryStatsHelper.DEBUG;
      private final double[] powerAverages;
  
      public MemoryPowerCalculator(PowerProfile profile) {
          int numBuckets = profile.getNumElements(PowerProfile.POWER_MEMORY);
          powerAverages = new double[numBuckets];
          for (int i = 0; i < numBuckets; i++) {
              powerAverages[i] = profile.getAveragePower(PowerProfile.POWER_MEMORY, i);
              if (powerAverages[i] == 0 && DEBUG) {
                  Log.d(TAG, "Problem with PowerProfile. Received 0 value in MemoryPowerCalculator");
              }
          }
      }
  
      @Override
      public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
              long rawUptimeUs, int statsType) {}
  
      @Override
      public void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs,
              long rawUptimeUs, int statsType) {
          double totalMah = 0;
          long totalTimeMs = 0;
          LongSparseArray<? extends BatteryStats.Timer> timers = stats.getKernelMemoryStats();
          for (int i = 0; i < timers.size() && i < powerAverages.length; i++) {
              double mAatRail = powerAverages[(int) timers.keyAt(i)];
              long timeMs = timers.valueAt(i).getTotalTimeLocked(rawRealtimeUs, statsType);
              double mAm = (mAatRail * timeMs) / (1000*60);
              if(DEBUG) {
                  Log.d(TAG, "Calculating mAh for bucket " + timers.keyAt(i) + " while unplugged");
                  Log.d(TAG, "Converted power profile number from "
                          + powerAverages[(int) timers.keyAt(i)] + " into " + mAatRail);
                  Log.d(TAG, "Calculated mAm " + mAm);
              }
              totalMah += mAm/60;
              totalTimeMs += timeMs;
          }
          app.usagePowerMah = totalMah;
          app.usageTimeMs = totalTimeMs;
          if (DEBUG) {
              Log.d(TAG, String.format("Calculated total mAh for memory %f while unplugged %d ",
                      totalMah, totalTimeMs));
          }
      }
  }
  