Shorter bucket elevation for system_interaction and sync_adapter
Don't keep the app in ACTIVE for too long after an indirect use of the app. Also don't mark as used, so bucketing algorithm can override quickly. Bug: 74340258 Test: atest AppStandbyControllerTests Change-Id: I3b8014873aaf881de07304b64039da211a63a525
This commit is contained in:
@@ -19,6 +19,7 @@ package com.android.server.usage;
|
||||
import static android.app.usage.UsageEvents.Event.NOTIFICATION_SEEN;
|
||||
import static android.app.usage.UsageEvents.Event.SLICE_PINNED;
|
||||
import static android.app.usage.UsageEvents.Event.SLICE_PINNED_PRIV;
|
||||
import static android.app.usage.UsageEvents.Event.SYSTEM_INTERACTION;
|
||||
import static android.app.usage.UsageEvents.Event.USER_INTERACTION;
|
||||
import static android.app.usage.UsageStatsManager.REASON_MAIN_DEFAULT;
|
||||
import static android.app.usage.UsageStatsManager.REASON_MAIN_FORCED;
|
||||
@@ -568,6 +569,31 @@ public class AppStandbyControllerTests {
|
||||
assertBucket(STANDBY_BUCKET_RARE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSystemInteractionTimeout() throws Exception {
|
||||
setChargingState(mController, false);
|
||||
|
||||
reportEvent(mController, USER_INTERACTION, 0);
|
||||
// Fast forward to RARE
|
||||
mInjector.mElapsedRealtime = RARE_THRESHOLD + 100;
|
||||
mController.checkIdleStates(USER_ID);
|
||||
assertBucket(STANDBY_BUCKET_RARE);
|
||||
|
||||
// Trigger a SYSTEM_INTERACTION and verify bucket
|
||||
reportEvent(mController, SYSTEM_INTERACTION, mInjector.mElapsedRealtime);
|
||||
assertBucket(STANDBY_BUCKET_ACTIVE);
|
||||
|
||||
// Verify it's still in ACTIVE close to end of timeout
|
||||
mInjector.mElapsedRealtime += mController.mSystemInteractionTimeoutMillis - 100;
|
||||
mController.checkIdleStates(USER_ID);
|
||||
assertBucket(STANDBY_BUCKET_ACTIVE);
|
||||
|
||||
// Verify bucket moves to RARE after timeout
|
||||
mInjector.mElapsedRealtime += 200;
|
||||
mController.checkIdleStates(USER_ID);
|
||||
assertBucket(STANDBY_BUCKET_RARE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPredictionNotOverridden() throws Exception {
|
||||
setChargingState(mController, false);
|
||||
|
||||
@@ -198,6 +198,10 @@ public class AppStandbyController {
|
||||
long mSystemUpdateUsageTimeoutMillis;
|
||||
/** Maximum time to wait for a prediction before using simple timeouts to downgrade buckets. */
|
||||
long mPredictionTimeoutMillis;
|
||||
/** Maximum time a sync adapter associated with a CP should keep the buckets elevated. */
|
||||
long mSyncAdapterTimeoutMillis;
|
||||
/** Maximum time a system interaction should keep the buckets elevated. */
|
||||
long mSystemInteractionTimeoutMillis;
|
||||
|
||||
volatile boolean mAppIdleEnabled;
|
||||
boolean mAppIdleTempParoled;
|
||||
@@ -357,8 +361,8 @@ public class AppStandbyController {
|
||||
synchronized (mAppIdleLock) {
|
||||
AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
|
||||
STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER,
|
||||
elapsedRealtime,
|
||||
elapsedRealtime + mStrongUsageTimeoutMillis);
|
||||
0,
|
||||
elapsedRealtime + mSyncAdapterTimeoutMillis);
|
||||
maybeInformListeners(packageName, userId, elapsedRealtime,
|
||||
appUsage.currentBucket, appUsage.bucketingReason, false);
|
||||
}
|
||||
@@ -708,7 +712,11 @@ public class AppStandbyController {
|
||||
STANDBY_BUCKET_WORKING_SET, subReason,
|
||||
0, elapsedRealtime + mNotificationSeenTimeoutMillis);
|
||||
nextCheckTime = mNotificationSeenTimeoutMillis;
|
||||
|
||||
} else if (event.mEventType == UsageEvents.Event.SYSTEM_INTERACTION) {
|
||||
mAppIdleHistory.reportUsage(appHistory, event.mPackage,
|
||||
STANDBY_BUCKET_ACTIVE, subReason,
|
||||
0, elapsedRealtime + mSystemInteractionTimeoutMillis);
|
||||
nextCheckTime = mSystemInteractionTimeoutMillis;
|
||||
} else {
|
||||
mAppIdleHistory.reportUsage(appHistory, event.mPackage,
|
||||
STANDBY_BUCKET_ACTIVE, subReason,
|
||||
@@ -1523,6 +1531,14 @@ public class AppStandbyController {
|
||||
private static final String KEY_SYSTEM_UPDATE_HOLD_DURATION =
|
||||
"system_update_usage_duration";
|
||||
private static final String KEY_PREDICTION_TIMEOUT = "prediction_timeout";
|
||||
private static final String KEY_SYNC_ADAPTER_HOLD_DURATION = "sync_adapter_duration";
|
||||
private static final String KEY_SYSTEM_INTERACTION_HOLD_DURATION =
|
||||
"system_interaction_duration";
|
||||
public static final long DEFAULT_STRONG_USAGE_TIMEOUT = 1 * ONE_HOUR;
|
||||
public static final long DEFAULT_NOTIFICATION_TIMEOUT = 12 * ONE_HOUR;
|
||||
public static final long DEFAULT_SYSTEM_UPDATE_TIMEOUT = 2 * ONE_HOUR;
|
||||
public static final long DEFAULT_SYSTEM_INTERACTION_TIMEOUT = 10 * ONE_MINUTE;
|
||||
public static final long DEFAULT_SYNC_ADAPTER_TIMEOUT = 10 * ONE_MINUTE;
|
||||
|
||||
private final KeyValueListParser mParser = new KeyValueListParser(',');
|
||||
|
||||
@@ -1585,16 +1601,22 @@ public class AppStandbyController {
|
||||
COMPRESS_TIME ? ONE_MINUTE : 4 * 60 * ONE_MINUTE); // 4 hours
|
||||
mStrongUsageTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_STRONG_USAGE_HOLD_DURATION,
|
||||
COMPRESS_TIME ? ONE_MINUTE : 1 * ONE_HOUR);
|
||||
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STRONG_USAGE_TIMEOUT);
|
||||
mNotificationSeenTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_NOTIFICATION_SEEN_HOLD_DURATION,
|
||||
COMPRESS_TIME ? 12 * ONE_MINUTE : 12 * ONE_HOUR);
|
||||
COMPRESS_TIME ? 12 * ONE_MINUTE : DEFAULT_NOTIFICATION_TIMEOUT);
|
||||
mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_SYSTEM_UPDATE_HOLD_DURATION,
|
||||
COMPRESS_TIME ? 2 * ONE_MINUTE : 2 * ONE_HOUR);
|
||||
COMPRESS_TIME ? 2 * ONE_MINUTE : DEFAULT_SYSTEM_UPDATE_TIMEOUT);
|
||||
mPredictionTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_PREDICTION_TIMEOUT,
|
||||
COMPRESS_TIME ? 10 * ONE_MINUTE : DEFAULT_PREDICTION_TIMEOUT);
|
||||
mSyncAdapterTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_SYNC_ADAPTER_HOLD_DURATION,
|
||||
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYNC_ADAPTER_TIMEOUT);
|
||||
mSystemInteractionTimeoutMillis = mParser.getDurationMillis
|
||||
(KEY_SYSTEM_INTERACTION_HOLD_DURATION,
|
||||
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYSTEM_INTERACTION_TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user