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

Commit 0c6d4db4 authored by Nicolas Geoffray's avatar Nicolas Geoffray
Browse files

Remove support for dexopting shared libraries.

The CL landed after feature complete, and has shown it can cause related issues,
not easy to deal with (eg b/128529256 or b/128912573).

The libs are expected to be preopted (as in P).

Partial revert of 653356f1.

Test: BackgroundDexOptServiceIntegrationTests
Test: DexoptUtilsTest
Bug: 119800099
Change-Id: I3570fbc0e4f7079da3315691d676452b17e516a7
parent f9d61f1c
Loading
Loading
Loading
Loading
+0 −45
Original line number Diff line number Diff line
@@ -150,51 +150,6 @@ public class PackageDexOptimizer {
        }
    }

    int performDexOpt(SharedLibraryInfo info, String[] instructionSets, DexoptOptions options) {
        String classLoaderContext = DexoptUtils.getClassLoaderContext(info);
        final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
        String compilerFilter = PackageManagerServiceCompilerMapping.getCompilerFilterForReason(
                PackageManagerService.REASON_SHARED);
        int result = DEX_OPT_SKIPPED;
        for (String instructionSet : dexCodeInstructionSets) {
            int dexoptNeeded = getDexoptNeeded(
                        info.getPath(), instructionSet, compilerFilter,
                        classLoaderContext, false /* newProfile */,
                        false /* downgrade */);
            if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) {
                continue;
            }
            // Special string recognized by installd.
            final String packageName = "*";
            final String outputPath = null;
            int dexFlags = DEXOPT_PUBLIC
                    | (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0)
                    | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0);
            dexFlags = adjustDexoptFlags(dexFlags);
            final String uuid = StorageManager.UUID_SYSTEM;
            final String seInfo = null;
            final int targetSdkVersion = 0;  // Builtin libraries targets the system's SDK version
            try {
                mInstaller.dexopt(info.getPath(), Process.SYSTEM_UID, packageName,
                        instructionSet, dexoptNeeded, outputPath, dexFlags, compilerFilter,
                        uuid, classLoaderContext, seInfo, false /* downgrade */,
                        targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null,
                        getReasonName(options.getCompilationReason()));
                // The end result is:
                //  - FAILED if any path failed,
                //  - PERFORMED if at least one path needed compilation,
                //  - SKIPPED when all paths are up to date
                if (result != DEX_OPT_FAILED) {
                    result = DEX_OPT_PERFORMED;
                }
            } catch (InstallerException e) {
                Slog.w(TAG, "Failed to dexopt", e);
                result = DEX_OPT_FAILED;
            }
        }
        return result;
    }

    /**
     * Performs dexopt on all code paths of the given package.
     * It assumes the install lock is held.
+1 −1
Original line number Diff line number Diff line
@@ -9463,7 +9463,7 @@ public class PackageManagerService extends IPackageManager.Stub
                            mDexManager.getPackageUseInfoOrDefault(depPackage.packageName),
                            libraryOptions);
                } else {
                    pdo.performDexOpt(info, instructionSets, libraryOptions);
                    // TODO(ngeoffray): Support dexopting system shared libraries.
                }
            }
        }