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

Commit 4ed21bf0 authored by Todd Kennedy's avatar Todd Kennedy Committed by Gerrit Code Review
Browse files

Merge "Allow using the JIT"

parents 7de7e0b0 8c6e5372
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
@@ -37,6 +37,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;

@@ -67,7 +68,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>();
@@ -76,12 +78,14 @@ final class PackageDexOptimizer {
            done = null;
        }
        synchronized (mPackageManagerService.mInstallLock) {
            return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, done);
            return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete,
                    useJit, done);
        }
    }

    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);

@@ -89,11 +93,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);
            }
        }

@@ -150,13 +154,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);
                        if (ret < 0) {
@@ -227,12 +233,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
@@ -4724,7 +4724,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*/);
        }
    }
@@ -4767,7 +4767,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;
        }
    }
@@ -4812,7 +4812,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);
            }
@@ -5583,7 +5583,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");
            }
@@ -5660,7 +5660,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");
@@ -6271,7 +6271,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;
@@ -10456,7 +10456,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;