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

Commit d4dae380 authored by Xin Guan's avatar Xin Guan
Browse files

Avoid app idle check on boot.

- Avoid app idle check during the boot up
- Avoid duplicate STANDBY_BUCKET_CHANGE usage event
  reporting during the boot up.
- Logging fix.

Bug: 337864590
Test: atest CtsUsageStatsTestCases:UsageStatsTest
Test: atest FrameworksServicesTests:AppIdleHistoryTests
Test: atest FrameworksServicesTests:AppStandbyControllerTests
Change-Id: Iee31b50be48dc38c25dd6c885535ab9426edff4a
parent c0672ad4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ java_library {
        "modules-utils-fastxmlserializer",
        "service-jobscheduler-alarm.flags-aconfig-java",
        "service-jobscheduler-job.flags-aconfig-java",
        "service-jobscheduler-appidle.flags-aconfig-java",
    ],

    // Rename classes shared with the framework
+13 −0
Original line number Diff line number Diff line
@@ -42,3 +42,16 @@ java_aconfig_library {
    name: "service-jobscheduler-alarm.flags-aconfig-java",
    aconfig_declarations: "alarm_flags",
}

// App Idle
aconfig_declarations {
    name: "app_idle_flags",
    package: "com.android.server.usage",
    container: "system",
    srcs: ["app_idle.aconfig"],
}

java_aconfig_library {
    name: "service-jobscheduler-appidle.flags-aconfig-java",
    aconfig_declarations: "app_idle_flags",
}
+14 −0
Original line number Diff line number Diff line
package: "com.android.server.usage"
container: "system"

flag {
    name: "avoid_idle_check"
    namespace: "backstage_power"
    description: "Postpone app idle check after boot completed"
    is_fixed_read_only: true
    bug: "337864590"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+7 −1
Original line number Diff line number Diff line
@@ -788,7 +788,13 @@ public class AppIdleHistory {
                        }
                        appUsageHistory.nextEstimatedLaunchTime = getLongValue(parser,
                                ATTR_NEXT_ESTIMATED_APP_LAUNCH_TIME, 0);
                        if (Flags.avoidIdleCheck()) {
                            // Set lastInformedBucket to the same value with the currentBucket
                            // it should have already been informed.
                            appUsageHistory.lastInformedBucket = appUsageHistory.currentBucket;
                        } else {
                            appUsageHistory.lastInformedBucket = -1;
                        }
                        userHistory.put(packageName, appUsageHistory);

                        if (version >= XML_VERSION_ADD_BUCKET_EXPIRY_TIMES) {
+18 −6
Original line number Diff line number Diff line
@@ -707,7 +707,7 @@ public class AppStandbyController
                initializeDefaultsForSystemApps(UserHandle.USER_SYSTEM);
            }

            if (mPendingOneTimeCheckIdleStates) {
            if (!Flags.avoidIdleCheck() && mPendingOneTimeCheckIdleStates) {
                postOneTimeCheckIdleStates();
            }

@@ -1021,7 +1021,7 @@ public class AppStandbyController
                                        == REASON_SUB_DEFAULT_APP_RESTORED)) {
                            newBucket = getBucketForLocked(packageName, userId, elapsedRealtime);
                            if (DEBUG) {
                                Slog.d(TAG, "Evaluated AOSP newBucket = "
                                Slog.d(TAG, "Evaluated " + packageName + " newBucket = "
                                        + standbyBucketToString(newBucket));
                            }
                            reason = REASON_MAIN_TIMEOUT;
@@ -1990,9 +1990,11 @@ public class AppStandbyController
            }
        }
        if (android.app.admin.flags.Flags.disallowUserControlBgUsageFix()) {
            if (!Flags.avoidIdleCheck()) {
                postCheckIdleStates(userId);
            }
        }
    }

    @Override
    public void onAdminDataAvailable() {
@@ -2392,11 +2394,16 @@ public class AppStandbyController
            final boolean isHeadLess = !systemLauncherActivities.contains(pkg);

            if (updateHeadlessSystemAppCache(pkg, isHeadLess)) {
                if (!Flags.avoidIdleCheck()) {
                    // Checking idle state for the each individual headless system app
                    // during the boot up is not necessary, a full idle check for all
                    // usres will be scheduled after boot completed.
                    mHandler.obtainMessage(MSG_CHECK_PACKAGE_IDLE_STATE,
                                    UserHandle.USER_SYSTEM, -1, pkg)
                            .sendToTarget();
                }
            }
        }
        final long end = SystemClock.uptimeMillis();
        Slog.d(TAG, "Loaded headless system app cache in " + (end - start) + " ms:"
                + " appIdleEnabled=" + mAppIdleEnabled);
@@ -2438,6 +2445,11 @@ public class AppStandbyController

    @Override
    public void dumpState(String[] args, PrintWriter pw) {
        pw.println("Flags: ");
        pw.println("    " + Flags.FLAG_AVOID_IDLE_CHECK
                + ": " + Flags.avoidIdleCheck());
        pw.println();

        synchronized (mCarrierPrivilegedLock) {
            pw.println("Carrier privileged apps (have=" + mHaveCarrierPrivilegedApps
                    + "): " + mCarrierPrivilegedApps);
Loading