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

Commit 4208febb authored by Xin Guan's avatar Xin Guan Committed by Android (Google) Code Review
Browse files

Merge "Boost thread priority when holding PM locks"

parents 6576ec61 8e971415
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -201,9 +201,9 @@ java_genrule {
    srcs: [":services.core.unboosted"],
    tools: ["lockedregioncodeinjection"],
    cmd: "$(location lockedregioncodeinjection) " +
        "  --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " +
        "  --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " +
        "  --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " +
        "  --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;,Lcom/android/server/pm/PackageManagerTracedLock;\" " +
        "  --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection,com/android/server/pm/PackageManagerService.boostPriorityForPackageManagerTracedLockedSection\" " +
        "  --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection,com/android/server/pm/PackageManagerService.resetPriorityAfterPackageManagerTracedLockedSection\" " +
        "  -o $(out) " +
        "  -i $(in)",
    out: ["services.core.priorityboosted.jar"],
+15 −8
Original line number Diff line number Diff line
@@ -28,21 +28,28 @@ abstract class AppsFilterLocked extends AppsFilterBase {
    /**
     * The following locks guard the accesses for the list/set class members
     */
    protected final Object mForceQueryableLock = new Object();
    protected final Object mQueriesViaPackageLock = new Object();
    protected final Object mQueriesViaComponentLock = new Object();
    protected final PackageManagerTracedLock mForceQueryableLock =
            new PackageManagerTracedLock();
    protected final PackageManagerTracedLock mQueriesViaPackageLock =
            new PackageManagerTracedLock();
    protected final PackageManagerTracedLock mQueriesViaComponentLock =
            new PackageManagerTracedLock();
    /**
     * This lock covers both {@link #mImplicitlyQueryable} and {@link #mRetainedImplicitlyQueryable}
     */
    protected final Object mImplicitlyQueryableLock = new Object();
    protected final Object mQueryableViaUsesLibraryLock = new Object();
    protected final Object mProtectedBroadcastsLock = new Object();
    protected final Object mQueryableViaUsesPermissionLock = new Object();
    protected final PackageManagerTracedLock mImplicitlyQueryableLock =
        new PackageManagerTracedLock();
    protected final PackageManagerTracedLock mQueryableViaUsesLibraryLock =
        new PackageManagerTracedLock();
    protected final PackageManagerTracedLock mProtectedBroadcastsLock =
        new PackageManagerTracedLock();
    protected final PackageManagerTracedLock mQueryableViaUsesPermissionLock =
        new PackageManagerTracedLock();

    /**
     * Guards the access for {@link AppsFilterBase#mShouldFilterCache};
     */
    protected final Object mCacheLock = new Object();
    protected final PackageManagerTracedLock mCacheLock = new PackageManagerTracedLock();

    @Override
    protected boolean isForceQueryable(int appId) {
+27 −0
Original line number Diff line number Diff line
@@ -198,6 +198,7 @@ import com.android.server.LockGuard;
import com.android.server.PackageWatchdog;
import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.ThreadPriorityBooster;
import com.android.server.Watchdog;
import com.android.server.apphibernation.AppHibernationManagerInternal;
import com.android.server.art.DexUseManagerLocal;
@@ -996,6 +997,32 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    private final DistractingPackageHelper mDistractingPackageHelper;
    private final StorageEventHelper mStorageEventHelper;

    private static final boolean ENABLE_BOOST = true;

    private static ThreadPriorityBooster sThreadPriorityBooster = new ThreadPriorityBooster(
            Process.THREAD_PRIORITY_FOREGROUND, LockGuard.INDEX_PACKAGES);

    /**
     * Boost the priority of the thread before holding PM traced lock.
     * @hide
     */
    public static void boostPriorityForPackageManagerTracedLockedSection() {
        if (ENABLE_BOOST) {
            sThreadPriorityBooster.boost();
        }
    }


    /**
     * Restore the priority of the thread after release the PM traced lock.
     * @hide
     */
    public static void resetPriorityAfterPackageManagerTracedLockedSection() {
        if (ENABLE_BOOST) {
            sThreadPriorityBooster.reset();
        }
    }

    /**
     * Invalidate the package info cache, which includes updating the cached computer.
     * @hide
+1 −1
Original line number Diff line number Diff line
@@ -5722,7 +5722,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                legacyPermissionDataProvider,
                @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates,
                @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers,
                @Nullable Handler pmHandler, @NonNull Object pmLock,
                @Nullable Handler pmHandler, @NonNull PackageManagerTracedLock pmLock,
                boolean sync) {
            synchronized (mLock) {
                mAsyncHandler.removeMessages(userId);
+2 −1
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ import com.android.server.Watchdog;
import com.android.server.pm.ApexManager;
import com.android.server.pm.KnownPackages;
import com.android.server.pm.PackageInstallerService;
import com.android.server.pm.PackageManagerTracedLock;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerService;
import com.android.server.pm.parsing.PackageInfoUtils;
@@ -252,7 +253,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
            new ArraySet<>();

    /** Lock to protect internal data access */
    private final Object mLock = new Object();
    private final PackageManagerTracedLock mLock = new PackageManagerTracedLock();

    /** Internal connection to the package manager */
    private final PackageManagerInternal mPackageManagerInt;