summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Merger (Role) <android-build-merger@google.com> 2016-06-30 23:54:24 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-06-30 23:54:25 +0000
commitd6340b4226d907ef6728221635d072523fb03d52 (patch)
tree7d68b2a6755b7abcb7d3a510f5e01c3b3f45e107
parente04822dbd3fe84107297dd6c5c107d86df64fc4b (diff)
parent5b1f11086019b60cd85ad573140c8752b463d2f9 (diff)
Merge "Merge \"Performance optimizations in generatePackageInfo\" into nyc-mr1-dev am: 4d9af67fe2" into nyc-mr1-dev-plus-aosp
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java9
-rw-r--r--services/core/java/com/android/server/pm/PermissionsState.java3
2 files changed, 7 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 56406caeeaf6..2ebb9f6ace58 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3217,10 +3217,11 @@ public class PackageManagerService extends IPackageManager.Stub {
final PermissionsState permissionsState = ps.getPermissionsState();
// Compute GIDs only if requested
- final int[] gids = (flags & PackageManager.GET_GIDS) != 0
- ? permissionsState.computeGids(userId) : EMPTY_INT_ARRAY;
- // TODO b/29879962 Calculate granted permissions only if needed in generatePackageInfo
- final Set<String> permissions = permissionsState.getPermissions(userId);
+ final int[] gids = (flags & PackageManager.GET_GIDS) == 0
+ ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
+ // Compute granted permissions only if package has requested permissions
+ final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
+ ? Collections.<String>emptySet() : permissionsState.getPermissions(userId);
final PackageUserState state = ps.readUserState(userId);
return PackageParser.generatePackageInfo(p, gids, flags,
diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java
index 007b73814256..8f9968ecf7fd 100644
--- a/services/core/java/com/android/server/pm/PermissionsState.java
+++ b/services/core/java/com/android/server/pm/PermissionsState.java
@@ -274,7 +274,7 @@ public final class PermissionsState {
return Collections.emptySet();
}
- Set<String> permissions = new ArraySet<>();
+ Set<String> permissions = new ArraySet<>(mPermissions.size());
final int permissionCount = mPermissions.size();
for (int i = 0; i < permissionCount; i++) {
@@ -282,6 +282,7 @@ public final class PermissionsState {
if (hasInstallPermission(permission)) {
permissions.add(permission);
+ continue;
}
if (userId != UserHandle.USER_ALL) {