Loading services/core/Android.bp +3 −3 Original line number Diff line number Diff line Loading @@ -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"], Loading services/core/java/com/android/server/pm/AppsFilterLocked.java +15 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading services/core/java/com/android/server/pm/PackageManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading services/core/java/com/android/server/pm/Settings.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading
services/core/Android.bp +3 −3 Original line number Diff line number Diff line Loading @@ -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"], Loading
services/core/java/com/android/server/pm/AppsFilterLocked.java +15 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
services/core/java/com/android/server/pm/Settings.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading