Merge "Use ART Service OptimizePackageDoneCallback."
This commit is contained in:
committed by
Android (Google) Code Review
commit
0a44ec0b33
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user