Loading services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +26 −14 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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) { Loading Loading @@ -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)); Loading Loading @@ -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 Loading @@ -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 Loading services/usage/java/com/android/server/usage/AppStandbyController.java +9 −5 Original line number Diff line number Diff line Loading @@ -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 = { Loading Loading @@ -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 { Loading Loading @@ -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. Loading Loading
services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +26 −14 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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) { Loading Loading @@ -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)); Loading Loading @@ -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 Loading @@ -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 Loading
services/usage/java/com/android/server/usage/AppStandbyController.java +9 −5 Original line number Diff line number Diff line Loading @@ -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 = { Loading Loading @@ -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 { Loading Loading @@ -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. Loading