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

Commit d228dbbb authored by JW Wang's avatar JW Wang
Browse files

Offload tasks from the main thread

It is bad to do IO on the main thread. Since the constructor happens
during booting, we also slightly improve boot time with this change.

Bug: 159081750
Test: atest StagedRollbackTest CtsRollbackManagerHostTestCases

Change-Id: I5a2434ac00ab7994f03355e720a9bf44d990a924
parent 0a611a88
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba

    // The list of all rollbacks, including available and committed rollbacks.
    // Accessed on the handler thread only.
    private final List<Rollback> mRollbacks;
    private final List<Rollback> mRollbacks = new ArrayList<>();

    // Apk sessions from a staged session with no matching rollback.
    // Accessed on the handler thread only.
@@ -189,8 +189,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba
        mPackageHealthObserver = new RollbackPackageHealthObserver(mContext);
        mAppDataRollbackHelper = new AppDataRollbackHelper(mInstaller);

        // Kick off and start monitoring the handler thread.
        HandlerThread handlerThread = new HandlerThread("RollbackManagerServiceHandler");
        handlerThread.start();
        mHandler = new Handler(handlerThread.getLooper());
        Watchdog.getInstance().addThread(getHandler(), HANDLER_THREAD_TIMEOUT_DURATION_MILLIS);
        mExecutor = new HandlerExecutor(getHandler());

        // Load rollback data from device storage.
        mRollbacks = mRollbackStore.loadRollbacks();
        getHandler().post(() -> {
            mRollbacks.addAll(mRollbackStore.loadRollbacks());
            if (!context.getPackageManager().isDeviceUpgrading()) {
                for (Rollback rollback : mRollbacks) {
                    mAllocatedRollbackIds.put(rollback.info.getRollbackId(), true);
@@ -202,13 +210,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba
                }
                mRollbacks.clear();
            }

        // Kick off and start monitoring the handler thread.
        HandlerThread handlerThread = new HandlerThread("RollbackManagerServiceHandler");
        handlerThread.start();
        mHandler = new Handler(handlerThread.getLooper());
        Watchdog.getInstance().addThread(getHandler(), HANDLER_THREAD_TIMEOUT_DURATION_MILLIS);
        mExecutor = new HandlerExecutor(getHandler());
        });

        UserManager userManager = mContext.getSystemService(UserManager.class);
        for (UserHandle user : userManager.getUserHandles(true)) {