From 606aae42427ad34829220566be412fd8fcff1de0 Mon Sep 17 00:00:00 2001 From: Neharika Jali Date: Mon, 25 Oct 2021 05:34:03 +0000 Subject: [PATCH] Eliminating the concept of reserved cache Bug: 203649806 Test: atest installd_cache_test Change-Id: I19c64f5677e184dc04a8def3c61e0e71aaede81d --- .../com/android/server/pm/InstallParams.java | 16 +++++----- .../java/com/android/server/pm/Installer.java | 10 +++++-- .../server/pm/PackageManagerService.java | 29 ++++++++++--------- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallParams.java b/services/core/java/com/android/server/pm/InstallParams.java index bfb5f76298ecb..dc5a9051f77cb 100644 --- a/services/core/java/com/android/server/pm/InstallParams.java +++ b/services/core/java/com/android/server/pm/InstallParams.java @@ -299,13 +299,15 @@ final class InstallParams extends HandlerParams { final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize( mOriginInfo.mResolvedPath, mPackageAbiOverride); if (sizeBytes >= 0) { - try { - mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0, 0); - pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mPm.mContext, - mPackageLite, mOriginInfo.mResolvedPath, mInstallFlags, - mPackageAbiOverride); - } catch (Installer.InstallerException e) { - Slog.w(TAG, "Failed to free cache", e); + synchronized (mPm.mInstallLock) { + try { + mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0); + pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mPm.mContext, + mPackageLite, mOriginInfo.mResolvedPath, mInstallFlags, + mPackageAbiOverride); + } catch (Installer.InstallerException e) { + Slog.w(TAG, "Failed to free cache", e); + } } } diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 7e002bf8c14f5..da43ea3c36ad0 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -655,11 +655,15 @@ public class Installer extends SystemService { } } - public void freeCache(String uuid, long targetFreeBytes, long cacheReservedBytes, int flags) - throws InstallerException { + /** + * Deletes cache from specified uuid until targetFreeBytes amount of space is free. + * flag denotes aggressive or non-aggresive mode where cache under quota is eligible or not + * respectively for clearing. + */ + public void freeCache(String uuid, long targetFreeBytes, int flags) throws InstallerException { if (!checkBeforeRemote()) return; try { - mInstalld.freeCache(uuid, targetFreeBytes, cacheReservedBytes, flags); + mInstalld.freeCache(uuid, targetFreeBytes, flags); } catch (Exception e) { throw InstallerException.from(e); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 89e47b9cbe046..9a5ba50825d85 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -142,7 +142,6 @@ import android.content.pm.dex.IArtManager; import android.content.pm.overlay.OverlayPaths; import android.content.pm.parsing.ParsingPackageUtils; import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedActivityImpl; import android.content.pm.parsing.component.ParsedInstrumentation; import android.content.pm.parsing.component.ParsedIntentInfo; import android.content.pm.parsing.component.ParsedMainComponent; @@ -2849,7 +2848,6 @@ public class PackageManagerService extends IPackageManager.Stub volumeUuid); final boolean aggressive = (storageFlags & StorageManager.FLAG_ALLOCATE_AGGRESSIVE) != 0; - final long reservedBytes = storage.getStorageCacheBytes(file, storageFlags); // 1. Pre-flight to determine if we have any chance to succeed // 2. Consider preloaded data (after 1w honeymoon, unless aggressive) @@ -2866,10 +2864,11 @@ public class PackageManagerService extends IPackageManager.Stub } // 4. Consider cached app data (above quotas) - try { - mInstaller.freeCache(volumeUuid, bytes, reservedBytes, - Installer.FLAG_FREE_CACHE_V2); - } catch (InstallerException ignored) { + synchronized (mInstallLock) { + try { + mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2); + } catch (InstallerException ignored) { + } } if (file.getUsableSpace() >= bytes) return; @@ -2893,10 +2892,12 @@ public class PackageManagerService extends IPackageManager.Stub } // 8. Consider cached app data (below quotas) - try { - mInstaller.freeCache(volumeUuid, bytes, reservedBytes, - Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); - } catch (InstallerException ignored) { + synchronized (mInstallLock) { + try { + mInstaller.freeCache(volumeUuid, bytes, + Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); + } catch (InstallerException ignored) { + } } if (file.getUsableSpace() >= bytes) return; @@ -2922,9 +2923,11 @@ public class PackageManagerService extends IPackageManager.Stub // 12. Clear temp install session files mInstallerService.freeStageDirs(volumeUuid); } else { - try { - mInstaller.freeCache(volumeUuid, bytes, 0, 0); - } catch (InstallerException ignored) { + synchronized (mInstallLock) { + try { + mInstaller.freeCache(volumeUuid, bytes, 0); + } catch (InstallerException ignored) { + } } } if (file.getUsableSpace() >= bytes) return;