summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/os/BatteryStats.java30
-rw-r--r--core/java/com/android/internal/os/BatteryChargeCalculator.java21
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java14
-rw-r--r--core/java/com/android/internal/os/BatteryUsageStatsProvider.java2
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));