From 1d892dcb6b0ff3a50cc63e387667dc29baf1014f Mon Sep 17 00:00:00 2001 From: Jeff Hao Date: Fri, 10 Oct 2014 11:35:01 -0700 Subject: Stop boot dexopt when low on memory. Bug: 17641843 Change-Id: Ie1967fc2cd9bdd258bfee442968f98200edaf62e --- .../java/com/android/server/pm/PackageManagerService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'services/core/java') diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 1059f0b..b79e157 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4538,14 +4538,24 @@ public class PackageManagerService extends IPackageManager.Stub { filterRecentlyUsedApps(pkgs); // Add all remaining apps. for (PackageParser.Package pkg : pkgs) { + if (DEBUG_DEXOPT) { + Log.i(TAG, "Adding app " + sortedPkgs.size() + ": " + pkg.packageName); + } sortedPkgs.add(pkg); } int i = 0; int total = sortedPkgs.size(); + File dataDir = Environment.getDataDirectory(); + long lowThreshold = StorageManager.from(mContext).getStorageLowBytes(dataDir); + if (lowThreshold == 0) { + throw new IllegalStateException("Invalid low memory threshold"); + } for (PackageParser.Package pkg : sortedPkgs) { - if (DEBUG_DEXOPT) { - Log.i(TAG, "Adding app " + sortedPkgs.size() + ": " + pkg.packageName); + long usableSpace = dataDir.getUsableSpace(); + if (usableSpace < lowThreshold) { + Log.w(TAG, "Not running dexopt on remaining apps due to low memory: " + usableSpace); + break; } performBootDexOpt(pkg, ++i, total); } -- cgit v1.1