Purging battery diff data before calculating perctage and sort.

Bug: 261820602
Test: manual
Change-Id: I958995721238f32d0360861559ca5e1938ce6d3a
This commit is contained in:
Zaiyue Xue
2022-12-15 16:27:13 +08:00
parent 0645cbbbea
commit b9b3dcc0fb
4 changed files with 30 additions and 18 deletions

View File

@@ -32,9 +32,6 @@ public class BatteryDiffData {
@NonNull List<BatteryDiffEntry> systemDiffEntries) {
mAppEntries = appDiffEntries;
mSystemEntries = systemDiffEntries;
setTotalConsumePowerForAllEntries(mAppEntries);
setTotalConsumePowerForAllEntries(mSystemEntries);
sortEntries();
}
public List<BatteryDiffEntry> getAppDiffEntryList() {
@@ -45,6 +42,18 @@ public class BatteryDiffData {
return mSystemEntries;
}
// Sorts entries based on consumed percentage.
void sortEntries() {
Collections.sort(mAppEntries, BatteryDiffEntry.COMPARATOR);
Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
}
// Sets total consume power for app and system entries separately.
void setTotalConsumePower() {
setTotalConsumePowerForAllEntries(mAppEntries);
setTotalConsumePowerForAllEntries(mSystemEntries);
}
// Sets total consume power for each entry.
private void setTotalConsumePowerForAllEntries(List<BatteryDiffEntry> batteryDiffEntries) {
double totalConsumePower = 0.0;
@@ -55,10 +64,4 @@ public class BatteryDiffData {
batteryDiffEntry.setTotalConsumePower(totalConsumePower);
}
}
// Sorts entries based on consumed percentage.
private void sortEntries() {
Collections.sort(mAppEntries, BatteryDiffEntry.COMPARATOR);
Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
}
}

View File

@@ -546,7 +546,7 @@ public final class DataProcessor {
insertDailyUsageDiffData(hourlyBatteryLevelsPerDay, resultMap);
// Insert diff data [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL].
insertAllUsageDiffData(resultMap);
purgeFakeAndHiddenPackages(context, resultMap);
processBatteryDiffData(context, resultMap);
if (!isUsageMapValid(resultMap, hourlyBatteryLevelsPerDay)) {
return null;
}
@@ -651,7 +651,7 @@ public final class DataProcessor {
allUsageMap.put(SELECTED_INDEX_ALL,
generateBatteryDiffData(context, getBatteryHistListFromFromStatsService(context)));
resultMap.put(SELECTED_INDEX_ALL, allUsageMap);
purgeFakeAndHiddenPackages(context, resultMap);
processBatteryDiffData(context, resultMap);
return resultMap;
}
@@ -1232,8 +1232,11 @@ public final class DataProcessor {
}
}
// Removes low percentage data and fake usage data, which will be zero value.
private static void purgeFakeAndHiddenPackages(
// Process every battery diff data in the battery usage result map.
// (1) Removes low percentage data and fake usage data, which will be zero value.
// (2) Sets total consume power, so the usage percentage is updated.
// (3) Sorts the result.
private static void processBatteryDiffData(
final Context context,
final Map<Integer, Map<Integer, BatteryDiffData>> resultMap) {
final Set<CharSequence> hideBackgroundUsageTimeSet =
@@ -1246,16 +1249,18 @@ public final class DataProcessor {
.getHideApplicationSet(context);
resultMap.keySet().forEach(dailyKey -> {
final Map<Integer, BatteryDiffData> dailyUsageMap = resultMap.get(dailyKey);
dailyUsageMap.values().forEach(diffEntryLists -> {
if (diffEntryLists == null) {
dailyUsageMap.values().forEach(batteryDiffData -> {
if (batteryDiffData == null) {
return;
}
purgeFakeAndHiddenPackages(
diffEntryLists.getAppDiffEntryList(), hideBackgroundUsageTimeSet,
batteryDiffData.getAppDiffEntryList(), hideBackgroundUsageTimeSet,
hideApplicationSet);
purgeFakeAndHiddenPackages(
diffEntryLists.getSystemDiffEntryList(), hideBackgroundUsageTimeSet,
batteryDiffData.getSystemDiffEntryList(), hideBackgroundUsageTimeSet,
hideApplicationSet);
batteryDiffData.setTotalConsumePower();
batteryDiffData.sortEntries();
});
});
}

View File

@@ -105,6 +105,8 @@ public final class BatteryUsageBreakdownControllerTest {
mBatteryDiffEntry = spy(mBatteryDiffEntry);
mBatteryUsageBreakdownController.mBatteryDiffData =
new BatteryDiffData(Arrays.asList(mBatteryDiffEntry), Arrays.asList());
mBatteryUsageBreakdownController.mBatteryDiffData.setTotalConsumePower();
mBatteryUsageBreakdownController.mBatteryDiffData.sortEntries();
// Adds fake testing data.
BatteryDiffEntry.sResourceCache.put(
"fakeBatteryDiffEntryKey",

View File

@@ -1076,7 +1076,7 @@ public class DataProcessorTest {
.get(DataProcessor.SELECTED_INDEX_ALL);
assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20);
@@ -1226,6 +1226,8 @@ public class DataProcessorTest {
final BatteryDiffData batteryDiffData = DataProcessor.generateBatteryDiffData(mContext,
DataProcessor.convertToBatteryHistEntry(batteryEntryList, mBatteryUsageStats));
batteryDiffData.setTotalConsumePower();
batteryDiffData.sortEntries();
assertBatteryDiffEntry(
batteryDiffData.getAppDiffEntryList().get(0), 0, /*uid=*/ 2L,