Inserts last 24 hour agrregate data into indexed usage map

Bug: 184807417
Test: make SettingsRoboTests
Test: make SettingsGoogleRoboTests
Change-Id: I7771a43baf74b36a816883dd6b6a91128f827cf4
This commit is contained in:
ykhung
2021-04-13 11:15:25 +08:00
parent aeb5b95705
commit 0d54b75b2c
4 changed files with 76 additions and 14 deletions

View File

@@ -19,10 +19,10 @@ import java.time.Duration;
public final class BatteryDiffEntry { public final class BatteryDiffEntry {
private static final String TAG = "BatteryDiffEntry"; private static final String TAG = "BatteryDiffEntry";
public final long mForegroundUsageTimeInMs; public long mForegroundUsageTimeInMs;
public final long mBackgroundUsageTimeInMs; public long mBackgroundUsageTimeInMs;
public final double mConsumePower; public double mConsumePower;
// A BatteryHistEntry corresponding to this diff usage daata. // A BatteryHistEntry corresponding to this diff usage data.
public final BatteryHistEntry mBatteryHistEntry; public final BatteryHistEntry mBatteryHistEntry;
private double mTotalConsumePower; private double mTotalConsumePower;
@@ -51,6 +51,15 @@ public final class BatteryDiffEntry {
return mPercentOfTotal; return mPercentOfTotal;
} }
/** Clones a new instance. */
public BatteryDiffEntry clone() {
return new BatteryDiffEntry(
this.mForegroundUsageTimeInMs,
this.mBackgroundUsageTimeInMs,
this.mConsumePower,
this.mBatteryHistEntry /*same instance*/);
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder builder = new StringBuilder() final StringBuilder builder = new StringBuilder()

View File

@@ -244,9 +244,42 @@ public final class ConvertUtils {
diffEntry.setTotalConsumePower(totalConsumePower); diffEntry.setTotalConsumePower(totalConsumePower);
} }
} }
insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap);
return resultMap; return resultMap;
} }
private static void insert24HoursData(
final int desiredIndex,
final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
final Map<String, BatteryDiffEntry> resultMap = new HashMap<>();
double totalConsumePower = 0.0;
// Loops for all BatteryDiffEntry and aggregate them together.
for (List<BatteryDiffEntry> entryList : indexedUsageMap.values()) {
for (BatteryDiffEntry entry : entryList) {
final String key = entry.mBatteryHistEntry.getKey();
final BatteryDiffEntry oldBatteryDiffEntry = resultMap.get(key);
// Creates new BatteryDiffEntry if we don't have it.
if (oldBatteryDiffEntry == null) {
resultMap.put(key, entry.clone());
} else {
// Sums up some fields data into the existing one.
oldBatteryDiffEntry.mForegroundUsageTimeInMs +=
entry.mForegroundUsageTimeInMs;
oldBatteryDiffEntry.mBackgroundUsageTimeInMs +=
entry.mBackgroundUsageTimeInMs;
oldBatteryDiffEntry.mConsumePower += entry.mConsumePower;
}
totalConsumePower += entry.mConsumePower;
}
}
final List<BatteryDiffEntry> resultList = new ArrayList<>(resultMap.values());
// Sets total 24 hours consume power data into all BatteryDiffEntry.
for (BatteryDiffEntry entry : resultList) {
entry.setTotalConsumePower(totalConsumePower);
}
indexedUsageMap.put(Integer.valueOf(desiredIndex), resultList);
}
private static long getDiffValue(long v1, long v2, long v3) { private static long getDiffValue(long v1, long v2, long v3) {
return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0); return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0);
} }
@@ -261,10 +294,11 @@ public final class ConvertUtils {
BatteryHistEntry entry3) { BatteryHistEntry entry3) {
if (entry1 != null && entry1 != EMPTY_BATTERY_HIST_ENTRY) { if (entry1 != null && entry1 != EMPTY_BATTERY_HIST_ENTRY) {
return entry1; return entry1;
} } else if (entry2 != null && entry2 != EMPTY_BATTERY_HIST_ENTRY) {
if (entry2 != null && entry2 != EMPTY_BATTERY_HIST_ENTRY) {
return entry2; return entry2;
} } else {
return entry3 != null && entry3 != EMPTY_BATTERY_HIST_ENTRY ? entry3 : null; return entry3 != null && entry3 != EMPTY_BATTERY_HIST_ENTRY
? entry3 : null;
}
} }
} }

