Loading services/core/java/com/android/server/pm/Installer.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +16 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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>(); Loading @@ -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); Loading @@ -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); } } Loading Loading @@ -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) { Loading Loading @@ -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); } } } Loading services/core/java/com/android/server/pm/PackageManagerService.java +7 −7 Original line number Diff line number Diff line Loading @@ -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*/); } } Loading Loading @@ -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; } } Loading Loading @@ -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); } Loading Loading @@ -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"); } Loading Loading @@ -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"); Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading
services/core/java/com/android/server/pm/Installer.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +16 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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>(); Loading @@ -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); Loading @@ -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); } } Loading Loading @@ -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) { Loading Loading @@ -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); } } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +7 −7 Original line number Diff line number Diff line Loading @@ -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*/); } } Loading Loading @@ -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; } } Loading Loading @@ -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); } Loading Loading @@ -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"); } Loading Loading @@ -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"); Loading Loading @@ -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; Loading Loading @@ -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; Loading