diff options
| author | 2014-10-14 17:51:21 +0000 | |
|---|---|---|
| committer | 2014-10-14 17:51:21 +0000 | |
| commit | 838018b2536d66455edf65ec263c5b99e7744a46 (patch) | |
| tree | 1d559af294bedf8b0ea05dda1648972971f7708e | |
| parent | 9766d5b236394dbc988619a4e0236621add3c6b6 (diff) | |
| parent | b5c5354fdab213c28d0817169d4ed100cc3e0215 (diff) | |
am b5c5354f: am 63360780: Merge "Stop boot dexopt when low on memory." into lmp-mr1-dev
* commit 'b5c5354fdab213c28d0817169d4ed100cc3e0215':
Stop boot dexopt when low on memory.
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 1059f0ba2bdf..b79e15756a11 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); } |