Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 301e94a9 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

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
parent efe5f129
Loading
Loading
Loading
Loading
+26 −14
Original line number Diff line number Diff line
@@ -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
+9 −5
Original line number Diff line number Diff line
@@ -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.