From a711199d8c7b4bfa38ad2793ec1af36b1b2422b4 Mon Sep 17 00:00:00 2001 From: ykhung Date: Wed, 14 Apr 2021 15:53:07 +0800 Subject: [PATCH] Avoid load icon and label in the background for periodic job In the original design, BatteyEntry will load icon and label in the background thread and cache them into memory, but we don't need such information in the periodic fetching job. Add a method to disable it to improve the performance and memory footprint. Bug: 185207505 Test: make SettingsRoboTests Test: make SettingsGoogleRoboTests Change-Id: Iba759256e94159fce243ff4d700a8adf9e92f82c --- .../BatteryAppListPreferenceController.java | 15 +++++++++------ .../android/settings/fuelgauge/BatteryEntry.java | 13 ++++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java index 0e0310e541f..a49c33b6f35 100644 --- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java @@ -209,7 +209,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro if (sConfig.shouldShowBatteryAttributionList(mContext)) { final int dischargePercentage = getDischargePercentage(batteryUsageStats); - final List usageList = getCoalescedUsageList(showAllApps); + final List usageList = + getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ true); final double totalPower = batteryUsageStats.getConsumedPower(); final int numSippers = usageList.size(); for (int i = 0; i < numSippers; i++) { @@ -267,7 +268,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro return null; } final int dischargePercentage = getDischargePercentage(batteryUsageStats); - final List usageList = getCoalescedUsageList(showAllApps); + final List usageList = + getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ false); final double totalPower = batteryUsageStats.getConsumedPower(); for (int i = 0; i < usageList.size(); i++) { final BatteryEntry entry = usageList.get(i); @@ -293,7 +295,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro * * @return A sorted list of apps using power. */ - private List getCoalescedUsageList(boolean showAllApps) { + private List getCoalescedUsageList( + boolean showAllApps, boolean loadDataInBackground) { final SparseArray batteryEntryList = new SparseArray<>(); final ArrayList results = new ArrayList<>(); @@ -333,7 +336,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro if (index < 0) { // New entry. batteryEntryList.put(realUid, new BatteryEntry(mContext, mHandler, mUserManager, - consumer, isHidden, packages, null)); + consumer, isHidden, packages, null, loadDataInBackground)); } else { // Combine BatterySippers if we already have one with this UID. final BatteryEntry existingSipper = batteryEntryList.valueAt(index); @@ -350,7 +353,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro } results.add(new BatteryEntry(mContext, mHandler, mUserManager, - consumer, /* isHidden */ true, null, null)); + consumer, /* isHidden */ true, null, null, loadDataInBackground)); } if (showAllApps) { @@ -359,7 +362,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro for (int i = 0, size = userBatteryConsumers.size(); i < size; i++) { final UserBatteryConsumer consumer = userBatteryConsumers.get(i); results.add(new BatteryEntry(mContext, mHandler, mUserManager, - consumer, /* isHidden */ true, null, null)); + consumer, /* isHidden */ true, null, null, loadDataInBackground)); } } diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java index 309551b0838..6cb0d120a2e 100644 --- a/src/com/android/settings/fuelgauge/BatteryEntry.java +++ b/src/com/android/settings/fuelgauge/BatteryEntry.java @@ -178,6 +178,12 @@ public class BatteryEntry { public BatteryEntry(Context context, Handler handler, UserManager um, @NonNull BatteryConsumer batteryConsumer, boolean isHidden, String[] packages, String packageName) { + this(context, handler, um, batteryConsumer, isHidden, packages, packageName, true); + } + + public BatteryEntry(Context context, Handler handler, UserManager um, + @NonNull BatteryConsumer batteryConsumer, boolean isHidden, String[] packages, + String packageName, boolean loadDataInBackground) { sHandler = handler; mContext = context; mBatteryConsumer = batteryConsumer; @@ -209,7 +215,7 @@ public class BatteryEntry { name = mDefaultPackageName; } } - getQuickNameIconForUid(uid, packages); + getQuickNameIconForUid(uid, packages, loadDataInBackground); return; } else if (batteryConsumer instanceof SystemBatteryConsumer) { mConsumedPower = batteryConsumer.getConsumedPower() @@ -242,7 +248,8 @@ public class BatteryEntry { return name; } - void getQuickNameIconForUid(final int uid, final String[] packages) { + void getQuickNameIconForUid( + final int uid, final String[] packages, final boolean loadDataInBackground) { // Locale sync to system config in Settings final Locale locale = Locale.getDefault(); if (sCurrentLocale != locale) { @@ -267,7 +274,7 @@ public class BatteryEntry { icon = mContext.getPackageManager().getDefaultActivityIcon(); } - if (sHandler != null) { + if (sHandler != null && loadDataInBackground) { synchronized (sRequestQueue) { sRequestQueue.add(this); }