Merge "Do not fully compiled debuggable apps"

am: b2f9798688

Change-Id: I3e2f62f6ff06379be9a399fb02ba7b2b50b41084
This commit is contained in:
Calin Juravle
2019-05-28 16:58:08 -07:00
committed by android-build-merger

View File

@@ -508,13 +508,25 @@ public class PackageDexOptimizer {
*/ */
private String getRealCompilerFilter(ApplicationInfo info, String targetCompilerFilter, private String getRealCompilerFilter(ApplicationInfo info, String targetCompilerFilter,
boolean isUsedByOtherApps) { boolean isUsedByOtherApps) {
int flags = info.flags;
boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
// When a priv app is configured to run out of box, only verify it. // When a priv app is configured to run out of box, only verify it.
if (info.isPrivilegedApp() && DexManager.isPackageSelectedToRunOob(info.packageName)) { if (info.isPrivilegedApp() && DexManager.isPackageSelectedToRunOob(info.packageName)) {
return "verify"; return "verify";
} }
if (vmSafeMode) {
// We force vmSafeMode on debuggable apps as well:
// - the runtime ignores their compiled code
// - they generally have lots of methods that could make the compiler used run
// out of memory (b/130828957)
// Note that forcing the compiler filter here applies to all compilations (even if they
// are done via adb shell commands). That's ok because right now the runtime will ignore
// the compiled code anyway. The alternative would have been to update either
// PackageDexOptimizer#canOptimizePackage or PackageManagerService#getOptimizablePackages
// but that would have the downside of possibly producing a big odex files which would
// be ignored anyway.
boolean vmSafeModeOrDebuggable = ((info.flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0)
|| ((info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
if (vmSafeModeOrDebuggable) {
return getSafeModeCompilerFilter(targetCompilerFilter); return getSafeModeCompilerFilter(targetCompilerFilter);
} }