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

Commit 4e729acd authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

PackageManager Handler Thread Priorities adjustment.

Primary handler thread priority changed to DEFAULT from BACKGROUND.
Secondary handler thread priority changed to BACKGROUND from DEFAULT.

There are a few write* operations which include IO, but they are
executed under mLock and we want them to complete ASAP.
If at some point they are made lockless then we will move them to the
secondary thread.

Bug: 230521658
Fixes: 230521658
Test: presubmit
Change-Id: I4d0c6ea696e31976216c69b9be10a8f3f5efd833
parent 3ce32193
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -2545,7 +2545,6 @@ final class InstallPackageHelper {
        ArrayList<String>[] components;
        int size = 0;
        int[] uids;
        Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);

        synchronized (mPm.mLock) {
            final SparseArray<ArrayMap<String, ArrayList<String>>> userIdToPackagesToComponents =
@@ -2584,7 +2583,6 @@ final class InstallPackageHelper {
            mPm.sendPackageChangedBroadcast(snapshot, packages[i], true /* dontKillApp */,
                    components[i], uids[i], null /* reason */);
        }
        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
    }

    void handlePackagePostInstall(PackageInstalledInfo res, InstallArgs installArgs,
+1 −7
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ final class PackageHandler extends Handler {
        try {
            doHandleMessage(msg);
        } finally {
            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
        }
    }

@@ -136,19 +136,13 @@ final class PackageHandler extends Handler {
                }
            } break;
            case WRITE_SETTINGS: {
                Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
                mPm.writeSettings();
                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            } break;
            case WRITE_PACKAGE_RESTRICTIONS: {
                Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
                mPm.writePendingRestrictions();
                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            } break;
            case WRITE_PACKAGE_LIST: {
                Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
                mPm.writePackageList(msg.arg1);
                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            } break;
            case CHECK_PENDING_VERIFICATION: {
                final int verificationId = msg.arg1;
+4 −2
Original line number Diff line number Diff line
@@ -1413,7 +1413,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        t.traceBegin("create package manager");
        final PackageManagerTracedLock lock = new PackageManagerTracedLock();
        final Object installLock = new Object();
        HandlerThread backgroundThread = new HandlerThread("PackageManagerBg");

        HandlerThread backgroundThread = new ServiceThread("PackageManagerBg",
                Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
        backgroundThread.start();
        Handler backgroundHandler = new Handler(backgroundThread.getLooper());

@@ -1467,7 +1469,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                (i, pm) -> domainVerificationService,
                (i, pm) -> {
                    HandlerThread thread = new ServiceThread(TAG,
                            Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
                            Process.THREAD_PRIORITY_DEFAULT, true /*allowIo*/);
                    thread.start();
                    return new PackageHandler(thread.getLooper(), pm);
                },