Merge "Use ART Service OptimizePackageDoneCallback."

This commit is contained in:
Martin Stjernholm
2023-01-11 13:16:00 +00:00
committed by Android (Google) Code Review
2 changed files with 46 additions and 19 deletions

View File

@@ -41,6 +41,7 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.pm.SharedLibraryInfo;
@@ -84,8 +85,10 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
@@ -524,7 +527,6 @@ public final class DexOptHelper {
return Optional.empty();
}
// TODO(b/251903639): Either remove controlDexOptBlocking, or don't ignore it here.
OptimizeResult result;
try {
result = artManager.optimizePackage(snapshot, options.getPackageName(), params);
@@ -533,21 +535,6 @@ public final class DexOptHelper {
return Optional.empty();
}
// TODO(b/251903639): Move this to ArtManagerLocal.addOptimizePackageDoneCallback when
// it is implemented.
for (OptimizeResult.PackageOptimizeResult pkgRes : result.getPackageOptimizeResults()) {
PackageState ps = snapshot.getPackageState(pkgRes.getPackageName());
AndroidPackage ap = ps != null ? ps.getAndroidPackage() : null;
if (ap != null) {
CompilerStats.PackageStats stats = mPm.getOrCreateCompilerPackageStats(ap);
for (OptimizeResult.DexContainerFileOptimizeResult dexRes :
pkgRes.getDexContainerFileOptimizeResults()) {
stats.setCompileTime(
dexRes.getDexContainerFile(), dexRes.getDex2oatWallTimeMillis());
}
}
}
return Optional.of(convertToDexOptResult(result));
}
}
@@ -967,6 +954,46 @@ public final class DexOptHelper {
}
}
private static class OptimizePackageDoneHandler
implements ArtManagerLocal.OptimizePackageDoneCallback {
@NonNull private final PackageManagerService mPm;
OptimizePackageDoneHandler(@NonNull PackageManagerService pm) { mPm = pm; }
/**
* Called after every package optimization operation done by {@link ArtManagerLocal}.
*/
@Override
public void onOptimizePackageDone(@NonNull OptimizeResult result) {
for (OptimizeResult.PackageOptimizeResult pkgRes : result.getPackageOptimizeResults()) {
CompilerStats.PackageStats stats =
mPm.getOrCreateCompilerPackageStats(pkgRes.getPackageName());
for (OptimizeResult.DexContainerFileOptimizeResult dexRes :
pkgRes.getDexContainerFileOptimizeResults()) {
stats.setCompileTime(
dexRes.getDexContainerFile(), dexRes.getDex2oatWallTimeMillis());
}
}
}
}
/**
* Initializes {@link ArtManagerLocal} before {@link getArtManagerLocal} is called.
*/
public static void initializeArtManagerLocal(
@NonNull Context systemContext, @NonNull PackageManagerService pm) {
if (!useArtService()) {
return;
}
ArtManagerLocal artManager = new ArtManagerLocal(systemContext);
// There doesn't appear to be any checks that @NonNull is heeded, so use requireNonNull
// below to ensure we don't store away a null that we'll fail on later.
artManager.addOptimizePackageDoneCallback(false /* onlyIncludeUpdates */,
Runnable::run, new OptimizePackageDoneHandler(Objects.requireNonNull(pm)));
LocalManagerRegistry.addManager(ArtManagerLocal.class, artManager);
}
/**
* Returns {@link ArtManagerLocal} if ART Service should be used for package optimization.
*/

View File

@@ -108,7 +108,6 @@ import com.android.internal.widget.LockSettingsInternal;
import com.android.server.am.ActivityManagerService;
import com.android.server.ambientcontext.AmbientContextManagerService;
import com.android.server.appbinding.AppBindingService;
import com.android.server.art.ArtManagerLocal;
import com.android.server.art.ArtModuleServiceInitializer;
import com.android.server.art.DexUseManagerLocal;
import com.android.server.attention.AttentionManagerService;
@@ -132,8 +131,8 @@ import com.android.server.display.DisplayManagerService;
import com.android.server.display.color.ColorDisplayService;
import com.android.server.dreams.DreamManagerService;
import com.android.server.emergency.EmergencyAffordanceService;
import com.android.server.grammaticalinflection.GrammaticalInflectionService;
import com.android.server.gpu.GpuService;
import com.android.server.grammaticalinflection.GrammaticalInflectionService;
import com.android.server.graphics.fonts.FontManagerService;
import com.android.server.hdmi.HdmiControlService;
import com.android.server.incident.IncidentCompanionService;
@@ -163,6 +162,7 @@ import com.android.server.pm.ApexSystemServiceInfo;
import com.android.server.pm.BackgroundInstallControlService;
import com.android.server.pm.CrossProfileAppsService;
import com.android.server.pm.DataLoaderManagerService;
import com.android.server.pm.DexOptHelper;
import com.android.server.pm.DynamicCodeLoggingService;
import com.android.server.pm.Installer;
import com.android.server.pm.LauncherAppsService;
@@ -2770,7 +2770,7 @@ public final class SystemServer implements Dumpable {
t.traceEnd();
t.traceBegin("ArtManagerLocal");
LocalManagerRegistry.addManager(ArtManagerLocal.class, new ArtManagerLocal(context));
DexOptHelper.initializeArtManagerLocal(context, mPackageManagerService);
t.traceEnd();
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_UWB)) {