From 4e729acd167d762855cb3da96d16045ba3ceec61 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Wed, 27 Apr 2022 09:47:23 -0700 Subject: [PATCH] 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 --- .../java/com/android/server/pm/InstallPackageHelper.java | 2 -- .../core/java/com/android/server/pm/PackageHandler.java | 8 +------- .../java/com/android/server/pm/PackageManagerService.java | 6 ++++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 8bd1da9fbe9b2..2d8d4f5881925 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2545,7 +2545,6 @@ final class InstallPackageHelper { ArrayList[] components; int size = 0; int[] uids; - Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT); synchronized (mPm.mLock) { final SparseArray>> 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, diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java index e8faca9765f85..0dfa31c5f1fc3 100644 --- a/services/core/java/com/android/server/pm/PackageHandler.java +++ b/services/core/java/com/android/server/pm/PackageHandler.java @@ -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; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 88564aa2e935a..2cef35fcf0f60 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -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); },