Loading src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java +20 −11 Original line number Diff line number Diff line Loading @@ -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<Integer, BatteryOptimizationMode> mBatteryOptimizeModeCacheMap; /* Stores the battery optimization mode and mutable state for each UID. */ @VisibleForTesting final SparseArray<Pair<BatteryOptimizationMode, Boolean>> 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<BatteryOptimizationMode, Boolean> getBatteryOptimizeModeInfo( final int uid, final String packageName) { if (!mBatteryOptimizeModeCache.contains(uid)) { final BatteryOptimizeUtils batteryOptimizeUtils = new BatteryOptimizeUtils(mContext, uid, packageName); mBatteryOptimizeModeCacheMap.put( mBatteryOptimizeModeCache.put( uid, Pair.create( BatteryOptimizationMode.forNumber( batteryOptimizeUtils.getAppOptimizationMode(/* refreshList= */ false))); batteryOptimizeUtils.getAppOptimizationMode( /* refreshList= */ false)), batteryOptimizeUtils.isOptimizeModeMutable())); } return mBatteryOptimizeModeCacheMap.get(uid); final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo = mBatteryOptimizeModeCache.get(uid); return batteryOptimizeModeInfo != null ? batteryOptimizeModeInfo : new Pair<>(BatteryOptimizationMode.MODE_UNKNOWN, false); } } src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<BatteryOptimizationMode, Boolean> batteryOptimizationModeInfo = optimizationModeCache.getBatteryOptimizeModeInfo( (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName()); builder.setAppOptimizationMode(batteryOptimizationModeInfo.first) .setIsAppOptimizationModeMutable(batteryOptimizationModeInfo.second); } return builder.build(); } Loading src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto +1 −0 Original line number Diff line number Diff line Loading @@ -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; } tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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(); } Loading Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java +20 −11 Original line number Diff line number Diff line Loading @@ -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<Integer, BatteryOptimizationMode> mBatteryOptimizeModeCacheMap; /* Stores the battery optimization mode and mutable state for each UID. */ @VisibleForTesting final SparseArray<Pair<BatteryOptimizationMode, Boolean>> 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<BatteryOptimizationMode, Boolean> getBatteryOptimizeModeInfo( final int uid, final String packageName) { if (!mBatteryOptimizeModeCache.contains(uid)) { final BatteryOptimizeUtils batteryOptimizeUtils = new BatteryOptimizeUtils(mContext, uid, packageName); mBatteryOptimizeModeCacheMap.put( mBatteryOptimizeModeCache.put( uid, Pair.create( BatteryOptimizationMode.forNumber( batteryOptimizeUtils.getAppOptimizationMode(/* refreshList= */ false))); batteryOptimizeUtils.getAppOptimizationMode( /* refreshList= */ false)), batteryOptimizeUtils.isOptimizeModeMutable())); } return mBatteryOptimizeModeCacheMap.get(uid); final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo = mBatteryOptimizeModeCache.get(uid); return batteryOptimizeModeInfo != null ? batteryOptimizeModeInfo : new Pair<>(BatteryOptimizationMode.MODE_UNKNOWN, false); } }
src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<BatteryOptimizationMode, Boolean> batteryOptimizationModeInfo = optimizationModeCache.getBatteryOptimizeModeInfo( (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName()); builder.setAppOptimizationMode(batteryOptimizationModeInfo.first) .setIsAppOptimizationModeMutable(batteryOptimizationModeInfo.second); } return builder.build(); } Loading
src/com/android/settings/fuelgauge/protos/battery_usage_slot.proto +1 −0 Original line number Diff line number Diff line Loading @@ -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; }
tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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(); } Loading