Merge "Add config for the auto restricted bucket on abusive bg battery drain" into tm-dev

This commit is contained in:
Jing Ji
2022-05-13 18:01:58 +00:00
committed by Android (Google) Code Review
4 changed files with 72 additions and 3 deletions

View File

@@ -5754,6 +5754,14 @@
-->
<integer name="config_bg_current_drain_location_min_duration">1800</integer>
<!-- The behavior when the system detects it has abusive current drains, whether or not to
move the app to the restricted standby bucket level.
True - we'll move the app to restricted standby bucket as long as its bg battery usage
goes beyond the threshold, False - we'll not move it.
Note: This should be only enabled on devices with high confidence on power measurement.
-->
<bool name="config_bg_current_drain_auto_restrict_abusive_apps">false</bool>
<!-- The behavior for an app with a FGS and its notification is still showing, when the system
detects it's abusive and should be put into bg restricted level. True - we'll
show the prompt to user, False - we'll not show it.

View File

@@ -4774,6 +4774,7 @@
<java-symbol type="array" name="config_bg_current_drain_high_threshold_to_bg_restricted" />
<java-symbol type="integer" name="config_bg_current_drain_media_playback_min_duration" />
<java-symbol type="integer" name="config_bg_current_drain_location_min_duration" />
<java-symbol type="bool" name="config_bg_current_drain_auto_restrict_abusive_apps" />
<java-symbol type="bool" name="config_bg_prompt_fgs_with_noti_to_bg_restricted" />
<java-symbol type="bool" name="config_bg_prompt_abusive_apps_to_bg_restricted" />
<java-symbol type="integer" name="config_bg_current_drain_exempted_types" />

View File

