diff options
| -rw-r--r-- | services/core/java/com/android/server/PinnerService.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/flags/pinner.aconfig | 7 |
2 files changed, 15 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java index d9e6186639ce..ef03888d6620 100644 --- a/services/core/java/com/android/server/PinnerService.java +++ b/services/core/java/com/android/server/PinnerService.java @@ -21,6 +21,7 @@ import static android.app.ActivityManager.UID_OBSERVER_GONE; import static android.os.Process.SYSTEM_UID; import static com.android.server.flags.Flags.pinWebview; +import static com.android.server.flags.Flags.skipHomeArtPins; import android.annotation.EnforcePermission; import android.annotation.IntDef; @@ -851,6 +852,9 @@ public final class PinnerService extends SystemService { } int apkPinSizeLimit = pinSizeLimit; + + boolean shouldSkipArtPins = key == KEY_HOME && skipHomeArtPins(); + for (String apk: apks) { if (apkPinSizeLimit <= 0) { Slog.w(TAG, "Reached to the pin size limit. Skipping: " + apk); @@ -874,8 +878,8 @@ public final class PinnerService extends SystemService { } apkPinSizeLimit -= pf.bytesPinned; - if (apk.equals(appInfo.sourceDir)) { - pinOptimizedDexDependencies(pf, apkPinSizeLimit, appInfo); + if (apk.equals(appInfo.sourceDir) && !shouldSkipArtPins) { + pinOptimizedDexDependencies(pf, Integer.MAX_VALUE, appInfo); } } } @@ -921,8 +925,8 @@ public final class PinnerService extends SystemService { } pf.groupName = groupName != null ? groupName : ""; - maxBytesToPin -= bytesPinned; bytesPinned += pf.bytesPinned; + maxBytesToPin -= bytesPinned; synchronized (this) { mPinnedFiles.put(pf.fileName, pf); @@ -970,7 +974,7 @@ public final class PinnerService extends SystemService { // Unpin if it was already pinned prior to re-pinning. unpinFile(file); - PinnedFile df = mInjector.pinFileInternal(file, Integer.MAX_VALUE, + PinnedFile df = mInjector.pinFileInternal(file, maxBytesToPin, /*attemptPinIntrospection=*/false); if (df == null) { Slog.i(TAG, "Failed to pin ART file = " + file); diff --git a/services/core/java/com/android/server/flags/pinner.aconfig b/services/core/java/com/android/server/flags/pinner.aconfig index 16a45cd87fd7..2f817dbb9a7f 100644 --- a/services/core/java/com/android/server/flags/pinner.aconfig +++ b/services/core/java/com/android/server/flags/pinner.aconfig @@ -6,4 +6,11 @@ flag { namespace: "system_performance" description: "This flag controls if webview should be pinned in memory." bug: "307594624" +} + +flag { + name: "skip_home_art_pins" + namespace: "system_performance" + description: "Ablation study flag that controls if home app odex/vdex files should be pinned in memory." + bug: "340935152" }
\ No newline at end of file |