Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1aa1548d authored by Calin Juravle's avatar Calin Juravle
Browse files

Do not fully compiled debuggable apps

Force vmSafeMode behaviour on debuggable apps:
- the runtime ignores their compiled code
- they generally have lots of methods that could make the compiler used
run out of memory

Bug: 130828957
Test: manual
Change-Id: I946ce15a18729ec6620aca257c52e5b9e4434265
parent 0d04871f
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -506,15 +506,27 @@ public class PackageDexOptimizer {
     */
    private String getRealCompilerFilter(ApplicationInfo info, String targetCompilerFilter,
            boolean isUsedByOtherApps) {
        int flags = info.flags;
        boolean vmSafeMode = (flags & ApplicationInfo.FLAG_VM_SAFE_MODE) != 0;
        // When an app or priv app is configured to run out of box, only verify it.
        if (info.isEmbeddedDexUsed()
                || (info.isPrivilegedApp()
                    && DexManager.isPackageSelectedToRunOob(info.packageName))) {
            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);
        }