@@ -1257,6 +1257,16 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
DEVICE_CONFIG_SUBNAMESPACE_PREFIX
+ "current_drain_event_duration_based_threshold_enabled";
/**
* Whether or not we should move the app into the restricted bucket level if its background
* battery usage goes beyond the threshold. Note this different from the flag
* {@link AppRestrictionController.ConstantsObserver#KEY_BG_AUTO_RESTRICT_ABUSIVE_APPS}
* which is to control the overall auto bg restrictions.
*/
static final String KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED =
DEVICE_CONFIG_SUBNAMESPACE_PREFIX
+ "current_drain_auto_restrict_abusive_apps_enabled";
/**
* The types of battery drain we're checking on each app; if the sum of the battery drain
* exceeds the threshold, it'll be moved to restricted standby bucket; the type here
@@ -1352,6 +1362,11 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
*/
final boolean mDefaultBgCurrentDrainEventDurationBasedThresholdEnabled;
/**
* Default value to {@link #mBgCurrentDrainAutoRestrictAbusiveAppsEnabled}.
*/
final boolean mDefaultBgCurrentDrainAutoRestrictAbusiveAppsEnabled;
/**
* Default value to {@link #mBgCurrentDrainRestrictedBucketTypes}.
*/
@@ -1429,6 +1444,11 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
*/
volatile boolean mBgCurrentDrainEventDurationBasedThresholdEnabled;
/**
* @see #KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED.
*/
volatile boolean mBgCurrentDrainAutoRestrictAbusiveAppsEnabled;
/**
* @see #KEY_BG_CURRENT_DRAIN_TYPES_TO_RESTRICTED_BUCKET.
*/
@@ -1520,6 +1540,8 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
R.integer.config_bg_current_drain_location_min_duration) * 1_000;
mDefaultBgCurrentDrainEventDurationBasedThresholdEnabled = resources.getBoolean(
R.bool.config_bg_current_drain_event_duration_based_threshold_enabled);
mDefaultBgCurrentDrainAutoRestrictAbusiveAppsEnabled = resources.getBoolean(
R.bool.config_bg_current_drain_auto_restrict_abusive_apps);
mDefaultCurrentDrainTypesToRestrictedBucket = resources.getInteger(
R.integer.config_bg_current_drain_types_to_restricted_bucket);
mDefaultBgCurrentDrainTypesToBgRestricted = resources.getInteger(
@@ -1569,6 +1591,9 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
case KEY_BG_CURRENT_DRAIN_POWER_COMPONENTS:
updateCurrentDrainThreshold();
break;
case KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED:
updateBgCurrentDrainAutoRestrictAbusiveAppsEnabled();
break;
case KEY_BG_CURRENT_DRAIN_WINDOW:
updateCurrentDrainWindow();
break;
@@ -1701,6 +1726,13 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
DEFAULT_BG_CURRENT_DRAIN_DECOUPLE_THRESHOLD);
}
private void updateBgCurrentDrainAutoRestrictAbusiveAppsEnabled() {
mBgCurrentDrainAutoRestrictAbusiveAppsEnabled = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED,
mDefaultBgCurrentDrainAutoRestrictAbusiveAppsEnabled);
}
@Override
public void onSystemReady() {
mBatteryFullChargeMah =
@@ -1714,6 +1746,7 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
updateCurrentDrainEventDurationBasedThresholdEnabled();
updateCurrentDrainExemptedTypes();
updateCurrentDrainDecoupleThresholds();
updateBgCurrentDrainAutoRestrictAbusiveAppsEnabled();
}
@Override
@@ -1728,9 +1761,12 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
if (pair != null) {
final long lastInteractionTime = mLastInteractionTime.get(uid, 0L);
final long[] ts = pair.first;
final int restrictedLevel = ts[TIME_STAMP_INDEX_RESTRICTED_BUCKET]
> (lastInteractionTime + mBgCurrentDrainInteractionGracePeriodMs)
&& mTracker.mAppRestrictionController.isAutoRestrictAbusiveAppEnabled()
final boolean noInteractionRecently = ts[TIME_STAMP_INDEX_RESTRICTED_BUCKET]
> (lastInteractionTime + mBgCurrentDrainInteractionGracePeriodMs);
final boolean canRestrict =
mTracker.mAppRestrictionController.isAutoRestrictAbusiveAppEnabled()
&& mBgCurrentDrainAutoRestrictAbusiveAppsEnabled;
final int restrictedLevel = noInteractionRecently && canRestrict
? RESTRICTION_LEVEL_RESTRICTED_BUCKET
: RESTRICTION_LEVEL_ADAPTIVE_BUCKET;
if (maxLevel > RESTRICTION_LEVEL_BACKGROUND_RESTRICTED) {
@@ -2066,6 +2102,10 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
pw.print('=');
pw.println(mBgCurrentDrainEventDurationBasedThresholdEnabled);
pw.print(prefix);
pw.print(KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED);
pw.print('=');
pw.println(mBgCurrentDrainAutoRestrictAbusiveAppsEnabled);
pw.print(prefix);
pw.print(KEY_BG_CURRENT_DRAIN_TYPES_TO_RESTRICTED_BUCKET);
pw.print('=');
pw.println(batteryUsageTypesToString(mBgCurrentDrainRestrictedBucketTypes));

View File

@@ -585,6 +585,7 @@ public final class BackgroundRestrictionTest {
DeviceConfigSession<Long> bgCurrentDrainInteractionGracePeriod = null;
DeviceConfigSession<Float> bgCurrentDrainRestrictedBucketThreshold = null;
DeviceConfigSession<Float> bgCurrentDrainBgRestrictedThreshold = null;
DeviceConfigSession<Boolean> bgCurrentDrainAutoRestrictAbusiveApps = null;
DeviceConfigSession<Boolean> bgPromptFgsWithNotiToBgRestricted = null;
DeviceConfigSession<Boolean> bgPromptAbusiveAppToBgRestricted = null;
DeviceConfigSession<Long> bgNotificationMinInterval = null;
@@ -644,6 +645,14 @@ public final class BackgroundRestrictionTest {
isLowRamDeviceStatic() ? 1 : 0]);
bgCurrentDrainBgRestrictedThreshold.set(bgRestrictedThreshold);
bgCurrentDrainAutoRestrictAbusiveApps = new DeviceConfigSession<>(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
AppBatteryPolicy.KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED,
DeviceConfig::getBoolean,
mContext.getResources().getBoolean(
R.bool.config_bg_current_drain_auto_restrict_abusive_apps));
bgCurrentDrainAutoRestrictAbusiveApps.set(true);
bgPromptFgsWithNotiToBgRestricted = new DeviceConfigSession<>(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
ConstantsObserver.KEY_BG_PROMPT_FGS_WITH_NOTIFICATION_TO_BG_RESTRICTED,
@@ -1099,6 +1108,7 @@ public final class BackgroundRestrictionTest {
closeIfNotNull(bgCurrentDrainInteractionGracePeriod);
closeIfNotNull(bgCurrentDrainRestrictedBucketThreshold);
closeIfNotNull(bgCurrentDrainBgRestrictedThreshold);
closeIfNotNull(bgCurrentDrainAutoRestrictAbusiveApps);
closeIfNotNull(bgPromptFgsWithNotiToBgRestricted);
closeIfNotNull(bgPromptAbusiveAppToBgRestricted);
closeIfNotNull(bgNotificationMinInterval);
@@ -1651,6 +1661,7 @@ public final class BackgroundRestrictionTest {
DeviceConfigSession<Float> bgCurrentDrainBgRestrictedThreshold = null;
DeviceConfigSession<Float> bgCurrentDrainRestrictedBucketHighThreshold = null;
DeviceConfigSession<Float> bgCurrentDrainBgRestrictedHighThreshold = null;
DeviceConfigSession<Boolean> bgCurrentDrainAutoRestrictAbusiveApps = null;
DeviceConfigSession<Long> bgMediaPlaybackMinDurationThreshold = null;
DeviceConfigSession<Long> bgLocationMinDurationThreshold = null;
DeviceConfigSession<Boolean> bgCurrentDrainEventDurationBasedThresholdEnabled = null;
@@ -1736,6 +1747,14 @@ public final class BackgroundRestrictionTest {
isLowRamDeviceStatic() ? 1 : 0]);
bgCurrentDrainBgRestrictedHighThreshold.set(bgRestrictedHighThreshold);
bgCurrentDrainAutoRestrictAbusiveApps = new DeviceConfigSession<>(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
AppBatteryPolicy.KEY_BG_CURRENT_DRAIN_AUTO_RESTRICT_ABUSIVE_APPS_ENABLED,
DeviceConfig::getBoolean,
mContext.getResources().getBoolean(
R.bool.config_bg_current_drain_auto_restrict_abusive_apps));
bgCurrentDrainAutoRestrictAbusiveApps.set(true);
bgMediaPlaybackMinDurationThreshold = new DeviceConfigSession<>(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
AppBatteryPolicy.KEY_BG_CURRENT_DRAIN_MEDIA_PLAYBACK_MIN_DURATION,
@@ -2226,6 +2245,7 @@ public final class BackgroundRestrictionTest {
closeIfNotNull(bgCurrentDrainBgRestrictedThreshold);
closeIfNotNull(bgCurrentDrainRestrictedBucketHighThreshold);
closeIfNotNull(bgCurrentDrainBgRestrictedHighThreshold);
closeIfNotNull(bgCurrentDrainAutoRestrictAbusiveApps);
closeIfNotNull(bgMediaPlaybackMinDurationThreshold);
closeIfNotNull(bgLocationMinDurationThreshold);
closeIfNotNull(bgCurrentDrainEventDurationBasedThresholdEnabled);