From 59e5dc720a3ed899853ddcb0145f690840240789 Mon Sep 17 00:00:00 2001 From: mxyyiyi Date: Tue, 30 Jul 2024 17:59:57 +0800 Subject: [PATCH] Add whether app optimization mode mutable in BatteryUsageDiff proto. Bug: 350657779 Test: atest ConvertUtilsTest Flag: EXEMPT bug fix Change-Id: I80a5e6513e1bee88f85caeed7661b10204df8a51 --- .../BatteryOptimizationModeCache.java | 31 ++++++++++++------- .../fuelgauge/batteryusage/ConvertUtils.java | 9 ++++-- .../fuelgauge/protos/battery_usage_slot.proto | 1 + .../batteryusage/ConvertUtilsTest.java | 8 +++-- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java index 6b35fb9cccb..2084b660b06 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java @@ -17,38 +17,47 @@ package com.android.settings.fuelgauge.batteryusage; import android.content.Context; -import android.util.ArrayMap; +import android.util.SparseArray; import androidx.annotation.VisibleForTesting; +import androidx.core.util.Pair; import com.android.settings.fuelgauge.BatteryOptimizeUtils; import com.android.settingslib.fuelgauge.PowerAllowlistBackend; -import java.util.Map; - /** A cache to log battery optimization mode of an app */ final class BatteryOptimizationModeCache { private static final String TAG = "BatteryOptimizationModeCache"; - @VisibleForTesting final Map mBatteryOptimizeModeCacheMap; + /* Stores the battery optimization mode and mutable state for each UID. */ + @VisibleForTesting + final SparseArray> mBatteryOptimizeModeCache; private final Context mContext; BatteryOptimizationModeCache(final Context context) { mContext = context; - mBatteryOptimizeModeCacheMap = new ArrayMap<>(); + mBatteryOptimizeModeCache = new SparseArray<>(); PowerAllowlistBackend.getInstance(mContext).refreshList(); } - BatteryOptimizationMode getBatteryOptimizeMode(final int uid, final String packageName) { - if (!mBatteryOptimizeModeCacheMap.containsKey(uid)) { + Pair getBatteryOptimizeModeInfo( + final int uid, final String packageName) { + if (!mBatteryOptimizeModeCache.contains(uid)) { final BatteryOptimizeUtils batteryOptimizeUtils = new BatteryOptimizeUtils(mContext, uid, packageName); - mBatteryOptimizeModeCacheMap.put( + mBatteryOptimizeModeCache.put( uid, - BatteryOptimizationMode.forNumber( - batteryOptimizeUtils.getAppOptimizationMode(/* refreshList= */ false))); + Pair.create( + BatteryOptimizationMode.forNumber( + batteryOptimizeUtils.getAppOptimizationMode( + /* refreshList= */ false)), + batteryOptimizeUtils.isOptimizeModeMutable())); } - return mBatteryOptimizeModeCacheMap.get(uid); + final Pair batteryOptimizeModeInfo = + mBatteryOptimizeModeCache.get(uid); + return batteryOptimizeModeInfo != null + ? batteryOptimizeModeInfo + : new Pair<>(BatteryOptimizationMode.MODE_UNKNOWN, false); } } diff --git a/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java index 8f4d4dd3bc8..391a57a66f0 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java @@ -35,6 +35,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.core.util.Pair; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity; @@ -542,9 +543,11 @@ public final class ConvertUtils { } // Log the battery optimization mode of AppEntry while converting to batteryUsageSlot. if (optimizationModeCache != null && !batteryDiffEntry.isSystemEntry()) { - builder.setAppOptimizationMode( - optimizationModeCache.getBatteryOptimizeMode( - (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName())); + final Pair batteryOptimizationModeInfo = + optimizationModeCache.getBatteryOptimizeModeInfo( + (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName()); + builder.setAppOptimizationMode(batteryOptimizationModeInfo.first) + .setIsAppOptimizationModeMutable(batteryOptimizationModeInfo.second); } return builder.build(); } diff --git a/src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto b/src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto index 4e3e3c4d6cd..da2bd4f3328 100644 --- a/src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto +++ b/src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto @@ -40,4 +40,5 @@ message BatteryUsageDiff { optional int64 screen_on_time = 16; optional int64 foreground_service_usage_time = 17; optional BatteryOptimizationMode app_optimization_mode = 18; + optional bool is_app_optimization_mode_mutable = 19; } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java index a3b35be60e6..a694b2fe23b 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java @@ -38,6 +38,8 @@ import android.os.BatteryUsageStats; import android.os.LocaleList; import android.os.UserHandle; +import androidx.core.util.Pair; + import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity; import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity; import com.android.settings.fuelgauge.batteryusage.db.BatteryUsageSlotEntity; @@ -384,8 +386,9 @@ public final class ConvertUtilsTest { /* cachedUsageConsumePower= */ 1.5); BatteryOptimizationModeCache optimizationModeCache = new BatteryOptimizationModeCache(mContext); - optimizationModeCache.mBatteryOptimizeModeCacheMap.put( - (int) batteryDiffEntry.mUid, BatteryOptimizationMode.MODE_OPTIMIZED); + optimizationModeCache.mBatteryOptimizeModeCache.put( + (int) batteryDiffEntry.mUid, + Pair.create(BatteryOptimizationMode.MODE_OPTIMIZED, false)); final BatteryUsageDiff batteryUsageDiff = ConvertUtils.convertToBatteryUsageDiff(batteryDiffEntry, optimizationModeCache); @@ -408,6 +411,7 @@ public final class ConvertUtilsTest { assertThat(batteryUsageDiff.getKey()).isEqualTo("key"); assertThat(batteryUsageDiff.getAppOptimizationMode()) .isEqualTo(BatteryOptimizationMode.MODE_OPTIMIZED); + assertThat(batteryUsageDiff.getIsAppOptimizationModeMutable()).isFalse(); assertThat(batteryUsageDiff.hasPackageName()).isFalse(); assertThat(batteryUsageDiff.hasLabel()).isFalse(); }