From d6fd63d47f97d069821c1c761e36c7904a22b3fb Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Fri, 12 Feb 2016 10:56:35 +0000 Subject: [PATCH] Revive the "Optimizing apps" dialog Since we do spend some non-trivial time extracting APKs at OTA, we should show a descriptive dialog. Currently the screen would read "Optimizing storage" which is misleading. bug:26813999 Change-Id: I4954e3b486840b5d806db8b45242fdc8ca9d0379 --- .../server/pm/PackageManagerService.java | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) 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 */); + } } }