Loading services/core/java/com/android/server/pm/OtaDexoptService.java +21 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 Loading services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +10 −3 Original line number Diff line number Diff line Loading @@ -164,6 +164,13 @@ public class PackageManagerServiceUtils { public static List<PackageParser.Package> getPackagesForDexopt( Collection<PackageParser.Package> packages, PackageManagerService packageManagerService) { return getPackagesForDexopt(packages, packageManagerService, DEBUG_DEXOPT); } public static List<PackageParser.Package> getPackagesForDexopt( Collection<PackageParser.Package> packages, PackageManagerService packageManagerService, boolean debug) { ArrayList<PackageParser.Package> remainingPkgs = new ArrayList<>(packages); LinkedList<PackageParser.Package> result = new LinkedList<>(); ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size()); Loading @@ -189,14 +196,14 @@ public class PackageManagerServiceUtils { // TODO: add a property to control this? Predicate<PackageParser.Package> 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 = Loading @@ -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)); } Loading Loading
services/core/java/com/android/server/pm/OtaDexoptService.java +21 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 Loading
services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +10 −3 Original line number Diff line number Diff line Loading @@ -164,6 +164,13 @@ public class PackageManagerServiceUtils { public static List<PackageParser.Package> getPackagesForDexopt( Collection<PackageParser.Package> packages, PackageManagerService packageManagerService) { return getPackagesForDexopt(packages, packageManagerService, DEBUG_DEXOPT); } public static List<PackageParser.Package> getPackagesForDexopt( Collection<PackageParser.Package> packages, PackageManagerService packageManagerService, boolean debug) { ArrayList<PackageParser.Package> remainingPkgs = new ArrayList<>(packages); LinkedList<PackageParser.Package> result = new LinkedList<>(); ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size()); Loading @@ -189,14 +196,14 @@ public class PackageManagerServiceUtils { // TODO: add a property to control this? Predicate<PackageParser.Package> 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 = Loading @@ -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)); } Loading