Shorter thresholds for app standby

Start off with slightly more aggressive timeouts to
switch between buckets. 12Hrs, 24Hrs and 48Hrs.

Bug: 63527785
Test: atest AppStandbyControllerTests
Change-Id: I4aa0cc38ef91538192eda0f48dd3840217aa49c4
This commit is contained in:
Amith Yamasani
2017-11-17 16:35:44 -08:00
parent efe5f129ad
commit 301e94a9ef
2 changed files with 35 additions and 19 deletions

View File

@@ -70,6 +70,10 @@ public class AppStandbyControllerTests {
private static final long HOUR_MS = 60 * MINUTE_MS;
private static final long DAY_MS = 24 * HOUR_MS;
private static final long WORKING_SET_THRESHOLD = 12 * HOUR_MS;
private static final long FREQUENT_THRESHOLD = 24 * HOUR_MS;
private static final long RARE_THRESHOLD = 48 * HOUR_MS;
private MyInjector mInjector;
static class MyContextWrapper extends ContextWrapper {
@@ -171,6 +175,14 @@ public class AppStandbyControllerTests {
return packageName != null && packageName.equals(mBoundWidgetPackage);
}
@Override
String getAppIdleSettings() {
return "screen_thresholds=0/0/0/" + HOUR_MS + ",elapsed_thresholds=0/"
+ WORKING_SET_THRESHOLD + "/"
+ FREQUENT_THRESHOLD + "/"
+ RARE_THRESHOLD;
}
// Internal methods
void setDisplayOn(boolean on) {
@@ -228,12 +240,12 @@ public class AppStandbyControllerTests {
AppStandbyController controller = setupController();
setChargingState(controller, true);
mInjector.mElapsedRealtime = 8 * DAY_MS;
mInjector.mElapsedRealtime = RARE_THRESHOLD + 1;
assertFalse(controller.isAppIdleFilteredOrParoled(PACKAGE_1, USER_ID,
mInjector.mElapsedRealtime, false));
setChargingState(controller, false);
mInjector.mElapsedRealtime = 16 * DAY_MS;
mInjector.mElapsedRealtime = 2 * RARE_THRESHOLD + 2;
controller.checkIdleStates(USER_ID);
assertTrue(controller.isAppIdleFilteredOrParoled(PACKAGE_1, USER_ID,
mInjector.mElapsedRealtime, false));
@@ -273,26 +285,26 @@ public class AppStandbyControllerTests {
reportEvent(controller, USER_INTERACTION, 0);
// ACTIVE bucket
assertTimeout(controller, 11 * HOUR_MS, STANDBY_BUCKET_ACTIVE);
assertTimeout(controller, WORKING_SET_THRESHOLD - 1, STANDBY_BUCKET_ACTIVE);
// WORKING_SET bucket
assertTimeout(controller, 25 * HOUR_MS, STANDBY_BUCKET_WORKING_SET);
assertTimeout(controller, WORKING_SET_THRESHOLD + 1, STANDBY_BUCKET_WORKING_SET);
// WORKING_SET bucket
assertTimeout(controller, 47 * HOUR_MS, STANDBY_BUCKET_WORKING_SET);
assertTimeout(controller, FREQUENT_THRESHOLD - 1, STANDBY_BUCKET_WORKING_SET);
// FREQUENT bucket
assertTimeout(controller, 4 * DAY_MS, STANDBY_BUCKET_FREQUENT);
assertTimeout(controller, FREQUENT_THRESHOLD + 1, STANDBY_BUCKET_FREQUENT);
// RARE bucket
assertTimeout(controller, 9 * DAY_MS, STANDBY_BUCKET_RARE);
assertTimeout(controller, RARE_THRESHOLD + 1, STANDBY_BUCKET_RARE);
reportEvent(controller, USER_INTERACTION, 9 * DAY_MS);
reportEvent(controller, USER_INTERACTION, RARE_THRESHOLD + 1);
assertTimeout(controller, 9 * DAY_MS, STANDBY_BUCKET_ACTIVE);
assertTimeout(controller, RARE_THRESHOLD + 1, STANDBY_BUCKET_ACTIVE);
// RARE bucket
assertTimeout(controller, 18 * DAY_MS, STANDBY_BUCKET_RARE);
assertTimeout(controller, RARE_THRESHOLD * 2 + 2, STANDBY_BUCKET_RARE);
}
@Test
@@ -305,18 +317,18 @@ public class AppStandbyControllerTests {
reportEvent(controller, USER_INTERACTION, 0);
// ACTIVE bucket
assertTimeout(controller, 11 * HOUR_MS, STANDBY_BUCKET_ACTIVE);
assertTimeout(controller, WORKING_SET_THRESHOLD - 1, STANDBY_BUCKET_ACTIVE);
// WORKING_SET bucket
assertTimeout(controller, 25 * HOUR_MS, STANDBY_BUCKET_WORKING_SET);
assertTimeout(controller, WORKING_SET_THRESHOLD + 1, STANDBY_BUCKET_WORKING_SET);
// RARE bucket, should fail because the screen wasn't ON.
mInjector.mElapsedRealtime = 9 * DAY_MS;
mInjector.mElapsedRealtime = RARE_THRESHOLD + 1;
controller.checkIdleStates(USER_ID);
assertNotEquals(STANDBY_BUCKET_RARE, getStandbyBucket(controller));
mInjector.setDisplayOn(true);
assertTimeout(controller, 18 * DAY_MS, STANDBY_BUCKET_RARE);
assertTimeout(controller, RARE_THRESHOLD * 2 + 2, STANDBY_BUCKET_RARE);
}
@Test

View File

@@ -91,14 +91,14 @@ public class AppStandbyController {
0,
0,
COMPRESS_TIME ? 120 * 1000 : 1 * ONE_HOUR,
COMPRESS_TIME ? 240 * 1000 : 8 * ONE_HOUR
COMPRESS_TIME ? 240 * 1000 : 2 * ONE_HOUR
};
static final long[] ELAPSED_TIME_THRESHOLDS = {
0,
COMPRESS_TIME ? 1 * ONE_MINUTE : 12 * ONE_HOUR,
COMPRESS_TIME ? 4 * ONE_MINUTE : 2 * ONE_DAY,
COMPRESS_TIME ? 16 * ONE_MINUTE : 8 * ONE_DAY
COMPRESS_TIME ? 4 * ONE_MINUTE : 24 * ONE_HOUR,
COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR
};
static final int[] THRESHOLD_BUCKETS = {
@@ -1049,6 +1049,11 @@ public class AppStandbyController {
int userId) {
return appWidgetManager.isBoundWidgetPackage(packageName, userId);
}
String getAppIdleSettings() {
return Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.APP_IDLE_CONSTANTS);
}
}
class AppStandbyHandler extends Handler {
@@ -1181,8 +1186,7 @@ public class AppStandbyController {
// Look at global settings for this.
// TODO: Maybe apply different thresholds for different users.
try {
mParser.setString(Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.APP_IDLE_CONSTANTS));
mParser.setString(mInjector.getAppIdleSettings());
} catch (IllegalArgumentException e) {
Slog.e(TAG, "Bad value for app idle settings: " + e.getMessage());
// fallthrough, mParser is empty and all defaults will be returned.