Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a44ec0b authored by Martin Stjernholm's avatar Martin Stjernholm Committed by Android (Google) Code Review
Browse files

Merge "Use ART Service OptimizePackageDoneCallback."

parents b63c0f86 5a1787b3
Loading
Loading
Loading
Loading
+43 −16
Original line number Diff line number Diff line
@@ -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.
     */
+3 −3
Original line number Diff line number Diff line
@@ -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)) {