Save package dex usage info after secondary dex reconciliation

am: 61fd6eab46

Change-Id: I90a95645e9d2acf1b2377e165a64b34b1a678295
This commit is contained in:
Calin Juravle
2017-03-03 00:12:19 +00:00
committed by android-build-merger
2 changed files with 15 additions and 3 deletions

View File

@@ -291,6 +291,7 @@ public class DexManager {
return;
}
Set<String> dexFilesToRemove = new HashSet<>();
boolean updated = false;
for (Map.Entry<String, DexUseInfo> entry : useInfo.getDexUseInfoMap().entrySet()) {
String dexPath = entry.getKey();
DexUseInfo dexUseInfo = entry.getValue();
@@ -311,7 +312,8 @@ public class DexManager {
Slog.d(TAG, "Could not find package when compiling secondary dex " + packageName
+ " for user " + dexUseInfo.getOwnerUserId());
// Update the usage and continue, another user might still have the package.
mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId());
updated = mPackageDexUsage.removeUserPackage(
packageName, dexUseInfo.getOwnerUserId()) || updated;
continue;
}
ApplicationInfo info = pkg.applicationInfo;
@@ -322,7 +324,8 @@ public class DexManager {
flags |= StorageManager.FLAG_STORAGE_CE;
} else {
Slog.e(TAG, "Could not infer CE/DE storage for package " + info.packageName);
mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId());
updated = mPackageDexUsage.removeUserPackage(
packageName, dexUseInfo.getOwnerUserId()) || updated;
continue;
}
@@ -338,8 +341,13 @@ public class DexManager {
}
}
if (!dexStillExists) {
mPackageDexUsage.removeDexFile(packageName, dexPath, dexUseInfo.getOwnerUserId());
updated = mPackageDexUsage.removeDexFile(
packageName, dexPath, dexUseInfo.getOwnerUserId()) || updated;
}
}
if (updated) {
mPackageDexUsage.maybeWriteAsync();
}
}

View File

@@ -378,6 +378,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> {
/**
* Remove all the records about package {@code packageName} belonging to user {@code userId}.
* @return true if the record was found and actually deleted,
* false if the record doesn't exist
*/
public boolean removeUserPackage(String packageName, int userId) {
synchronized (mPackageUseInfoMap) {
@@ -402,6 +404,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> {
/**
* Remove the secondary dex file record belonging to the package {@code packageName}
* and user {@code userId}.
* @return true if the record was found and actually deleted,
* false if the record doesn't exist
*/
public boolean removeDexFile(String packageName, String dexFile, int userId) {
synchronized (mPackageUseInfoMap) {