[Battery usage U] Calculate each item pertage for App tab and System tab separately.

Bug: 261820602
Fix: 261820602
Test: manual
Change-Id: Iaab63bd5c6459486645987524d61b69dfca20fd6
This commit is contained in:
Zaiyue Xue
2022-12-08 17:35:12 +08:00
parent 09d471132d
commit 131958c8bc
4 changed files with 28 additions and 45 deletions

View File

@@ -26,23 +26,14 @@ public class BatteryDiffData {
private final List<BatteryDiffEntry> mAppEntries; private final List<BatteryDiffEntry> mAppEntries;
private final List<BatteryDiffEntry> mSystemEntries; private final List<BatteryDiffEntry> mSystemEntries;
/** Constructor for the diff entries which already have totalConsumePower value. */ /** Constructor for the diff entries. */
public BatteryDiffData( public BatteryDiffData(
@NonNull List<BatteryDiffEntry> appDiffEntries, @NonNull List<BatteryDiffEntry> appDiffEntries,
@NonNull List<BatteryDiffEntry> systemDiffEntries) { @NonNull List<BatteryDiffEntry> systemDiffEntries) {
mAppEntries = appDiffEntries; mAppEntries = appDiffEntries;
mSystemEntries = systemDiffEntries; mSystemEntries = systemDiffEntries;
sortEntries(); setTotalConsumePowerForAllEntries(mAppEntries);
} setTotalConsumePowerForAllEntries(mSystemEntries);
/** Constructor for the diff entries which have not set totalConsumePower value. */
public BatteryDiffData(
@NonNull List<BatteryDiffEntry> appDiffEntries,
@NonNull List<BatteryDiffEntry> systemDiffEntries,
final double totalConsumePower) {
mAppEntries = appDiffEntries;
mSystemEntries = systemDiffEntries;
setTotalConsumePowerForAllEntries(totalConsumePower);
sortEntries(); sortEntries();
} }
@@ -55,9 +46,14 @@ public class BatteryDiffData {
} }
// Sets total consume power for each entry. // Sets total consume power for each entry.
private void setTotalConsumePowerForAllEntries(final double totalConsumePower) { private void setTotalConsumePowerForAllEntries(List<BatteryDiffEntry> batteryDiffEntries) {
mAppEntries.forEach(diffEntry -> diffEntry.setTotalConsumePower(totalConsumePower)); double totalConsumePower = 0.0;
mSystemEntries.forEach(diffEntry -> diffEntry.setTotalConsumePower(totalConsumePower)); for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
totalConsumePower += batteryDiffEntry.mConsumePower;
}
for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
batteryDiffEntry.setTotalConsumePower(totalConsumePower);
}
} }
// Sorts entries based on consumed percentage. // Sorts entries based on consumed percentage.

View File

@@ -372,7 +372,7 @@ public final class DataProcessor {
@VisibleForTesting @VisibleForTesting
static long[] findNearestTimestamp(final List<Long> timestamps, final long target) { static long[] findNearestTimestamp(final List<Long> timestamps, final long target) {
final long[] results = new long[] {Long.MIN_VALUE, Long.MAX_VALUE}; final long[] results = new long[]{Long.MIN_VALUE, Long.MAX_VALUE};
// Searches the nearest lower and upper timestamp value. // Searches the nearest lower and upper timestamp value.
timestamps.forEach(timestamp -> { timestamps.forEach(timestamp -> {
if (timestamp <= target && timestamp > results[0]) { if (timestamp <= target && timestamp > results[0]) {
@@ -398,7 +398,7 @@ public final class DataProcessor {
} }
/** /**
* Returns whether currentSlot will be used in daily chart. * Returns whether currentSlot will be used in daily chart.
*/ */
@VisibleForTesting @VisibleForTesting
static boolean isForDailyChart(final boolean isStartOrEnd, final long currentSlot) { static boolean isForDailyChart(final boolean isStartOrEnd, final long currentSlot) {
@@ -468,13 +468,11 @@ public final class DataProcessor {
userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE; userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
final List<BatteryDiffEntry> appEntries = new ArrayList<>(); final List<BatteryDiffEntry> appEntries = new ArrayList<>();
final List<BatteryDiffEntry> systemEntries = new ArrayList<>(); final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
double totalConsumePower = 0f;
double consumePowerFromOtherUsers = 0f; double consumePowerFromOtherUsers = 0f;
for (BatteryHistEntry entry : batteryHistEntryList) { for (BatteryHistEntry entry : batteryHistEntryList) {
final boolean isFromOtherUsers = isConsumedFromOtherUsers( final boolean isFromOtherUsers = isConsumedFromOtherUsers(
currentUserId, workProfileUserId, entry); currentUserId, workProfileUserId, entry);
totalConsumePower += entry.mConsumePower;
if (isFromOtherUsers) { if (isFromOtherUsers) {
consumePowerFromOtherUsers += entry.mConsumePower; consumePowerFromOtherUsers += entry.mConsumePower;
} else { } else {
@@ -504,7 +502,7 @@ public final class DataProcessor {
return null; return null;
} }
return new BatteryDiffData(appEntries, systemEntries, totalConsumePower); return new BatteryDiffData(appEntries, systemEntries);
} }
/** /**
@@ -588,9 +586,7 @@ public final class DataProcessor {
|| (entry.getConsumedPower() == 0 || (entry.getConsumedPower() == 0
&& (foregroundMs != 0 || backgroundMs != 0)); && (foregroundMs != 0 || backgroundMs != 0));
}) })
.map(entry -> ConvertUtils.convertToBatteryHistEntry( .map(entry -> ConvertUtils.convertToBatteryHistEntry(entry, batteryUsageStats))
entry,
batteryUsageStats))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@@ -949,7 +945,6 @@ public final class DataProcessor {
allBatteryHistEntryKeys.addAll(nextBatteryHistMap.keySet()); allBatteryHistEntryKeys.addAll(nextBatteryHistMap.keySet());
allBatteryHistEntryKeys.addAll(nextTwoBatteryHistMap.keySet()); allBatteryHistEntryKeys.addAll(nextTwoBatteryHistMap.keySet());
double totalConsumePower = 0.0;
double consumePowerFromOtherUsers = 0f; double consumePowerFromOtherUsers = 0f;
// Calculates all packages diff usage data in a specific time slot. // Calculates all packages diff usage data in a specific time slot.
for (String key : allBatteryHistEntryKeys) { for (String key : allBatteryHistEntryKeys) {
@@ -1028,7 +1023,6 @@ public final class DataProcessor {
backgroundUsageConsumePower = backgroundUsageConsumePower * ratio; backgroundUsageConsumePower = backgroundUsageConsumePower * ratio;
cachedUsageConsumePower = cachedUsageConsumePower * ratio; cachedUsageConsumePower = cachedUsageConsumePower * ratio;
} }
totalConsumePower += consumePower;
final boolean isFromOtherUsers = isConsumedFromOtherUsers( final boolean isFromOtherUsers = isConsumedFromOtherUsers(
currentUserId, workProfileUserId, selectedBatteryEntry); currentUserId, workProfileUserId, selectedBatteryEntry);
@@ -1061,9 +1055,7 @@ public final class DataProcessor {
return null; return null;
} }
final BatteryDiffData resultDiffData = return new BatteryDiffData(appEntries, systemEntries);
new BatteryDiffData(appEntries, systemEntries, totalConsumePower);
return resultDiffData;
} }
private static boolean isConsumedFromOtherUsers( private static boolean isConsumedFromOtherUsers(
@@ -1078,7 +1070,6 @@ public final class DataProcessor {
@Nullable @Nullable
private static BatteryDiffData getAccumulatedUsageDiffData( private static BatteryDiffData getAccumulatedUsageDiffData(
final Collection<BatteryDiffData> diffEntryListData) { final Collection<BatteryDiffData> diffEntryListData) {
double totalConsumePower = 0f;
final Map<String, BatteryDiffEntry> diffEntryMap = new HashMap<>(); final Map<String, BatteryDiffEntry> diffEntryMap = new HashMap<>();
final List<BatteryDiffEntry> appEntries = new ArrayList<>(); final List<BatteryDiffEntry> appEntries = new ArrayList<>();
final List<BatteryDiffEntry> systemEntries = new ArrayList<>(); final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
@@ -1089,18 +1080,14 @@ public final class DataProcessor {
} }
for (BatteryDiffEntry entry : diffEntryList.getAppDiffEntryList()) { for (BatteryDiffEntry entry : diffEntryList.getAppDiffEntryList()) {
computeUsageDiffDataPerEntry(entry, diffEntryMap); computeUsageDiffDataPerEntry(entry, diffEntryMap);
totalConsumePower += entry.mConsumePower;
} }
for (BatteryDiffEntry entry : diffEntryList.getSystemDiffEntryList()) { for (BatteryDiffEntry entry : diffEntryList.getSystemDiffEntryList()) {
computeUsageDiffDataPerEntry(entry, diffEntryMap); computeUsageDiffDataPerEntry(entry, diffEntryMap);
totalConsumePower += entry.mConsumePower;
} }
} }
final Collection<BatteryDiffEntry> diffEntryList = diffEntryMap.values(); final Collection<BatteryDiffEntry> diffEntryList = diffEntryMap.values();
for (BatteryDiffEntry entry : diffEntryList) { for (BatteryDiffEntry entry : diffEntryList) {
// Sets total daily consume power data into all BatteryDiffEntry.
entry.setTotalConsumePower(totalConsumePower);
if (entry.isSystemEntry()) { if (entry.isSystemEntry()) {
systemEntries.add(entry); systemEntries.add(entry);
} else { } else {

View File

@@ -211,7 +211,7 @@ public final class BatteryUsageBreakdownControllerTest {
SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM, SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
SettingsEnums.OPEN_BATTERY_USAGE, SettingsEnums.OPEN_BATTERY_USAGE,
/* package name */ "none", /* package name */ "none",
/* percentage of total */ 0); /* percentage of total */ 100);
} }
@Test @Test
@@ -227,7 +227,7 @@ public final class BatteryUsageBreakdownControllerTest {
SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
SettingsEnums.OPEN_BATTERY_USAGE, SettingsEnums.OPEN_BATTERY_USAGE,
/* package name */ "none", /* package name */ "none",
/* percentage of total */ 0); /* percentage of total */ 100);
} }
@Test @Test

View File

@@ -671,19 +671,19 @@ public class DataProcessorTest {
.get(DataProcessor.SELECTED_INDEX_ALL); .get(DataProcessor.SELECTED_INDEX_ALL);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L, resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 40.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
/*foregroundUsageConsumePower=*/ 14, /*foregroundServiceUsageConsumePower=*/ 9, /*foregroundUsageConsumePower=*/ 14, /*foregroundServiceUsageConsumePower=*/ 9,
/*backgroundUsageConsumePower=*/ 9, /*cachedUsageConsumePower=*/ 8, /*backgroundUsageConsumePower=*/ 9, /*cachedUsageConsumePower=*/ 8,
/*foregroundUsageTimeInMs=*/ 30, /*backgroundUsageTimeInMs=*/ 40); /*foregroundUsageTimeInMs=*/ 30, /*backgroundUsageTimeInMs=*/ 40);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 4L, resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 4L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 40.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
/*foregroundUsageConsumePower=*/ 8, /*foregroundServiceUsageConsumePower=*/ 8, /*foregroundUsageConsumePower=*/ 8, /*foregroundServiceUsageConsumePower=*/ 8,
/*backgroundUsageConsumePower=*/ 8, /*cachedUsageConsumePower=*/ 8, /*backgroundUsageConsumePower=*/ 8, /*cachedUsageConsumePower=*/ 8,
/*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5); /*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L, resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L,
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 20.0, ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5, /*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5,
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5, /*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
/*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60); /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
@@ -697,19 +697,19 @@ public class DataProcessorTest {
resultDiffData = resultMap.get(1).get(DataProcessor.SELECTED_INDEX_ALL); resultDiffData = resultMap.get(1).get(DataProcessor.SELECTED_INDEX_ALL);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 4L, resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 4L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 66.66666666666666,
/*foregroundUsageConsumePower=*/ 8, /*foregroundServiceUsageConsumePower=*/ 8, /*foregroundUsageConsumePower=*/ 8, /*foregroundServiceUsageConsumePower=*/ 8,
/*backgroundUsageConsumePower=*/ 8, /*cachedUsageConsumePower=*/ 8, /*backgroundUsageConsumePower=*/ 8, /*cachedUsageConsumePower=*/ 8,
/*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5); /*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 2L, resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 2L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 25.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 33.33333333333333,
/*foregroundUsageConsumePower=*/ 9, /*foregroundServiceUsageConsumePower=*/ 4, /*foregroundUsageConsumePower=*/ 9, /*foregroundServiceUsageConsumePower=*/ 4,
/*backgroundUsageConsumePower=*/ 4, /*cachedUsageConsumePower=*/ 3, /*backgroundUsageConsumePower=*/ 4, /*cachedUsageConsumePower=*/ 3,
/*foregroundUsageTimeInMs=*/ 15, /*backgroundUsageTimeInMs=*/ 15); /*foregroundUsageTimeInMs=*/ 15, /*backgroundUsageTimeInMs=*/ 15);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L, resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L,
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0, ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5, /*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5,
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5, /*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
/*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60); /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
@@ -830,14 +830,14 @@ public class DataProcessorTest {
.get(DataProcessor.SELECTED_INDEX_ALL); .get(DataProcessor.SELECTED_INDEX_ALL);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 1L, resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 1L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 25.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5, /*foregroundUsageConsumePower=*/ 5, /*foregroundServiceUsageConsumePower=*/ 5,
/*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5, /*backgroundUsageConsumePower=*/ 5, /*cachedUsageConsumePower=*/ 5,
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10); /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10);
assertBatteryDiffEntry( assertBatteryDiffEntry(
resultDiffData.getSystemDiffEntryList().get(0), BatteryUtils.UID_OTHER_USERS, resultDiffData.getSystemDiffEntryList().get(0), BatteryUtils.UID_OTHER_USERS,
/*uid=*/ BatteryUtils.UID_OTHER_USERS, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*uid=*/ BatteryUtils.UID_OTHER_USERS, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/*consumePercentage=*/ 75.0, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0, /*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0,
/*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0, /*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
/*foregroundUsageTimeInMs=*/ 0, /*backgroundUsageTimeInMs=*/ 0); /*foregroundUsageTimeInMs=*/ 0, /*backgroundUsageTimeInMs=*/ 0);
@@ -1193,7 +1193,7 @@ public class DataProcessorTest {
assertBatteryDiffEntry( assertBatteryDiffEntry(
batteryDiffData.getAppDiffEntryList().get(0), 0, /*uid=*/ 2L, batteryDiffData.getAppDiffEntryList().get(0), 0, /*uid=*/ 2L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 25.0, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 0.5, /*foregroundServiceUsageConsumePower=*/ 0, /*foregroundUsageConsumePower=*/ 0.5, /*foregroundServiceUsageConsumePower=*/ 0,
/*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0, /*backgroundUsageConsumePower=*/ 0, /*cachedUsageConsumePower=*/ 0,
/*foregroundUsageTimeInMs=*/ 20, /*backgroundUsageTimeInMs=*/ 20); /*foregroundUsageTimeInMs=*/ 20, /*backgroundUsageTimeInMs=*/ 20);
@@ -1205,7 +1205,7 @@ public class DataProcessorTest {
/*foregroundUsageTimeInMs=*/ 30, /*backgroundUsageTimeInMs=*/ 40); /*foregroundUsageTimeInMs=*/ 30, /*backgroundUsageTimeInMs=*/ 40);
assertBatteryDiffEntry( assertBatteryDiffEntry(
batteryDiffData.getSystemDiffEntryList().get(0), 0, /*uid=*/ 4L, batteryDiffData.getSystemDiffEntryList().get(0), 0, /*uid=*/ 4L,
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 75.0, ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 100.0,
/*foregroundUsageConsumePower=*/ 0.9, /*foregroundServiceUsageConsumePower=*/ 0.2, /*foregroundUsageConsumePower=*/ 0.9, /*foregroundServiceUsageConsumePower=*/ 0.2,
/*backgroundUsageConsumePower=*/ 0.3, /*cachedUsageConsumePower=*/ 0.1, /*backgroundUsageConsumePower=*/ 0.3, /*cachedUsageConsumePower=*/ 0.1,
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10); /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10);