Merge "Framework: Be more verbose in A/B OTA"
This commit is contained in:
@@ -40,6 +40,7 @@ import java.io.File;
|
|||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@@ -124,7 +125,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
|
|||||||
synchronized (mPackageManagerService.mPackages) {
|
synchronized (mPackageManagerService.mPackages) {
|
||||||
// Important: the packages we need to run with ab-ota compiler-reason.
|
// Important: the packages we need to run with ab-ota compiler-reason.
|
||||||
important = PackageManagerServiceUtils.getPackagesForDexopt(
|
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: we should optimize this with the (first-)boot compiler-reason.
|
||||||
others = new ArrayList<>(mPackageManagerService.mPackages.values());
|
others = new ArrayList<>(mPackageManagerService.mPackages.values());
|
||||||
others.removeAll(important);
|
others.removeAll(important);
|
||||||
@@ -157,6 +159,24 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
|
|||||||
long spaceAvailableNow = getAvailableSpace();
|
long spaceAvailableNow = getAvailableSpace();
|
||||||
|
|
||||||
prepareMetricsLogging(important.size(), others.size(), spaceAvailable, spaceAvailableNow);
|
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
|
@Override
|
||||||
|
|||||||
@@ -164,6 +164,13 @@ public class PackageManagerServiceUtils {
|
|||||||
public static List<PackageParser.Package> getPackagesForDexopt(
|
public static List<PackageParser.Package> getPackagesForDexopt(
|
||||||
Collection<PackageParser.Package> packages,
|
Collection<PackageParser.Package> packages,
|
||||||
PackageManagerService packageManagerService) {
|
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);
|
ArrayList<PackageParser.Package> remainingPkgs = new ArrayList<>(packages);
|
||||||
LinkedList<PackageParser.Package> result = new LinkedList<>();
|
LinkedList<PackageParser.Package> result = new LinkedList<>();
|
||||||
ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size());
|
ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size());
|
||||||
@@ -189,14 +196,14 @@ public class PackageManagerServiceUtils {
|
|||||||
// TODO: add a property to control this?
|
// TODO: add a property to control this?
|
||||||
Predicate<PackageParser.Package> remainingPredicate;
|
Predicate<PackageParser.Package> remainingPredicate;
|
||||||
if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
|
if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
|
||||||
if (DEBUG_DEXOPT) {
|
if (debug) {
|
||||||
Log.i(TAG, "Looking at historical package use");
|
Log.i(TAG, "Looking at historical package use");
|
||||||
}
|
}
|
||||||
// Get the package that was used last.
|
// Get the package that was used last.
|
||||||
PackageParser.Package lastUsed = Collections.max(remainingPkgs, (pkg1, pkg2) ->
|
PackageParser.Package lastUsed = Collections.max(remainingPkgs, (pkg1, pkg2) ->
|
||||||
Long.compare(pkg1.getLatestForegroundPackageUseTimeInMills(),
|
Long.compare(pkg1.getLatestForegroundPackageUseTimeInMills(),
|
||||||
pkg2.getLatestForegroundPackageUseTimeInMills()));
|
pkg2.getLatestForegroundPackageUseTimeInMills()));
|
||||||
if (DEBUG_DEXOPT) {
|
if (debug) {
|
||||||
Log.i(TAG, "Taking package " + lastUsed.packageName + " as reference in time use");
|
Log.i(TAG, "Taking package " + lastUsed.packageName + " as reference in time use");
|
||||||
}
|
}
|
||||||
long estimatedPreviousSystemUseTime =
|
long estimatedPreviousSystemUseTime =
|
||||||
@@ -218,7 +225,7 @@ public class PackageManagerServiceUtils {
|
|||||||
applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp,
|
applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp,
|
||||||
packageManagerService);
|
packageManagerService);
|
||||||
|
|
||||||
if (DEBUG_DEXOPT) {
|
if (debug) {
|
||||||
Log.i(TAG, "Packages to be dexopted: " + packagesToString(result));
|
Log.i(TAG, "Packages to be dexopted: " + packagesToString(result));
|
||||||
Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgs));
|
Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgs));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user