diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index abbad21d4c7b1..41077d0217981 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6829,17 +6829,37 @@ public class PackageManagerService extends IPackageManager.Stub { // Extract pacakges only if profile-guided compilation is enabled because // otherwise BackgroundDexOptService will not dexopt them later. - if (mUseJitProfiles) { - List pkgs; - synchronized (mPackages) { - pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this); + if (!mUseJitProfiles || !isUpgrade()) { + return; + } + + List pkgs; + synchronized (mPackages) { + pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this); + } + + int curr = 0; + int total = pkgs.size(); + for (PackageParser.Package pkg : pkgs) { + curr++; + + if (DEBUG_DEXOPT) { + Log.i(TAG, "Extracting app " + curr + " of " + total + ": " + pkg.packageName); } - for (PackageParser.Package pkg : pkgs) { - if (PackageDexOptimizer.canOptimizePackage(pkg)) { - performDexOpt(pkg.packageName, null /* instructionSet */, - false /* useProfiles */, true /* extractOnly */, false /* force */); + + if (!isFirstBoot()) { + try { + ActivityManagerNative.getDefault().showBootMessage( + mContext.getResources().getString(R.string.android_upgrading_apk, + curr, total), true); + } catch (RemoteException e) { } } + + if (PackageDexOptimizer.canOptimizePackage(pkg)) { + performDexOpt(pkg.packageName, null /* instructionSet */, + false /* useProfiles */, true /* extractOnly */, false /* force */); + } } }