Purge low percentage BatteryDiffEntry from indexed usage map
Bug: 184807417 Test: make SettingsRoboTests Test: make SettingsGoogleRoboTests Change-Id: I943e224147ccbfa80578511d6cb0d6adf6f8da0f
This commit is contained in:
@@ -152,7 +152,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
mBatteryIndexedMap =
|
||||
ConvertUtils.getIndexedUsageMap(
|
||||
mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
|
||||
mBatteryHistoryKeys, batteryHistoryMap);
|
||||
mBatteryHistoryKeys, batteryHistoryMap,
|
||||
/*purgeLowPercentageData=*/ true);
|
||||
forceRefreshUi();
|
||||
|
||||
Log.d(TAG, String.format(
|
||||
|
@@ -24,6 +24,8 @@ import android.os.UserBatteryConsumer;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -31,6 +33,7 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@@ -44,6 +47,9 @@ public final class ConvertUtils {
|
||||
private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
|
||||
new BatteryHistEntry(new ContentValues());
|
||||
|
||||
@VisibleForTesting
|
||||
static double PERCENTAGE_OF_TOTAL_THRESHOLD = 1f;
|
||||
|
||||
/** Invalid system battery consumer drain type. */
|
||||
public static final int INVALID_DRAIN_TYPE = -1;
|
||||
/** A fake package name to represent no BatteryEntry data. */
|
||||
@@ -142,7 +148,8 @@ public final class ConvertUtils {
|
||||
final Context context,
|
||||
final int timeSlotSize,
|
||||
final long[] batteryHistoryKeys,
|
||||
final Map<Long, List<BatteryHistEntry>> batteryHistoryMap) {
|
||||
final Map<Long, List<BatteryHistEntry>> batteryHistoryMap,
|
||||
final boolean purgeLowPercentageData) {
|
||||
final Map<Integer, List<BatteryDiffEntry>> resultMap = new HashMap<>();
|
||||
// Generates a temporary map to calculate diff usage data, which converts the inputted
|
||||
// List<BatteryDiffEntry> into Map<String, BatteryHistEntry> with the key comes from
|
||||
@@ -248,6 +255,9 @@ public final class ConvertUtils {
|
||||
}
|
||||
}
|
||||
insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap);
|
||||
if (purgeLowPercentageData) {
|
||||
purgeLowPercentageData(resultMap);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@@ -283,6 +293,19 @@ public final class ConvertUtils {
|
||||
indexedUsageMap.put(Integer.valueOf(desiredIndex), resultList);
|
||||
}
|
||||
|
||||
private static void purgeLowPercentageData(
|
||||
final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
|
||||
for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
|
||||
final Iterator<BatteryDiffEntry> iterator = entries.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
final BatteryDiffEntry entry = iterator.next();
|
||||
if (entry.getPercentOfTotal() < PERCENTAGE_OF_TOTAL_THRESHOLD) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static long getDiffValue(long v1, long v2, long v3) {
|
||||
return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0);
|
||||
}
|
||||
|
@@ -212,7 +212,8 @@ public final class ConvertUtilsTest {
|
||||
|
||||
final Map<Integer, List<BatteryDiffEntry>> resultMap =
|
||||
ConvertUtils.getIndexedUsageMap(
|
||||
mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap);
|
||||
mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
|
||||
/*purgeLowPercentageData=*/ false);
|
||||
|
||||
assertThat(resultMap).hasSize(3);
|
||||
// Verifies the first timestamp result.
|
||||
@@ -231,6 +232,26 @@ public final class ConvertUtilsTest {
|
||||
assertBatteryDiffEntry(entryList.get(1), 4, 5L, 5L);
|
||||
assertBatteryDiffEntry(entryList.get(2), 68, 40L, 50L);
|
||||
assertBatteryDiffEntry(entryList.get(0), 27, 30L, 40L);
|
||||
|
||||
// Test getIndexedUsageMap() with purged data.
|
||||
ConvertUtils.PERCENTAGE_OF_TOTAL_THRESHOLD = 50;
|
||||
final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
|
||||
ConvertUtils.getIndexedUsageMap(
|
||||
mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
|
||||
/*purgeLowPercentageData=*/ true);
|
||||
|
||||
assertThat(purgedResultMap).hasSize(3);
|
||||
// Verifies the first timestamp result.
|
||||
entryList = purgedResultMap.get(Integer.valueOf(0));
|
||||
assertThat(entryList).hasSize(1);
|
||||
// Verifies the second timestamp result.
|
||||
entryList = purgedResultMap.get(Integer.valueOf(1));
|
||||
assertThat(entryList).hasSize(1);
|
||||
assertBatteryDiffEntry(entryList.get(0), 75, 40L, 50L);
|
||||
// Verifies the last 24 hours aggregate result.
|
||||
entryList = purgedResultMap.get(Integer.valueOf(-1));
|
||||
assertThat(entryList).hasSize(1);
|
||||
assertBatteryDiffEntry(entryList.get(0), 68, 40L, 50L);
|
||||
}
|
||||
|
||||
private static BatteryHistEntry createBatteryHistEntry(
|
||||
|
Reference in New Issue
Block a user