Merge "Add dedicated flag to control app image generation"

am: abf1476dbe

Change-Id: If1047435f3b74443e2508a265500acf4ed1c7b53
This commit is contained in:
Mathieu Chartier
2018-04-03 20:57:41 -07:00
committed by android-build-merger
3 changed files with 17 additions and 1 deletions

View File

@@ -64,6 +64,8 @@ public class Installer extends SystemService {
public static final int DEXOPT_ENABLE_HIDDEN_API_CHECKS = 1 << 10;
/** Indicates that dexopt should convert to CompactDex. */
public static final int DEXOPT_GENERATE_COMPACT_DEX = 1 << 11;
/** Indicates that dexopt should generate an app image */
public static final int DEXOPT_GENERATE_APP_IMAGE = 1 << 12;
// NOTE: keep in sync with installd
public static final int FLAG_CLEAR_CACHE_ONLY = 1 << 8;

View File

@@ -267,7 +267,7 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
final StringBuilder builder = new StringBuilder();
// The current version.
builder.append("8 ");
builder.append("9 ");
builder.append("dexopt");

View File

@@ -60,6 +60,7 @@ import static com.android.server.pm.Installer.DEXOPT_STORAGE_DE;
import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB;
import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS;
import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX;
import static com.android.server.pm.Installer.DEXOPT_GENERATE_APP_IMAGE;
import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;
@@ -523,6 +524,10 @@ public class PackageDexOptimizer {
return getDexFlags(pkg.applicationInfo, compilerFilter, options);
}
private boolean isAppImageEnabled() {
return SystemProperties.get("dalvik.vm.appimageformat", "").length() > 0;
}
private int getDexFlags(ApplicationInfo info, String compilerFilter, DexoptOptions options) {
int flags = info.flags;
boolean debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
@@ -549,6 +554,14 @@ public class PackageDexOptimizer {
case PackageManagerService.REASON_INSTALL:
generateCompactDex = false;
}
// Use app images only if it is enabled and we are compiling
// profile-guided (so the app image doesn't conservatively contain all classes).
// If the app didn't request for the splits to be loaded in isolation or if it does not
// declare inter-split dependencies, then all the splits will be loaded in the base
// apk class loader (in the order of their definition, otherwise disable app images
// because they are unsupported for multiple class loaders. b/7269679
boolean generateAppImage = isProfileGuidedFilter && (info.splitDependencies == null ||
!info.requestsIsolatedSplitLoading()) && isAppImageEnabled();
int dexFlags =
(isPublic ? DEXOPT_PUBLIC : 0)
| (debuggable ? DEXOPT_DEBUGGABLE : 0)
@@ -556,6 +569,7 @@ public class PackageDexOptimizer {
| (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0)
| (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0)
| (generateCompactDex ? DEXOPT_GENERATE_COMPACT_DEX : 0)
| (generateAppImage ? DEXOPT_GENERATE_APP_IMAGE : 0)
| hiddenApiFlag;
return adjustDexoptFlags(dexFlags);
}