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

Commit 4b7f97e0 authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "Reduce lock contention." into tm-dev

parents 645d078e 9d681f1d
Loading
Loading
Loading
Loading
+34 −55
Original line number Diff line number Diff line
@@ -165,51 +165,36 @@ public class ApplicationPackageManager extends PackageManager {
    public static final String PERMISSION_CONTROLLER_RESOURCE_PACKAGE =
            "com.android.permissioncontroller";

    private final Object mLock = new Object();

    @GuardedBy("mLock")
    private UserManager mUserManager;
    @GuardedBy("mLock")
    private PermissionManager mPermissionManager;
    @GuardedBy("mLock")
    private PackageInstaller mInstaller;
    @GuardedBy("mLock")
    private ArtManager mArtManager;
    @GuardedBy("mLock")
    private DevicePolicyManager mDevicePolicyManager;
    private volatile UserManager mUserManager;
    private volatile PermissionManager mPermissionManager;
    private volatile PackageInstaller mInstaller;
    private volatile ArtManager mArtManager;
    private volatile DevicePolicyManager mDevicePolicyManager;
    private volatile String mPermissionsControllerPackageName;

    @GuardedBy("mDelegates")
    private final ArrayList<MoveCallbackDelegate> mDelegates = new ArrayList<>();

    @GuardedBy("mLock")
    private String mPermissionsControllerPackageName;

    UserManager getUserManager() {
        synchronized (mLock) {
        if (mUserManager == null) {
            mUserManager = UserManager.get(mContext);
        }
        return mUserManager;
    }
    }

    DevicePolicyManager getDevicePolicyManager() {
        synchronized (mLock) {
        if (mDevicePolicyManager == null) {
            mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
        }
        return mDevicePolicyManager;
    }
    }

    private PermissionManager getPermissionManager() {
        synchronized (mLock) {
        if (mPermissionManager == null) {
            mPermissionManager = mContext.getSystemService(PermissionManager.class);
        }
        return mPermissionManager;
    }
    }

    @Override
    public int getUserId() {
@@ -851,7 +836,6 @@ public class ApplicationPackageManager extends PackageManager {
     */
    @Override
    public String getPermissionControllerPackageName() {
        synchronized (mLock) {
        if (mPermissionsControllerPackageName == null) {
            try {
                mPermissionsControllerPackageName = mPM.getPermissionControllerPackageName();
@@ -861,7 +845,6 @@ public class ApplicationPackageManager extends PackageManager {
        }
        return mPermissionsControllerPackageName;
    }
    }

    /**
     * @hide
@@ -3235,7 +3218,6 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public PackageInstaller getPackageInstaller() {
        synchronized (mLock) {
        if (mInstaller == null) {
            try {
                mInstaller = new PackageInstaller(mPM.getPackageInstaller(),
@@ -3246,7 +3228,6 @@ public class ApplicationPackageManager extends PackageManager {
        }
        return mInstaller;
    }
    }

    @Override
    public boolean isPackageAvailable(String packageName) {
@@ -3583,7 +3564,6 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public ArtManager getArtManager() {
        synchronized (mLock) {
        if (mArtManager == null) {
            try {
                mArtManager = new ArtManager(mContext, mPM.getArtManager());
@@ -3593,7 +3573,6 @@ public class ApplicationPackageManager extends PackageManager {
        }
        return mArtManager;
    }
    }

    @Override
    public String getDefaultTextClassifierPackageName() {
+5 −0
Original line number Diff line number Diff line
@@ -6692,6 +6692,11 @@ public class PackageManagerService extends IPackageManager.Stub

    @Override
    public IPackageInstaller getPackageInstaller() {
        // Return installer service for internal calls.
        if (PackageManagerServiceUtils.isSystemOrRoot()) {
            return mInstallerService;
        }
        // Return null for InstantApps.
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
            return null;
        }
+9 −2
Original line number Diff line number Diff line
@@ -1249,6 +1249,14 @@ public class PackageManagerServiceUtils {
        }
    }

    /**
     * Check if the Binder caller is system UID or root's UID.
     */
    public static boolean isSystemOrRoot() {
        final int uid = Binder.getCallingUid();
        return uid == Process.SYSTEM_UID || uid == Process.ROOT_UID;
    }

    /**
     * Enforces that only the system UID or root's UID can call a method exposed
     * via Binder.
@@ -1257,8 +1265,7 @@ public class PackageManagerServiceUtils {
     * @throws SecurityException if the caller is not system or root
     */
    public static void enforceSystemOrRoot(String message) {
        final int uid = Binder.getCallingUid();
        if (uid != Process.SYSTEM_UID && uid != Process.ROOT_UID) {
        if (!isSystemOrRoot()) {
            throw new SecurityException(message);
        }
    }