Merge "Add batteryTimeRemaining and chargeTimeRemaining to BatteryUsageStats" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
32a183264b
@@ -37,6 +37,8 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
private final long mStatsStartRealtimeMs;
|
private final long mStatsStartRealtimeMs;
|
||||||
private final double mDischargedPowerLowerBound;
|
private final double mDischargedPowerLowerBound;
|
||||||
private final double mDischargedPowerUpperBound;
|
private final double mDischargedPowerUpperBound;
|
||||||
|
private final long mBatteryTimeRemainingMs;
|
||||||
|
private final long mChargeTimeRemainingMs;
|
||||||
private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
|
private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
|
||||||
private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
|
private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
|
||||||
private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
|
private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
|
||||||
@@ -50,6 +52,8 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah;
|
mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah;
|
||||||
mHistoryBuffer = builder.mHistoryBuffer;
|
mHistoryBuffer = builder.mHistoryBuffer;
|
||||||
mHistoryTagPool = builder.mHistoryTagPool;
|
mHistoryTagPool = builder.mHistoryTagPool;
|
||||||
|
mBatteryTimeRemainingMs = builder.mBatteryTimeRemainingMs;
|
||||||
|
mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs;
|
||||||
|
|
||||||
double totalPower = 0;
|
double totalPower = 0;
|
||||||
|
|
||||||
@@ -109,6 +113,25 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound);
|
return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an approximation for how much run time (in milliseconds) is remaining on
|
||||||
|
* the battery. Returns -1 if no time can be computed: either there is not
|
||||||
|
* enough current data to make a decision, or the battery is currently
|
||||||
|
* charging.
|
||||||
|
*/
|
||||||
|
public long getBatteryTimeRemainingMs() {
|
||||||
|
return mBatteryTimeRemainingMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an approximation for how much time (in milliseconds) remains until the battery
|
||||||
|
* is fully charged. Returns -1 if no time can be computed: either there is not
|
||||||
|
* enough current data to make a decision, or the battery is currently discharging.
|
||||||
|
*/
|
||||||
|
public long getChargeTimeRemainingMs() {
|
||||||
|
return mChargeTimeRemainingMs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully
|
* Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully
|
||||||
* charged), in mAh
|
* charged), in mAh
|
||||||
@@ -156,6 +179,8 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
mDischargePercentage = source.readInt();
|
mDischargePercentage = source.readInt();
|
||||||
mDischargedPowerLowerBound = source.readDouble();
|
mDischargedPowerLowerBound = source.readDouble();
|
||||||
mDischargedPowerUpperBound = source.readDouble();
|
mDischargedPowerUpperBound = source.readDouble();
|
||||||
|
mBatteryTimeRemainingMs = source.readLong();
|
||||||
|
mChargeTimeRemainingMs = source.readLong();
|
||||||
mUidBatteryConsumers = new ArrayList<>();
|
mUidBatteryConsumers = new ArrayList<>();
|
||||||
source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader());
|
source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader());
|
||||||
mSystemBatteryConsumers = new ArrayList<>();
|
mSystemBatteryConsumers = new ArrayList<>();
|
||||||
@@ -194,6 +219,8 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
dest.writeInt(mDischargePercentage);
|
dest.writeInt(mDischargePercentage);
|
||||||
dest.writeDouble(mDischargedPowerLowerBound);
|
dest.writeDouble(mDischargedPowerLowerBound);
|
||||||
dest.writeDouble(mDischargedPowerUpperBound);
|
dest.writeDouble(mDischargedPowerUpperBound);
|
||||||
|
dest.writeLong(mBatteryTimeRemainingMs);
|
||||||
|
dest.writeLong(mChargeTimeRemainingMs);
|
||||||
dest.writeParcelableList(mUidBatteryConsumers, flags);
|
dest.writeParcelableList(mUidBatteryConsumers, flags);
|
||||||
dest.writeParcelableList(mSystemBatteryConsumers, flags);
|
dest.writeParcelableList(mSystemBatteryConsumers, flags);
|
||||||
dest.writeParcelableList(mUserBatteryConsumers, flags);
|
dest.writeParcelableList(mUserBatteryConsumers, flags);
|
||||||
@@ -237,6 +264,8 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
private int mDischargePercentage;
|
private int mDischargePercentage;
|
||||||
private double mDischargedPowerLowerBoundMah;
|
private double mDischargedPowerLowerBoundMah;
|
||||||
private double mDischargedPowerUpperBoundMah;
|
private double mDischargedPowerUpperBoundMah;
|
||||||
|
private long mBatteryTimeRemainingMs = -1;
|
||||||
|
private long mChargeTimeRemainingMs = -1;
|
||||||
private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders =
|
private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders =
|
||||||
new SparseArray<>();
|
new SparseArray<>();
|
||||||
private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders =
|
private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders =
|
||||||
@@ -288,6 +317,26 @@ public final class BatteryUsageStats implements Parcelable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an approximation for how much time (in milliseconds) remains until the battery
|
||||||
|
* is fully discharged.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setBatteryTimeRemainingMs(long batteryTimeRemainingMs) {
|
||||||
|
mBatteryTimeRemainingMs = batteryTimeRemainingMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an approximation for how much time (in milliseconds) remains until the battery
|
||||||
|
* is fully charged.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setChargeTimeRemainingMs(long chargeTimeRemainingMs) {
|
||||||
|
mChargeTimeRemainingMs = chargeTimeRemainingMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the parceled recent history.
|
* Sets the parceled recent history.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* Estimates the battery discharge amounts.
|
* Estimates the battery discharge amounts.
|
||||||
*/
|
*/
|
||||||
public class DischargedPowerCalculator extends PowerCalculator {
|
public class BatteryChargeCalculator extends PowerCalculator {
|
||||||
private final double mBatteryCapacity;
|
private final double mBatteryCapacity;
|
||||||
|
|
||||||
public DischargedPowerCalculator(PowerProfile powerProfile) {
|
public BatteryChargeCalculator(PowerProfile powerProfile) {
|
||||||
mBatteryCapacity = powerProfile.getBatteryCapacity();
|
mBatteryCapacity = powerProfile.getBatteryCapacity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +42,16 @@ public class DischargedPowerCalculator extends PowerCalculator {
|
|||||||
.setDischargedPowerRange(
|
.setDischargedPowerRange(
|
||||||
batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100,
|
batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100,
|
||||||
batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100);
|
batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100);
|
||||||
|
|
||||||
|
final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs);
|
||||||
|
if (batteryTimeRemainingMs != -1) {
|
||||||
|
builder.setBatteryTimeRemainingMs(batteryTimeRemainingMs / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
final long chargeTimeRemainingMs = batteryStats.computeChargeTimeRemaining(rawRealtimeUs);
|
||||||
|
if (chargeTimeRemainingMs != -1) {
|
||||||
|
builder.setChargeTimeRemainingMs(chargeTimeRemainingMs / 1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -55,7 +55,7 @@ public class BatteryUsageStatsProvider {
|
|||||||
mPowerCalculators = new ArrayList<>();
|
mPowerCalculators = new ArrayList<>();
|
||||||
|
|
||||||
// Power calculators are applied in the order of registration
|
// Power calculators are applied in the order of registration
|
||||||
mPowerCalculators.add(new DischargedPowerCalculator(mPowerProfile));
|
mPowerCalculators.add(new BatteryChargeCalculator(mPowerProfile));
|
||||||
mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
|
mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
|
||||||
mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
|
mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
|
||||||
mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
|
mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import org.junit.runner.RunWith;
|
|||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@SmallTest
|
@SmallTest
|
||||||
public class DischargedPowerCalculatorTest {
|
public class BatteryChargeCalculatorTest {
|
||||||
private static final double PRECISION = 0.00001;
|
private static final double PRECISION = 0.00001;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
@@ -40,27 +40,41 @@ public class DischargedPowerCalculatorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDischargeTotals() {
|
public void testDischargeTotals() {
|
||||||
|
BatteryChargeCalculator calculator =
|
||||||
|
new BatteryChargeCalculator(mStatsRule.getPowerProfile());
|
||||||
|
|
||||||
final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
|
final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
|
||||||
|
|
||||||
mStatsRule.setTime(1000, 1000);
|
mStatsRule.setTime(1000, 1000);
|
||||||
batteryStats.resetAllStatsCmdLocked();
|
batteryStats.resetAllStatsCmdLocked();
|
||||||
batteryStats.setNoAutoReset(true);
|
batteryStats.setNoAutoReset(true);
|
||||||
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
|
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
|
||||||
/* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000,
|
/* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0,
|
||||||
1_000_000, 1_000_000);
|
1_000_000, 1_000_000, 1_000_000);
|
||||||
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
|
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
|
||||||
/* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000,
|
/* plugType */ 0, 85, 72, 3700, 3_000_000, 4_000_000, 0,
|
||||||
2_000_000, 2_000_000);
|
1_500_000, 1_500_000, 1_500_000);
|
||||||
|
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
|
||||||
|
/* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0,
|
||||||
|
2_000_000, 2_000_000, 2_000_000);
|
||||||
|
|
||||||
DischargedPowerCalculator calculator =
|
BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator);
|
||||||
new DischargedPowerCalculator(mStatsRule.getPowerProfile());
|
|
||||||
|
|
||||||
final BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator);
|
|
||||||
|
|
||||||
assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10);
|
assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10);
|
||||||
assertThat(batteryUsageStats.getDischargedPowerRange().getLower())
|
assertThat(batteryUsageStats.getDischargedPowerRange().getLower())
|
||||||
.isWithin(PRECISION).of(360.0);
|
.isWithin(PRECISION).of(360.0);
|
||||||
assertThat(batteryUsageStats.getDischargedPowerRange().getUpper())
|
assertThat(batteryUsageStats.getDischargedPowerRange().getUpper())
|
||||||
.isWithin(PRECISION).of(400.0);
|
.isWithin(PRECISION).of(400.0);
|
||||||
|
assertThat(batteryUsageStats.getBatteryTimeRemainingMs()).isEqualTo(8_000_000);
|
||||||
|
assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(-1);
|
||||||
|
|
||||||
|
// Plug in
|
||||||
|
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_CHARGING, 100,
|
||||||
|
BatteryManager.BATTERY_PLUGGED_USB, 80, 72, 3700, 2_400_000, 4_000_000, 100,
|
||||||
|
4_000_000, 4_000_000, 4_000_000);
|
||||||
|
|
||||||
|
batteryUsageStats = mStatsRule.apply(calculator);
|
||||||
|
|
||||||
|
assertThat(batteryUsageStats.getChargeTimeRemainingMs()).isEqualTo(100_000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,6 +23,7 @@ import org.junit.runners.Suite;
|
|||||||
@Suite.SuiteClasses({
|
@Suite.SuiteClasses({
|
||||||
AmbientDisplayPowerCalculatorTest.class,
|
AmbientDisplayPowerCalculatorTest.class,
|
||||||
AudioPowerCalculatorTest.class,
|
AudioPowerCalculatorTest.class,
|
||||||
|
BatteryChargeCalculatorTest.class,
|
||||||
BatteryStatsCpuTimesTest.class,
|
BatteryStatsCpuTimesTest.class,
|
||||||
BatteryStatsBackgroundStatsTest.class,
|
BatteryStatsBackgroundStatsTest.class,
|
||||||
BatteryStatsBinderCallStatsTest.class,
|
BatteryStatsBinderCallStatsTest.class,
|
||||||
@@ -49,7 +50,6 @@ import org.junit.runners.Suite;
|
|||||||
CameraPowerCalculatorTest.class,
|
CameraPowerCalculatorTest.class,
|
||||||
CpuPowerCalculatorTest.class,
|
CpuPowerCalculatorTest.class,
|
||||||
CustomMeasuredPowerCalculatorTest.class,
|
CustomMeasuredPowerCalculatorTest.class,
|
||||||
DischargedPowerCalculatorTest.class,
|
|
||||||
FlashlightPowerCalculatorTest.class,
|
FlashlightPowerCalculatorTest.class,
|
||||||
GnssPowerCalculatorTest.class,
|
GnssPowerCalculatorTest.class,
|
||||||
IdlePowerCalculatorTest.class,
|
IdlePowerCalculatorTest.class,
|
||||||
|
|||||||
Reference in New Issue
Block a user