Loading services/core/java/com/android/server/pm/Installer.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ public final class Installer extends SystemService { public static final int DEXOPT_DEBUGGABLE = 1 << 3; public static final int DEXOPT_DEBUGGABLE = 1 << 3; /** The system boot has finished */ /** The system boot has finished */ public static final int DEXOPT_BOOTCOMPLETE = 1 << 4; 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; private final InstallerConnection mInstaller; Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +16 −9 Original line number Original line Diff line number Diff line Loading @@ -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_DEBUGGABLE; import static com.android.server.pm.Installer.DEXOPT_PUBLIC; 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_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.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; Loading Loading @@ -75,7 +76,8 @@ final class PackageDexOptimizer { * {@link PackageManagerService#mInstallLock}. * {@link PackageManagerService#mInstallLock}. */ */ int performDexOpt(PackageParser.Package pkg, String[] instructionSets, 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; ArraySet<String> done; if (inclDependencies && (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null)) { if (inclDependencies && (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null)) { done = new ArraySet<String>(); done = new ArraySet<String>(); Loading @@ -90,7 +92,8 @@ final class PackageDexOptimizer { mDexoptWakeLock.acquire(); mDexoptWakeLock.acquire(); } } try { try { return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, done); return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, useJit, done); } finally { } finally { if (useLock) { if (useLock) { mDexoptWakeLock.release(); mDexoptWakeLock.release(); Loading @@ -100,7 +103,8 @@ final class PackageDexOptimizer { } } private int performDexOptLI(PackageParser.Package pkg, String[] targetInstructionSets, 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 ? final String[] instructionSets = targetInstructionSets != null ? targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo); targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo); Loading @@ -108,11 +112,11 @@ final class PackageDexOptimizer { done.add(pkg.packageName); done.add(pkg.packageName); if (pkg.usesLibraries != null) { if (pkg.usesLibraries != null) { performDexOptLibsLI(pkg.usesLibraries, instructionSets, forceDex, defer, performDexOptLibsLI(pkg.usesLibraries, instructionSets, forceDex, defer, bootComplete, done); bootComplete, useJit, done); } } if (pkg.usesOptionalLibraries != null) { if (pkg.usesOptionalLibraries != null) { performDexOptLibsLI(pkg.usesOptionalLibraries, instructionSets, forceDex, defer, performDexOptLibsLI(pkg.usesOptionalLibraries, instructionSets, forceDex, defer, bootComplete, done); bootComplete, useJit, done); } } } } Loading Loading @@ -179,13 +183,15 @@ final class PackageDexOptimizer { Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " oatDir = " + oatDir + " bootComplete=" + bootComplete); + " oatDir = " + oatDir + " bootComplete=" + bootComplete + " useJit=" + useJit); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int dexFlags = final int dexFlags = (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0) (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0) | (vmSafeMode ? DEXOPT_SAFEMODE : 0) | (vmSafeMode ? DEXOPT_SAFEMODE : 0) | (debuggable ? DEXOPT_DEBUGGABLE : 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, final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags); pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags); Loading Loading @@ -244,12 +250,13 @@ final class PackageDexOptimizer { } } private void performDexOptLibsLI(ArrayList<String> libs, String[] instructionSets, 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) { for (String libName : libs) { PackageParser.Package libPkg = mPackageManagerService.findSharedNonSystemLibrary( PackageParser.Package libPkg = mPackageManagerService.findSharedNonSystemLibrary( libName); libName); if (libPkg != null && !done.contains(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 Original line Diff line number Diff line Loading @@ -6251,7 +6251,7 @@ public class PackageManagerService extends IPackageManager.Stub { synchronized (mInstallLock) { synchronized (mInstallLock) { mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */, mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */, false /* force dex */, false /* defer */, true /* include dependencies */, false /* force dex */, false /* defer */, true /* include dependencies */, false /* boot complete */); false /* boot complete */, false /*useJit*/); } } } } Loading Loading @@ -6311,7 +6311,7 @@ public class PackageManagerService extends IPackageManager.Stub { final String[] instructionSets = new String[] { targetInstructionSet }; final String[] instructionSets = new String[] { targetInstructionSet }; int result = mPackageDexOptimizer.performDexOpt(p, instructionSets, int result = mPackageDexOptimizer.performDexOpt(p, instructionSets, false /* forceDex */, false /* defer */, true /* inclDependencies */, false /* forceDex */, false /* defer */, true /* inclDependencies */, true /* boot complete */); true /* boot complete */, false /*useJit*/); return result == PackageDexOptimizer.DEX_OPT_PERFORMED; return result == PackageDexOptimizer.DEX_OPT_PERFORMED; } } } finally { } finally { Loading Loading @@ -6362,7 +6362,7 @@ public class PackageManagerService extends IPackageManager.Stub { final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets, final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets, true /*forceDex*/, false /* defer */, true /* inclDependencies */, true /*forceDex*/, false /* defer */, true /* inclDependencies */, true /* boot complete */); true /* boot complete */, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) { if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) { Loading Loading @@ -7179,7 +7179,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(pkg, null /* instruction sets */, int result = mPackageDexOptimizer.performDexOpt(pkg, null /* instruction sets */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false /* inclDependencies */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false /* inclDependencies */, (scanFlags & SCAN_BOOTING) == 0); (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { Loading Loading @@ -7260,7 +7260,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(clientPkg, int result = mPackageDexOptimizer.performDexOpt(clientPkg, null /* instruction sets */, forceDex, null /* instruction sets */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false, (scanFlags & SCAN_DEFER_DEX) != 0, false, (scanFlags & SCAN_BOOTING) == 0); (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { throw new PackageManagerException(INSTALL_FAILED_DEXOPT, throw new PackageManagerException(INSTALL_FAILED_DEXOPT, "scanPackageLI failed to dexopt clientLibPkgs"); "scanPackageLI failed to dexopt clientLibPkgs"); Loading Loading @@ -7884,7 +7884,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(ps.pkg, int result = mPackageDexOptimizer.performDexOpt(ps.pkg, null /* instruction sets */, forceDexOpt, deferDexOpt, true, null /* instruction sets */, forceDexOpt, deferDexOpt, true, bootComplete); bootComplete, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { Loading Loading @@ -12575,7 +12575,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer int result = mPackageDexOptimizer .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */, .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */, false /* defer */, false /* inclDependencies */, false /* defer */, false /* inclDependencies */, true /*bootComplete*/); true /*bootComplete*/, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); Loading
services/core/java/com/android/server/pm/Installer.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ public final class Installer extends SystemService { public static final int DEXOPT_DEBUGGABLE = 1 << 3; public static final int DEXOPT_DEBUGGABLE = 1 << 3; /** The system boot has finished */ /** The system boot has finished */ public static final int DEXOPT_BOOTCOMPLETE = 1 << 4; 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; private final InstallerConnection mInstaller; Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +16 −9 Original line number Original line Diff line number Diff line Loading @@ -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_DEBUGGABLE; import static com.android.server.pm.Installer.DEXOPT_PUBLIC; 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_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.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; Loading Loading @@ -75,7 +76,8 @@ final class PackageDexOptimizer { * {@link PackageManagerService#mInstallLock}. * {@link PackageManagerService#mInstallLock}. */ */ int performDexOpt(PackageParser.Package pkg, String[] instructionSets, 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; ArraySet<String> done; if (inclDependencies && (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null)) { if (inclDependencies && (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null)) { done = new ArraySet<String>(); done = new ArraySet<String>(); Loading @@ -90,7 +92,8 @@ final class PackageDexOptimizer { mDexoptWakeLock.acquire(); mDexoptWakeLock.acquire(); } } try { try { return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, done); return performDexOptLI(pkg, instructionSets, forceDex, defer, bootComplete, useJit, done); } finally { } finally { if (useLock) { if (useLock) { mDexoptWakeLock.release(); mDexoptWakeLock.release(); Loading @@ -100,7 +103,8 @@ final class PackageDexOptimizer { } } private int performDexOptLI(PackageParser.Package pkg, String[] targetInstructionSets, 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 ? final String[] instructionSets = targetInstructionSets != null ? targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo); targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo); Loading @@ -108,11 +112,11 @@ final class PackageDexOptimizer { done.add(pkg.packageName); done.add(pkg.packageName); if (pkg.usesLibraries != null) { if (pkg.usesLibraries != null) { performDexOptLibsLI(pkg.usesLibraries, instructionSets, forceDex, defer, performDexOptLibsLI(pkg.usesLibraries, instructionSets, forceDex, defer, bootComplete, done); bootComplete, useJit, done); } } if (pkg.usesOptionalLibraries != null) { if (pkg.usesOptionalLibraries != null) { performDexOptLibsLI(pkg.usesOptionalLibraries, instructionSets, forceDex, defer, performDexOptLibsLI(pkg.usesOptionalLibraries, instructionSets, forceDex, defer, bootComplete, done); bootComplete, useJit, done); } } } } Loading Loading @@ -179,13 +183,15 @@ final class PackageDexOptimizer { Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg=" + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable + " oatDir = " + oatDir + " bootComplete=" + bootComplete); + " oatDir = " + oatDir + " bootComplete=" + bootComplete + " useJit=" + useJit); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); final int dexFlags = final int dexFlags = (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0) (!pkg.isForwardLocked() ? DEXOPT_PUBLIC : 0) | (vmSafeMode ? DEXOPT_SAFEMODE : 0) | (vmSafeMode ? DEXOPT_SAFEMODE : 0) | (debuggable ? DEXOPT_DEBUGGABLE : 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, final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid, pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags); pkg.packageName, dexCodeInstructionSet, dexoptNeeded, oatDir, dexFlags); Loading Loading @@ -244,12 +250,13 @@ final class PackageDexOptimizer { } } private void performDexOptLibsLI(ArrayList<String> libs, String[] instructionSets, 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) { for (String libName : libs) { PackageParser.Package libPkg = mPackageManagerService.findSharedNonSystemLibrary( PackageParser.Package libPkg = mPackageManagerService.findSharedNonSystemLibrary( libName); libName); if (libPkg != null && !done.contains(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 Original line Diff line number Diff line Loading @@ -6251,7 +6251,7 @@ public class PackageManagerService extends IPackageManager.Stub { synchronized (mInstallLock) { synchronized (mInstallLock) { mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */, mPackageDexOptimizer.performDexOpt(p, null /* instruction sets */, false /* force dex */, false /* defer */, true /* include dependencies */, false /* force dex */, false /* defer */, true /* include dependencies */, false /* boot complete */); false /* boot complete */, false /*useJit*/); } } } } Loading Loading @@ -6311,7 +6311,7 @@ public class PackageManagerService extends IPackageManager.Stub { final String[] instructionSets = new String[] { targetInstructionSet }; final String[] instructionSets = new String[] { targetInstructionSet }; int result = mPackageDexOptimizer.performDexOpt(p, instructionSets, int result = mPackageDexOptimizer.performDexOpt(p, instructionSets, false /* forceDex */, false /* defer */, true /* inclDependencies */, false /* forceDex */, false /* defer */, true /* inclDependencies */, true /* boot complete */); true /* boot complete */, false /*useJit*/); return result == PackageDexOptimizer.DEX_OPT_PERFORMED; return result == PackageDexOptimizer.DEX_OPT_PERFORMED; } } } finally { } finally { Loading Loading @@ -6362,7 +6362,7 @@ public class PackageManagerService extends IPackageManager.Stub { final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets, final int res = mPackageDexOptimizer.performDexOpt(pkg, instructionSets, true /*forceDex*/, false /* defer */, true /* inclDependencies */, true /*forceDex*/, false /* defer */, true /* inclDependencies */, true /* boot complete */); true /* boot complete */, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) { if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) { Loading Loading @@ -7179,7 +7179,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(pkg, null /* instruction sets */, int result = mPackageDexOptimizer.performDexOpt(pkg, null /* instruction sets */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false /* inclDependencies */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false /* inclDependencies */, (scanFlags & SCAN_BOOTING) == 0); (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { Loading Loading @@ -7260,7 +7260,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(clientPkg, int result = mPackageDexOptimizer.performDexOpt(clientPkg, null /* instruction sets */, forceDex, null /* instruction sets */, forceDex, (scanFlags & SCAN_DEFER_DEX) != 0, false, (scanFlags & SCAN_DEFER_DEX) != 0, false, (scanFlags & SCAN_BOOTING) == 0); (scanFlags & SCAN_BOOTING) == 0, false /*useJit*/); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { throw new PackageManagerException(INSTALL_FAILED_DEXOPT, throw new PackageManagerException(INSTALL_FAILED_DEXOPT, "scanPackageLI failed to dexopt clientLibPkgs"); "scanPackageLI failed to dexopt clientLibPkgs"); Loading Loading @@ -7884,7 +7884,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer.performDexOpt(ps.pkg, int result = mPackageDexOptimizer.performDexOpt(ps.pkg, null /* instruction sets */, forceDexOpt, deferDexOpt, true, null /* instruction sets */, forceDexOpt, deferDexOpt, true, bootComplete); bootComplete, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { Loading Loading @@ -12575,7 +12575,7 @@ public class PackageManagerService extends IPackageManager.Stub { int result = mPackageDexOptimizer int result = mPackageDexOptimizer .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */, .performDexOpt(pkg, null /* instruction sets */, false /* forceDex */, false /* defer */, false /* inclDependencies */, false /* defer */, false /* inclDependencies */, true /*bootComplete*/); true /*bootComplete*/, false /*useJit*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); if (result == PackageDexOptimizer.DEX_OPT_FAILED) { if (result == PackageDexOptimizer.DEX_OPT_FAILED) { res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath); res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath);