From 069a91ce2e0c364f4a378eb479d49dc9c259669b Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Wed, 5 Sep 2018 16:11:50 -0700 Subject: Framework: Be more verbose in A/B OTA Bug: 114091593 Test: m Change-Id: Ib0895188455a8340cefb7d0fd609012440b6473b --- .../com/android/server/pm/OtaDexoptService.java | 22 +++++++++++++++++++++- .../server/pm/PackageManagerServiceUtils.java | 13 ++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 320affb1eee2..748cf08905bb 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -40,6 +40,7 @@ import java.io.File; import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; @@ -124,7 +125,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub { synchronized (mPackageManagerService.mPackages) { // Important: the packages we need to run with ab-ota compiler-reason. important = PackageManagerServiceUtils.getPackagesForDexopt( - mPackageManagerService.mPackages.values(), mPackageManagerService); + mPackageManagerService.mPackages.values(), mPackageManagerService, + DEBUG_DEXOPT); // Others: we should optimize this with the (first-)boot compiler-reason. others = new ArrayList<>(mPackageManagerService.mPackages.values()); others.removeAll(important); @@ -157,6 +159,24 @@ public class OtaDexoptService extends IOtaDexopt.Stub { long spaceAvailableNow = getAvailableSpace(); prepareMetricsLogging(important.size(), others.size(), spaceAvailable, spaceAvailableNow); + + if (DEBUG_DEXOPT) { + try { + // Output some data about the packages. + PackageParser.Package lastUsed = Collections.max(important, + (pkg1, pkg2) -> Long.compare( + pkg1.getLatestForegroundPackageUseTimeInMills(), + pkg2.getLatestForegroundPackageUseTimeInMills())); + Log.d(TAG, "A/B OTA: lastUsed time = " + + lastUsed.getLatestForegroundPackageUseTimeInMills()); + Log.d(TAG, "A/B OTA: deprioritized packages:"); + for (PackageParser.Package pkg : others) { + Log.d(TAG, " " + pkg.packageName + " - " + + pkg.getLatestForegroundPackageUseTimeInMills()); + } + } catch (Exception ignored) { + } + } } @Override diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index 1aea8f0b0543..390c0ccb3c6e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -164,6 +164,13 @@ public class PackageManagerServiceUtils { public static List getPackagesForDexopt( Collection packages, PackageManagerService packageManagerService) { + return getPackagesForDexopt(packages, packageManagerService, DEBUG_DEXOPT); + } + + public static List getPackagesForDexopt( + Collection packages, + PackageManagerService packageManagerService, + boolean debug) { ArrayList remainingPkgs = new ArrayList<>(packages); LinkedList result = new LinkedList<>(); ArrayList sortTemp = new ArrayList<>(remainingPkgs.size()); @@ -189,14 +196,14 @@ public class PackageManagerServiceUtils { // TODO: add a property to control this? Predicate remainingPredicate; if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) { - if (DEBUG_DEXOPT) { + if (debug) { Log.i(TAG, "Looking at historical package use"); } // Get the package that was used last. PackageParser.Package lastUsed = Collections.max(remainingPkgs, (pkg1, pkg2) -> Long.compare(pkg1.getLatestForegroundPackageUseTimeInMills(), pkg2.getLatestForegroundPackageUseTimeInMills())); - if (DEBUG_DEXOPT) { + if (debug) { Log.i(TAG, "Taking package " + lastUsed.packageName + " as reference in time use"); } long estimatedPreviousSystemUseTime = @@ -218,7 +225,7 @@ public class PackageManagerServiceUtils { applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp, packageManagerService); - if (DEBUG_DEXOPT) { + if (debug) { Log.i(TAG, "Packages to be dexopted: " + packagesToString(result)); Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgs)); } -- cgit v1.2.3-59-g8ed1b