View File

@@ -36,4 +36,17 @@ public final class BatteryDiffEntryTest {
assertThat(entry.getPercentOfTotal()).isEqualTo(22.0); assertThat(entry.getPercentOfTotal()).isEqualTo(22.0);
} }
@Test
public void testSetTotalConsumePower_setZeroValue_returnsZeroValue() {
final BatteryDiffEntry entry =
new BatteryDiffEntry(
/*foregroundUsageTimeInMs=*/ 10001L,
/*backgroundUsageTimeInMs=*/ 20002L,
/*consumePower=*/ 22.0,
/*batteryHistEntry=*/ null);
entry.setTotalConsumePower(0);
assertThat(entry.getPercentOfTotal()).isEqualTo(0);
}
} }

View File

@@ -210,17 +210,23 @@ public final class ConvertUtilsTest {
ConvertUtils.getIndexedUsageMap( ConvertUtils.getIndexedUsageMap(
timeSlotSize, batteryHistoryKeys, batteryHistoryMap); timeSlotSize, batteryHistoryKeys, batteryHistoryMap);
assertThat(resultMap).hasSize(2); assertThat(resultMap).hasSize(3);
// Verifies the first timestamp result. // Verifies the first timestamp result.
List<BatteryDiffEntry> entryList = resultMap.get(Integer.valueOf(0)); List<BatteryDiffEntry> entryList = resultMap.get(Integer.valueOf(0));
assertThat(entryList).hasSize(1); assertThat(entryList).hasSize(1);
assertBatteryDiffEntry(entryList.get(0), 100.0, 15L, 25L); assertBatteryDiffEntry(entryList.get(0), 100, 15L, 25L);
// Verifies the second timestamp result. // Verifies the second timestamp result.
entryList = resultMap.get(Integer.valueOf(1)); entryList = resultMap.get(Integer.valueOf(1));
assertThat(entryList).hasSize(3); assertThat(entryList).hasSize(3);
assertBatteryDiffEntry(entryList.get(0), 5.0, 5L, 5L); assertBatteryDiffEntry(entryList.get(0), 5, 5L, 5L);
assertBatteryDiffEntry(entryList.get(1), 75.0, 40L, 50L); assertBatteryDiffEntry(entryList.get(1), 75, 40L, 50L);
assertBatteryDiffEntry(entryList.get(2), 20.0, 15L, 15L); assertBatteryDiffEntry(entryList.get(2), 20, 15L, 15L);
// Verifies the last 24 hours aggregate result.
entryList = resultMap.get(Integer.valueOf(-1));
assertThat(entryList).hasSize(3);
assertBatteryDiffEntry(entryList.get(0), 4, 5L, 5L);
assertBatteryDiffEntry(entryList.get(1), 68, 40L, 50L);
assertBatteryDiffEntry(entryList.get(2), 27, 30L, 40L);
} }
private static BatteryHistEntry createBatteryHistEntry( private static BatteryHistEntry createBatteryHistEntry(
@@ -238,9 +244,9 @@ public final class ConvertUtilsTest {
} }
private static void assertBatteryDiffEntry( private static void assertBatteryDiffEntry(
BatteryDiffEntry entry, double percentOfTotal, BatteryDiffEntry entry, int percentOfTotal,
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) { long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
assertThat(entry.getPercentOfTotal()).isEqualTo(percentOfTotal); assertThat((int) entry.getPercentOfTotal()).isEqualTo(percentOfTotal);
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs); assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs); assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
} }