diff options
| author | 2015-09-28 11:47:19 -0700 | |
|---|---|---|
| committer | 2015-09-28 11:47:19 -0700 | |
| commit | 6b78340f6cfa49341bfdcc6e0b80a697d76f5b0f (patch) | |
| tree | d09803ec866fd000524d6c5c848ab7a82e3a8442 | |
| parent | dfc9ce547760e8a746bfb036e3b44848d48c175d (diff) | |
| parent | b4d41021b41b60ce0b053035105d51f453816b1d (diff) | |
resolved conflicts for b4d41021 to master
Change-Id: Ib413c588ffb7a2b4385d2088e6de782417625037
3 files changed, 25 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index d55697b40720..d8676167497f 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -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; diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 8be670e71a24..6c6871fd8dfd 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -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); } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7a445a6dc6ae..c729e28dae82 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6251,7 +6251,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*/); } } @@ -6311,7 +6311,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 { @@ -6362,7 +6362,7 @@ public class PackageManagerService extends IPackageManager.Stub { final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets, true /*forceDex*/, false /* defer */, true /* inclDependencies */, - true /* boot complete */); + true /* boot complete */, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) { @@ -7179,7 +7179,7 @@ public class PackageManagerService extends IPackageManager.Stub { 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*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { @@ -7260,7 +7260,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"); @@ -7884,7 +7884,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(ps.pkg, null /* instruction sets */, forceDexOpt, deferDexOpt, true, - bootComplete); + bootComplete, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { @@ -12575,7 +12575,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*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); |