diff options
Diffstat (limited to 'core/java')
4 files changed, 50 insertions, 17 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 9ec6938de271..eec6810fa8bc 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -3234,6 +3234,11 @@ public abstract class BatteryStats implements Parcelable { public abstract int getMaxLearnedBatteryCapacity() ; /** + * @return The latest learned battery capacity in uAh. + */ + public abstract int getLearnedBatteryCapacity(); + + /** * Return the array of discharge step durations. */ public abstract LevelStepTracker getDischargeLevelStepTracker(); @@ -3925,7 +3930,9 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), - getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), + getLearnedBatteryCapacity(), + getMinLearnedBatteryCapacity(), + getMaxLearnedBatteryCapacity(), screenDozeTime / 1000); @@ -4688,22 +4695,31 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } + final int lastLearnedBatteryCapacity = getLearnedBatteryCapacity(); + if (lastLearnedBatteryCapacity > 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" Last learned battery capacity: "); + sb.append(BatteryStatsHelper.makemAh(lastLearnedBatteryCapacity / 1000)); + sb.append(" mAh"); + pw.println(sb.toString()); + } final int minLearnedBatteryCapacity = getMinLearnedBatteryCapacity(); if (minLearnedBatteryCapacity > 0) { sb.setLength(0); sb.append(prefix); - sb.append(" Min learned battery capacity: "); - sb.append(BatteryStatsHelper.makemAh(minLearnedBatteryCapacity / 1000)); - sb.append(" mAh"); + sb.append(" Min learned battery capacity: "); + sb.append(BatteryStatsHelper.makemAh(minLearnedBatteryCapacity / 1000)); + sb.append(" mAh"); pw.println(sb.toString()); } final int maxLearnedBatteryCapacity = getMaxLearnedBatteryCapacity(); if (maxLearnedBatteryCapacity > 0) { sb.setLength(0); sb.append(prefix); - sb.append(" Max learned battery capacity: "); - sb.append(BatteryStatsHelper.makemAh(maxLearnedBatteryCapacity / 1000)); - sb.append(" mAh"); + sb.append(" Max learned battery capacity: "); + sb.append(BatteryStatsHelper.makemAh(maxLearnedBatteryCapacity / 1000)); + sb.append(" mAh"); pw.println(sb.toString()); } diff --git a/core/java/com/android/internal/os/BatteryChargeCalculator.java b/core/java/com/android/internal/os/BatteryChargeCalculator.java index df7f508e0da0..16f92efb922c 100644 --- a/core/java/com/android/internal/os/BatteryChargeCalculator.java +++ b/core/java/com/android/internal/os/BatteryChargeCalculator.java @@ -28,21 +28,26 @@ import java.util.List; * Estimates the battery discharge amounts. */ public class BatteryChargeCalculator extends PowerCalculator { - private final double mBatteryCapacity; - - public BatteryChargeCalculator(PowerProfile powerProfile) { - mBatteryCapacity = powerProfile.getBatteryCapacity(); - } @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { + builder.setDischargePercentage( + batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)); + + int batteryCapacityMah = batteryStats.getLearnedBatteryCapacity() / 1000; + if (batteryCapacityMah <= 0) { + batteryCapacityMah = batteryStats.getMinLearnedBatteryCapacity() / 1000; + if (batteryCapacityMah <= 0) { + batteryCapacityMah = batteryStats.getEstimatedBatteryCapacity(); + } + } final double dischargedPowerLowerBoundMah = - batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100; + batteryStats.getLowDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; final double dischargedPowerUpperBoundMah = - batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100; + batteryStats.getHighDischargeAmountSinceCharge() * batteryCapacityMah / 100.0; builder.setDischargePercentage( - batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) + batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) .setDischargedPowerRange(dischargedPowerLowerBoundMah, dischargedPowerUpperBoundMah); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 02a290850b6f..db67bab25e78 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -161,7 +161,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - static final int VERSION = 198; + static final int VERSION = 199; // The maximum number of names wakelocks we will keep track of // per uid; once the limit is reached, we batch the remaining wakelocks @@ -1056,6 +1056,7 @@ public class BatteryStatsImpl extends BatteryStats { private int mBatteryVoltageMv = -1; private int mEstimatedBatteryCapacityMah = -1; + private int mLastLearnedBatteryCapacityUah = -1; private int mMinLearnedBatteryCapacityUah = -1; private int mMaxLearnedBatteryCapacityUah = -1; @@ -1142,6 +1143,11 @@ public class BatteryStatsImpl extends BatteryStats { } @Override + public int getLearnedBatteryCapacity() { + return mLastLearnedBatteryCapacityUah; + } + + @Override public int getMinLearnedBatteryCapacity() { return mMinLearnedBatteryCapacityUah; } @@ -11199,6 +11205,7 @@ public class BatteryStatsImpl extends BatteryStats { } else { mEstimatedBatteryCapacityMah = -1; } + mLastLearnedBatteryCapacityUah = -1; mMinLearnedBatteryCapacityUah = -1; mMaxLearnedBatteryCapacityUah = -1; mInteractiveTimer.reset(false, elapsedRealtimeUs); @@ -13799,6 +13806,7 @@ public class BatteryStatsImpl extends BatteryStats { mRecordingHistory = DEBUG; } + mLastLearnedBatteryCapacityUah = chargeFullUah; if (mMinLearnedBatteryCapacityUah == -1) { mMinLearnedBatteryCapacityUah = chargeFullUah; } else { @@ -15066,6 +15074,7 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeCurrentLevel = in.readInt(); mCurrentBatteryLevel = in.readInt(); mEstimatedBatteryCapacityMah = in.readInt(); + mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mLowDischargeAmountSinceCharge = in.readInt(); @@ -15570,6 +15579,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(mDischargeCurrentLevel); out.writeInt(mCurrentBatteryLevel); out.writeInt(mEstimatedBatteryCapacityMah); + out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); out.writeInt(getLowDischargeAmountSinceCharge()); @@ -16071,6 +16081,7 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeStartUs = in.readLong(); mOnBattery = in.readInt() != 0; mEstimatedBatteryCapacityMah = in.readInt(); + mLastLearnedBatteryCapacityUah = in.readInt(); mMinLearnedBatteryCapacityUah = in.readInt(); mMaxLearnedBatteryCapacityUah = in.readInt(); mOnBatteryInternal = false; // we are no longer really running. @@ -16310,6 +16321,7 @@ public class BatteryStatsImpl extends BatteryStats { out.writeLong(mRealtimeStartUs); out.writeInt(mOnBattery ? 1 : 0); out.writeInt(mEstimatedBatteryCapacityMah); + out.writeInt(mLastLearnedBatteryCapacityUah); out.writeInt(mMinLearnedBatteryCapacityUah); out.writeInt(mMaxLearnedBatteryCapacityUah); mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime); diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java index babcea14d0ea..498955983ef2 100644 --- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java +++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java @@ -54,7 +54,7 @@ public class BatteryUsageStatsProvider { mPowerCalculators = new ArrayList<>(); // Power calculators are applied in the order of registration - mPowerCalculators.add(new BatteryChargeCalculator(mPowerProfile)); + mPowerCalculators.add(new BatteryChargeCalculator()); mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile)); mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile)); mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile)); |
