Skip to content
This repository has been archived by the owner on Nov 8, 2023. It is now read-only.

Commit

Permalink
Merge "Allow using the JIT"
Browse files Browse the repository at this point in the history
  • Loading branch information
Todd Kennedy authored and Gerrit Code Review committed Sep 28, 2015
2 parents 7de7e0b + 8c6e537 commit 4ed21bf
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
2 changes: 2 additions & 0 deletions services/core/java/com/android/server/pm/Installer.java
Expand Up @@ -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;

Expand Down
25 changes: 16 additions & 9 deletions services/core/java/com/android/server/pm/PackageDexOptimizer.java
Expand Up @@ -37,6 +37,7 @@
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;

Expand Down Expand Up @@ -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>();
Expand All @@ -76,24 +78,26 @@ int performDexOpt(PackageParser.Package pkg, String[] instructionSets,
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);

if (done != null) {
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);
}
}

Expand Down Expand Up @@ -150,13 +154,15 @@ private int performDexOptLI(PackageParser.Package pkg, String[] targetInstructio
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) {
Expand Down Expand Up @@ -227,12 +233,13 @@ static File getOatDir(File codePath) {
}

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);
}
}
}
Expand Down
Expand Up @@ -4724,7 +4724,7 @@ private void performBootDexOpt(PackageParser.Package pkg, int curr, int total) {
synchronized (mInstallLock) {
mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */,
false /* force dex */, false /* defer */, true /* include dependencies */,
false /* boot complete */);
false /* boot complete */, false /*useJit*/);
}
}

Expand Down Expand Up @@ -4767,7 +4767,7 @@ public boolean performDexOpt(String packageName, String instructionSet, boolean
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;
}
}
Expand Down Expand Up @@ -4812,7 +4812,7 @@ public void forceDexOpt(String packageName) {
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);
}
Expand Down Expand Up @@ -5583,7 +5583,7 @@ private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int
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");
}
Expand Down Expand Up @@ -5660,7 +5660,7 @@ private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, int
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");
Expand Down Expand Up @@ -6271,7 +6271,7 @@ private void adjustCpuAbisForSharedUserLPw(Set<PackageSetting> packagesForUser,

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;
Expand Down Expand Up @@ -10456,7 +10456,7 @@ private void installPackageLI(InstallArgs args, PackageInstalledInfo res) {
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;
Expand Down

0 comments on commit 4ed21bf

Please sign in to comment.