Fix error in MeasuredEnergySnapshot voltage

The voltage algorithm didn't seem quite right; e.g.
if avgVoltageMV == 1, this would give the wrong value.
We presumably should round off, not up. Indeed, the tests
in MeasuredEnergySnapshotTest already do so.

Bug: 173765509
Test: atest BatteryStatsTests
Change-Id: Iefc5011d2df01b2f24dd13145d39fdc4de34753f
This commit is contained in:
Adam Bookatz
2021-03-19 13:15:54 -07:00
parent 1bdbcffaa1
commit 9601383b25

View File

@@ -241,7 +241,7 @@ public class MeasuredEnergySnapshot {
/**
* For a consumer of type {@link EnergyConsumerType#OTHER}, updates
* {@link #mAttributionSnapshots} with freshly measured energies (per uid) and returns the
* charge consumed (in microcouloumbs) between the previously stored values and the passed-in
* charge consumed (in microcoulombs) between the previously stored values and the passed-in
* values.
*
* @param consumerInfo a consumer of type {@link EnergyConsumerType#OTHER}.
@@ -341,11 +341,11 @@ public class MeasuredEnergySnapshot {
return numOrdinals;
}
/** Calculate charge consumption (in microcouloumbs) from a given energy and voltage */
/** Calculate charge consumption (in microcoulombs) from a given energy and voltage */
private long calculateChargeConsumedUC(long deltaEnergyUJ, int avgVoltageMV) {
// To overflow, a 3.7V 10000mAh battery would need to completely drain 69244 times
// since the last snapshot. Round up to the nearest whole long.
return (deltaEnergyUJ * MILLIVOLTS_PER_VOLT + (avgVoltageMV + 1) / 2) / avgVoltageMV;
// since the last snapshot. Round off to the nearest whole long.
return (deltaEnergyUJ * MILLIVOLTS_PER_VOLT + (avgVoltageMV / 2)) / avgVoltageMV;
}
}