diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2016-05-19 03:43:07 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-05-19 03:43:08 +0000 |
| commit | 8cb3b2bb5c49322cef07931a0ee14c99da5e4b0b (patch) | |
| tree | e3aa65c7563beace69369266cb0f2c4bf3395bd8 /core/java | |
| parent | 13778161ea58c56be37aa08778551b217ad649e4 (diff) | |
| parent | a8a58ffdeeb6a4a05de227a34972d99c005d2bf0 (diff) | |
Merge "Frameworks/base: Optimize LoadedApk" into nyc-dev
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/LoadedApk.java | 15 | ||||
| -rw-r--r-- | core/java/android/text/TextUtils.java | 11 |
2 files changed, 17 insertions, 9 deletions
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 185884fab753..1f3dfa729a92 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -458,8 +458,14 @@ public final class LoadedApk { } } - final List<String> zipPaths = new ArrayList<>(); - final List<String> libPaths = new ArrayList<>(); + // Lists for the elements of zip/code and native libraries. + // + // Both lists are usually not empty. We expect on average one APK for the zip component, + // but shared libraries and splits are not uncommon. We expect at least three elements + // for native libraries (app-based, system, vendor). As such, give both some breathing + // space and initialize to a small value (instead of incurring growth code). + final List<String> zipPaths = new ArrayList<>(10); + final List<String> libPaths = new ArrayList<>(10); makePaths(mActivityThread, mApplicationInfo, zipPaths, libPaths); final boolean isBundledApp = mApplicationInfo.isSystemApp() @@ -495,8 +501,11 @@ public final class LoadedApk { /* * With all the combination done (if necessary, actually create the java class * loader and set up JIT profiling support if necessary. + * + * In many cases this is a single APK, so try to avoid the StringBuilder in TextUtils. */ - final String zip = TextUtils.join(File.pathSeparator, zipPaths); + final String zip = (zipPaths.size() == 1) ? zipPaths.get(0) : + TextUtils.join(File.pathSeparator, zipPaths); if (ActivityThread.localLOGV) Slog.v(ActivityThread.TAG, "Class path: " + zip + diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 71b53f1f42ae..1c13962c7dfd 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -309,14 +309,13 @@ public class TextUtils { */ public static String join(CharSequence delimiter, Iterable tokens) { StringBuilder sb = new StringBuilder(); - boolean firstTime = true; - for (Object token: tokens) { - if (firstTime) { - firstTime = false; - } else { + Iterator<?> it = tokens.iterator(); + if (it.hasNext()) { + sb.append(it.next()); + while (it.hasNext()) { sb.append(delimiter); + sb.append(it.next()); } - sb.append(token); } return sb.toString(); } |
