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

Commit b0dbf1f4 authored by Harshit Mahajan's avatar Harshit Mahajan Committed by Android (Google) Code Review
Browse files

Merge changes from topics "registerHealthObserver", "startObserveringHealth" into main

* changes:
  Moving startObservingHealth API to PackageWatchdog
  Expose APIs for new observers
parents f923d445 c5c2b427
Loading
Loading
Loading
Loading
+1 −4
Original line number Original line Diff line number Diff line
@@ -346,7 +346,6 @@ public class PackageWatchdog {
     * @param observer instance of {@link PackageHealthObserver} for observing package failures
     * @param observer instance of {@link PackageHealthObserver} for observing package failures
     *                 and boot loops.
     *                 and boot loops.
     * @param executor Executor for the thread on which observers would receive callbacks
     * @param executor Executor for the thread on which observers would receive callbacks
     * @hide
     */
     */
    public void registerHealthObserver(@NonNull PackageHealthObserver observer,
    public void registerHealthObserver(@NonNull PackageHealthObserver observer,
            @NonNull @CallbackExecutor Executor executor) {
            @NonNull @CallbackExecutor Executor executor) {
@@ -390,7 +389,6 @@ public class PackageWatchdog {
     *                  less than 1, a default monitoring duration 2 days will be used.
     *                  less than 1, a default monitoring duration 2 days will be used.
     *
     *
     * @throws IllegalStateException if the observer was not previously registered
     * @throws IllegalStateException if the observer was not previously registered
     * @hide
     */
     */
    public void startExplicitHealthCheck(@NonNull PackageHealthObserver observer,
    public void startExplicitHealthCheck(@NonNull PackageHealthObserver observer,
            @NonNull List<String> packageNames, long timeoutMs) {
            @NonNull List<String> packageNames, long timeoutMs) {
@@ -458,9 +456,8 @@ public class PackageWatchdog {
     * Unregisters {@code observer} from listening to package failure.
     * Unregisters {@code observer} from listening to package failure.
     * Additionally, this stops observing any packages that may have previously been observed
     * Additionally, this stops observing any packages that may have previously been observed
     * even from a previous boot.
     * even from a previous boot.
     * @hide
     */
     */
    public void unregisterHealthObserver(PackageHealthObserver observer) {
    public void unregisterHealthObserver(@NonNull PackageHealthObserver observer) {
        mLongTaskHandler.post(() -> {
        mLongTaskHandler.post(() -> {
            synchronized (sLock) {
            synchronized (sLock) {
                mAllObservers.remove(observer.getUniqueIdentifier());
                mAllObservers.remove(observer.getUniqueIdentifier());
+0 −10
Original line number Original line Diff line number Diff line
@@ -274,16 +274,6 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
        Preconditions.checkState(mHandler.getLooper().isCurrentThread());
        Preconditions.checkState(mHandler.getLooper().isCurrentThread());
    }
    }


    /**
     * Start observing health of {@code packages} for {@code durationMs}.
     * This may cause {@code packages} to be rolled back if they crash too freqeuntly.
     */
    @AnyThread
    @NonNull
    public void startObservingHealth(@NonNull List<String> packages, @NonNull long durationMs) {
        PackageWatchdog.getInstance(mContext).startExplicitHealthCheck(this, packages, durationMs);
    }

    @AnyThread
    @AnyThread
    @NonNull
    @NonNull
    public void notifyRollbackAvailable(@NonNull RollbackInfo rollback) {
    public void notifyRollbackAvailable(@NonNull RollbackInfo rollback) {
+7 −5
Original line number Original line Diff line number Diff line
@@ -163,6 +163,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba
    private final RollbackPackageHealthObserver mPackageHealthObserver;
    private final RollbackPackageHealthObserver mPackageHealthObserver;
    private final AppDataRollbackHelper mAppDataRollbackHelper;
    private final AppDataRollbackHelper mAppDataRollbackHelper;
    private final Runnable mRunExpiration = this::runExpiration;
    private final Runnable mRunExpiration = this::runExpiration;
    private final PackageWatchdog mPackageWatchdog;


    // The # of milli-seconds to sleep for each received ACTION_PACKAGE_ENABLE_ROLLBACK.
    // The # of milli-seconds to sleep for each received ACTION_PACKAGE_ENABLE_ROLLBACK.
    // Used by #blockRollbackManager to test timeout in enabling rollbacks.
    // Used by #blockRollbackManager to test timeout in enabling rollbacks.
@@ -190,6 +191,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba


        mPackageHealthObserver = new RollbackPackageHealthObserver(mContext);
        mPackageHealthObserver = new RollbackPackageHealthObserver(mContext);
        mAppDataRollbackHelper = new AppDataRollbackHelper(mInstaller);
        mAppDataRollbackHelper = new AppDataRollbackHelper(mInstaller);
        mPackageWatchdog = PackageWatchdog.getInstance(mContext);


        // Kick off and start monitoring the handler thread.
        // Kick off and start monitoring the handler thread.
        HandlerThread handlerThread = new HandlerThread("RollbackManagerServiceHandler");
        HandlerThread handlerThread = new HandlerThread("RollbackManagerServiceHandler");
@@ -1249,12 +1251,12 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba
                // should document in PackageInstaller.SessionParams#setEnableRollback
                // should document in PackageInstaller.SessionParams#setEnableRollback
                // After enabling and committing any rollback, observe packages and
                // After enabling and committing any rollback, observe packages and
                // prepare to rollback if packages crashes too frequently.
                // prepare to rollback if packages crashes too frequently.
                mPackageHealthObserver.startObservingHealth(rollback.getPackageNames(),
                mPackageWatchdog.startExplicitHealthCheck(mPackageHealthObserver,
                        mRollbackLifetimeDurationInMillis);
                        rollback.getPackageNames(), mRollbackLifetimeDurationInMillis);
            }
            }
        } else {
        } else {
            mPackageHealthObserver.startObservingHealth(rollback.getPackageNames(),
            mPackageWatchdog.startExplicitHealthCheck(mPackageHealthObserver,
                    mRollbackLifetimeDurationInMillis);
                    rollback.getPackageNames(), mRollbackLifetimeDurationInMillis);
        }
        }
        runExpiration();
        runExpiration();
    }
    }
@@ -1317,7 +1319,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba
            }
            }


        });
        });
        PackageWatchdog.getInstance(mContext).dump(ipw);
        mPackageWatchdog.dump(ipw);
    }
    }


    @AnyThread
    @AnyThread