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

Commit f7cb1922 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Cache getProfileParent to reduce high volume of binder calls." into main

parents a994119a c08c2960
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -5602,15 +5602,31 @@ public class UserManager {
            android.Manifest.permission.MANAGE_USERS,
            android.Manifest.permission.INTERACT_ACROSS_USERS
    })
    @CachedProperty(api = "user_manager_users")
    public @Nullable UserHandle getProfileParent(@NonNull UserHandle user) {
        if (android.multiuser.Flags.cacheProfileParentReadOnly()) {
            final UserHandle userHandle = UserManagerCache.getProfileParent(
                    (UserHandle query) -> {
                        UserInfo info = getProfileParent(query.getIdentifier());
                        // TODO: Remove when b/372923336 is fixed
                        if (info == null) {
                            return UserHandle.of(UserHandle.USER_NULL);
                        }
                        return UserHandle.of(info.id);
                    },
                    user);
            if (userHandle.getIdentifier() == UserHandle.USER_NULL) {
                return null;
            }
            return userHandle;
        } else {
            UserInfo info = getProfileParent(user.getIdentifier());

            if (info == null) {
                return null;
            }

            return UserHandle.of(info.id);
        }
    }

    /**
     * Enables or disables quiet mode for a profile. If quiet mode is enabled, apps in the profile
@@ -6424,6 +6440,9 @@ public class UserManager {
     */
    public static final void invalidateCacheOnUserListChange() {
        UserManagerCache.invalidateUserSerialNumber();
        if (android.multiuser.Flags.cacheProfileParentReadOnly()) {
            UserManagerCache.invalidateProfileParent();
        }
    }

    /**
+6 −0
Original line number Diff line number Diff line
@@ -5790,6 +5790,9 @@ public class UserManagerService extends IUserManager.Stub {
            }

            userInfo.partial = false;
            if (android.multiuser.Flags.invalidateCacheOnUsersChangedReadOnly()) {
                UserManager.invalidateCacheOnUserListChange();
            }
            synchronized (mPackagesLock) {
                writeUserLP(userData);
            }
@@ -6382,6 +6385,9 @@ public class UserManagerService extends IUserManager.Stub {
                // on next startup, in case the runtime stops now before stopping and
                // removing the user completely.
                userData.info.partial = true;
                if (android.multiuser.Flags.invalidateCacheOnUsersChangedReadOnly()) {
                    UserManager.invalidateCacheOnUserListChange();
                }
                // Mark it as disabled, so that it isn't returned any more when
                // profiles are queried.
                userData.info.flags |= UserInfo.FLAG_DISABLED;