summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alan Stokes <alanstokes@google.com> 2019-11-06 11:46:52 +0000
committer Alan Stokes <alanstokes@google.com> 2019-11-06 12:07:14 +0000
commitd06bcac213f671d76387655addfd6febe2b7a1e7 (patch)
treecde3c472d384b662c5e9e9c361bae9f61429e1d7
parent3320ee5cc6526f31cfca49c1959b9d34c446dfdb (diff)
Shrink array at most once.
This removes worst-case N^2 behavior, does fewer allocations, and seems easier to understand. (Admittedly the case where it matters is probably rare.) Test: atest PackageManagerTest Change-Id: I62aa9d84a95a017269953e4e4f4c86e20a5a1838
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java4
1 files changed, 1 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 340720e2f1fb..ba7f08cf7cc2 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5694,11 +5694,9 @@ public class PackageManagerService extends IPackageManager.Stub
PackageSetting ps = it.next();
if (ps.getInstalled(userId)) {
res[i++] = ps.name;
- } else {
- res = ArrayUtils.removeElement(String.class, res, res[i]);
}
}
- return res;
+ return ArrayUtils.trimToSize(res, i);
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (ps.getInstalled(userId)