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

Commit ce20b827 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Don't log spurious standby bucket changes during startup

Power-save allowlist is not cached early enough in AppStandbyController
This results in many system apps ping-ponging between EXEMPTED and
NEVER buckets, causing too much logging at boot.

Wait for LOCKED_BOOT_COMPLETED before responding to callbacks from
AppStandbyController about bucket changes.

Also, don't treat NEVER bucket as background restricted. It already
addresses job and alarm quotas. This was another source of bucket
changes due to most exempted apps also being in the NEVER bucket at
start.

Bug: 334353399
Test: statsd_testdrive 441
Change-Id: I2b30970b0467e32f2e8049e72c981b64e129ac1c
parent afa456dd
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -334,6 +334,8 @@ public final class AppRestrictionController {

    final ActivityManagerService mActivityManagerService;

    private volatile boolean mLockedBootCompleted = false;

    static final int TRACKER_TYPE_UNKNOWN = 0;
    static final int TRACKER_TYPE_BATTERY = 1;
    static final int TRACKER_TYPE_BATTERY_EXEMPTION = 2;
@@ -1721,8 +1723,10 @@ public final class AppRestrictionController {
                level = RESTRICTION_LEVEL_EXEMPTED;
                break;
            case STANDBY_BUCKET_NEVER:
                if (!android.app.Flags.appRestrictionsApi()) {
                    level = RESTRICTION_LEVEL_BACKGROUND_RESTRICTED;
                    break;
                }
            case STANDBY_BUCKET_ACTIVE:
            case STANDBY_BUCKET_WORKING_SET:
            case STANDBY_BUCKET_FREQUENT:
@@ -1802,7 +1806,9 @@ public final class AppRestrictionController {
            case STANDBY_BUCKET_EXEMPTED:
                return RESTRICTION_LEVEL_EXEMPTED;
            case STANDBY_BUCKET_NEVER:
                if (!android.app.Flags.appRestrictionsApi()) {
                    return RESTRICTION_LEVEL_BACKGROUND_RESTRICTED;
                }
            case STANDBY_BUCKET_ACTIVE:
            case STANDBY_BUCKET_WORKING_SET:
            case STANDBY_BUCKET_FREQUENT:
@@ -2214,7 +2220,8 @@ public final class AppRestrictionController {
            }
        }

        if (doItNow && android.app.Flags.appRestrictionsApi()) {
        if (doItNow && android.app.Flags.appRestrictionsApi()
                && curLevel != RESTRICTION_LEVEL_UNKNOWN) {
            logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level, trackerInfo,
                    reason);
        }
@@ -2308,6 +2315,9 @@ public final class AppRestrictionController {

    private void handleAppStandbyBucketChanged(int bucket, String packageName,
            @UserIdInt int userId) {
        // Ignore spurious changes to standby bucket during early boot
        if (android.app.Flags.appRestrictionsApi() && !mLockedBootCompleted) return;

        final int uid = mInjector.getPackageManagerInternal().getPackageUid(
                packageName, STOCK_PM_FLAGS, userId);
        final Pair<Integer, TrackerInfo> levelTypePair = calcAppRestrictionLevel(
@@ -3391,6 +3401,7 @@ public final class AppRestrictionController {
        for (int i = 0, size = mAppStateTrackers.size(); i < size; i++) {
            mAppStateTrackers.get(i).onLockedBootCompleted();
        }
        mLockedBootCompleted = true;
    }

    boolean isBgAutoRestrictedBucketFeatureFlagEnabled() {