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

Commit b4d41021 authored by Todd Kennedy's avatar Todd Kennedy Committed by Android Git Automerger
Browse files

am 92b28f37: resolved conflicts for 4ed21bf0 to stage-aosp-master

* commit '92b28f37':
  Allow using the JIT
parents 337c069a 92b28f37
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ public final class Installer extends SystemService {
    public static final int DEXOPT_DEBUGGABLE   = 1 << 3;
    /** The system boot has finished */
    public static final int DEXOPT_BOOTCOMPLETE = 1 << 4;
    /** Run the application with the JIT compiler */
    public static final int DEXOPT_USEJIT       = 1 << 5;

    private final InstallerConnection mInstaller;

+16 −9
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE;
import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE;
import static com.android.server.pm.Installer.DEXOPT_PUBLIC;
import static com.android.server.pm.Installer.DEXOPT_SAFEMODE;
import static com.android.server.pm.Installer.DEXOPT_USEJIT;
import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;

@@ -75,7 +76,8 @@ final class PackageDexOptimizer {
     * {@link PackageManagerService#mInstallLock}.
     */
    int performDexOpt(PackageParser.Package pkg, String[] instructionSets,
            boolean forceDex, boolean defer, boolean inclDependencies, boolean bootComplete) {
            boolean forceDex, boolean defer, boolean inclDependencies,
            boolean bootComplete, boolean useJit) {
        ArraySet<String> done;
        if (inclDependencies && (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null)) {
            done = new ArraySet<String>();
@@ -90,7 +92,8 @@ final class PackageDexOptimizer {
                mDexoptWakeLock.acquire();
            }
            try {
                return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, done);
                return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete,
                        useJit, done);
            } finally {
                if (useLock) {
                    mDexoptWakeLock.release();
@@ -100,7 +103,8 @@ final class PackageDexOptimizer {
    }

    private int performDexOptLI(PackageParser.Package pkg, String[] targetInstructionSets,
            boolean forceDex, boolean defer, boolean bootComplete, ArraySet<String> done) {
            boolean forceDex, boolean defer, boolean bootComplete, boolean useJit,
            ArraySet<String> done) {
        final String[] instructionSets = targetInstructionSets != null ?
                targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);

@@ -108,11 +112,11 @@ final class PackageDexOptimizer {
            done.add(pkg.packageName);
            if (pkg.usesLibraries != null) {
                performDexOptLibsLI(pkg.usesLibraries, instructionSets, forceDex, defer,
                        bootComplete, done);
                        bootComplete, useJit, done);
            }
            if (pkg.usesOptionalLibraries != null) {
                performDexOptLibsLI(pkg.usesOptionalLibraries, instructionSets, forceDex, defer,
                        bootComplete, done);
                        bootComplete, useJit, done);
            }
        }

@@ -179,13 +183,15 @@ final class PackageDexOptimizer {
                    Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg="
                            + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet
                            + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable
                            + " oatDir = " + oatDir + " bootComplete=" + bootComplete);
                            + " oatDir = " + oatDir + " bootComplete=" + bootComplete
                            + " useJit=" + useJit);
                    final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
                    final int dexFlags =
                            (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0)
                            | (vmSafeMode ? DEXOPT_SAFEMODE : 0)
                            | (debuggable ? DEXOPT_DEBUGGABLE : 0)
                            | (bootComplete ? DEXOPT_BOOTCOMPLETE : 0);
                            | (bootComplete ? DEXOPT_BOOTCOMPLETE : 0)
                            | (useJit ? DEXOPT_USEJIT : 0);
                    final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid,
                            pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags);

@@ -244,12 +250,13 @@ final class PackageDexOptimizer {
    }

    private void performDexOptLibsLI(ArrayList<String> libs, String[] instructionSets,
            boolean forceDex, boolean defer, boolean bootComplete, ArraySet<String> done) {
            boolean forceDex, boolean defer, boolean bootComplete, boolean useJit,
            ArraySet<String> done) {
        for (String libName : libs) {
            PackageParser.Package libPkg = mPackageManagerService.findSharedNonSystemLibrary(
                    libName);
            if (libPkg != null && !done.contains(libName)) {
                performDexOptLI(libPkg, instructionSets, forceDex, defer, bootComplete, done);
                performDexOptLI(libPkg, instructionSets, forceDex, defer, bootComplete, useJit, done);
            }
        }
    }
+7 −7
Original line number Diff line number Diff line
@@ -6178,7 +6178,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        synchronized (mInstallLock) {
            mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */,
                    false /* force dex */, false /* defer */, true /* include dependencies */,
                    false /* boot complete */);
                    false /* boot complete */, false /*useJit*/);
        }
    }
@@ -6222,7 +6222,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                final String[] instructionSets = new String[] { targetInstructionSet };
                int result = mPackageDexOptimizer.performDexOpt(p, instructionSets,
                        false /* forceDex */, false /* defer */, true /* inclDependencies */,
                        true /* boot complete */);
                        true /* boot complete */, false /*useJit*/);
                return result == PackageDexOptimizer.DEX_OPT_PERFORMED;
            }
        } finally {
@@ -6270,7 +6270,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    getPrimaryInstructionSet(pkg.applicationInfo) };
            final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets,
                    true /*forceDex*/, false /* defer */, true /* inclDependencies */,
                    true /* boot complete */);
                    true /* boot complete */, false /*useJit*/);
            if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) {
                throw new IllegalStateException("Failed to dexopt: " + res);
            }
@@ -7068,7 +7068,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        if ((scanFlags & SCAN_NO_DEX) == 0) {
            int result = mPackageDexOptimizer.performDexOpt(pkg, null /* instruction sets */,
                    forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false /* inclDependencies */,
                    (scanFlags & SCAN_BOOTING) == 0);
                    (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/);
            if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
                throw new PackageManagerException(INSTALL_FAILED_DEXOPT, "scanPackageLI");
            }
@@ -7145,7 +7145,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    int result = mPackageDexOptimizer.performDexOpt(clientPkg,
                            null /* instruction sets */, forceDex,
                            (scanFlags & SCAN_DEFER_DEX) != 0, false,
                            (scanFlags & SCAN_BOOTING) == 0);
                            (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/);
                    if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
                        throw new PackageManagerException(INSTALL_FAILED_DEXOPT,
                                "scanPackageLI failed to dexopt clientLibPkgs");
@@ -7752,7 +7752,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                        int result = mPackageDexOptimizer.performDexOpt(ps.pkg,
                                null /* instruction sets */, forceDexOpt, deferDexOpt, true,
                                bootComplete);
                                bootComplete, false /*useJit*/);
                        if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
                            ps.primaryCpuAbiString = null;
                            ps.pkg.applicationInfo.primaryCpuAbi = null;
@@ -12353,7 +12353,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            int result = mPackageDexOptimizer
                    .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */,
                            false /* defer */, false /* inclDependencies */,
                            true /*bootComplete*/);
                            true /*bootComplete*/, false /*useJit*/);
            if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
                res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath);
                return;