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

Commit bfde115e authored by Jiakai Zhang's avatar Jiakai Zhang
Browse files

Update framework code for the API renaming of ART Service.

Bug: 265248684
Test: Presubmit
Change-Id: I6a89ba088805a2f0723dfb6f1feddb76c199836c
parent 3c5431cc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7578,7 +7578,7 @@
            </intent-filter>
        </service>

        <service android:name="com.android.server.art.BackgroundDexOptJobService"
        <service android:name="com.android.server.art.BackgroundDexoptJobService"
                 android:permission="android.permission.BIND_JOB_SERVICE" >
        </service>

+25 −26
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ import com.android.server.LocalManagerRegistry;
import com.android.server.art.ArtManagerLocal;
import com.android.server.art.DexUseManagerLocal;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.OptimizeParams;
import com.android.server.art.model.OptimizeResult;
import com.android.server.art.model.DexoptParams;
import com.android.server.art.model.DexoptResult;
import com.android.server.pm.Installer.InstallerException;
import com.android.server.pm.Installer.LegacyDexoptDisabledException;
import com.android.server.pm.PackageDexOptimizer.DexOptResult;
@@ -502,7 +502,7 @@ public final class DexOptHelper {
     *     necessary to fall back to the legacy code paths.
     */
    private Optional<Integer> performDexOptWithArtService(DexoptOptions options,
            /*@OptimizeFlags*/ int extraFlags) {
            /*@DexoptFlags*/ int extraFlags) {
        ArtManagerLocal artManager = getArtManagerLocal();
        if (artManager == null) {
            return Optional.empty();
@@ -522,14 +522,14 @@ public final class DexOptHelper {
                return Optional.of(PackageDexOptimizer.DEX_OPT_SKIPPED);
            }

            OptimizeParams params = options.convertToOptimizeParams(extraFlags);
            DexoptParams params = options.convertToDexoptParams(extraFlags);
            if (params == null) {
                return Optional.empty();
            }

            OptimizeResult result;
            DexoptResult result;
            try {
                result = artManager.optimizePackage(snapshot, options.getPackageName(), params);
                result = artManager.dexoptPackage(snapshot, options.getPackageName(), params);
            } catch (UnsupportedOperationException e) {
                reportArtManagerFallback(options.getPackageName(), e.toString());
                return Optional.empty();
@@ -954,22 +954,21 @@ public final class DexOptHelper {
        }
    }

    private static class OptimizePackageDoneHandler
            implements ArtManagerLocal.OptimizePackageDoneCallback {
    private static class DexoptDoneHandler implements ArtManagerLocal.DexoptDoneCallback {
        @NonNull private final PackageManagerService mPm;

        OptimizePackageDoneHandler(@NonNull PackageManagerService pm) { mPm = pm; }
        DexoptDoneHandler(@NonNull PackageManagerService pm) { mPm = pm; }

        /**
         * Called after every package optimization operation done by {@link ArtManagerLocal}.
         * Called after every package dexopt operation done by {@link ArtManagerLocal}.
         */
        @Override
        public void onOptimizePackageDone(@NonNull OptimizeResult result) {
            for (OptimizeResult.PackageOptimizeResult pkgRes : result.getPackageOptimizeResults()) {
        public void onDexoptDone(@NonNull DexoptResult result) {
            for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) {
                CompilerStats.PackageStats stats =
                        mPm.getOrCreateCompilerPackageStats(pkgRes.getPackageName());
                for (OptimizeResult.DexContainerFileOptimizeResult dexRes :
                        pkgRes.getDexContainerFileOptimizeResults()) {
                for (DexoptResult.DexContainerFileDexoptResult dexRes :
                        pkgRes.getDexContainerFileDexoptResults()) {
                    stats.setCompileTime(
                            dexRes.getDexContainerFile(), dexRes.getDex2oatWallTimeMillis());
                }
@@ -994,13 +993,13 @@ public final class DexOptHelper {
        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)));
        artManager.addDexoptDoneCallback(false /* onlyIncludeUpdates */,
                Runnable::run, new DexoptDoneHandler(Objects.requireNonNull(pm)));
        LocalManagerRegistry.addManager(ArtManagerLocal.class, artManager);
    }

    /**
     * Returns {@link ArtManagerLocal} if ART Service should be used for package optimization.
     * Returns {@link ArtManagerLocal} if ART Service should be used for package dexopt.
     */
    private static @Nullable ArtManagerLocal getArtManagerLocal() {
        if (!useArtService()) {
@@ -1014,25 +1013,25 @@ public final class DexOptHelper {
    }

    /**
     * Converts an ART Service {@link OptimizeResult} to {@link DexOptResult}.
     * Converts an ART Service {@link DexoptResult} to {@link DexOptResult}.
     *
     * For interfacing {@link ArtManagerLocal} with legacy dex optimization code in PackageManager.
     */
    @DexOptResult
    private static int convertToDexOptResult(OptimizeResult result) {
        /*@OptimizeStatus*/ int status = result.getFinalStatus();
    private static int convertToDexOptResult(DexoptResult result) {
        /*@DexoptResultStatus*/ int status = result.getFinalStatus();
        switch (status) {
            case OptimizeResult.OPTIMIZE_SKIPPED:
            case DexoptResult.DEXOPT_SKIPPED:
                return PackageDexOptimizer.DEX_OPT_SKIPPED;
            case OptimizeResult.OPTIMIZE_FAILED:
            case DexoptResult.DEXOPT_FAILED:
                return PackageDexOptimizer.DEX_OPT_FAILED;
            case OptimizeResult.OPTIMIZE_PERFORMED:
            case DexoptResult.DEXOPT_PERFORMED:
                return PackageDexOptimizer.DEX_OPT_PERFORMED;
            case OptimizeResult.OPTIMIZE_CANCELLED:
            case DexoptResult.DEXOPT_CANCELLED:
                return PackageDexOptimizer.DEX_OPT_CANCELLED;
            default:
                throw new IllegalArgumentException("OptimizeResult for "
                        + result.getPackageOptimizeResults().get(0).getPackageName()
                throw new IllegalArgumentException("DexoptResult for "
                        + result.getPackageDexoptResults().get(0).getPackageName()
                        + " has unsupported status " + status);
        }
    }
+7 −7
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import android.annotation.Nullable;

import com.android.server.art.ReasonMapping;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.OptimizeParams;
import com.android.server.art.model.DexoptParams;
import com.android.server.pm.DexOptHelper;
import com.android.server.pm.PackageManagerService;

@@ -201,22 +201,22 @@ public final class DexoptOptions {
    }

    /**
     * Returns an {@link OptimizeParams} instance corresponding to this object, for use with
     * Returns an {@link DexoptParams} instance corresponding to this object, for use with
     * {@link com.android.server.art.ArtManagerLocal}.
     *
     * @param extraFlags extra {@link ArtFlags#OptimizeFlags} to set in the returned
     *     {@code OptimizeParams} beyond those converted from this object
     * @param extraFlags extra {@link ArtFlags#DexoptFlags} to set in the returned
     *     {@code DexoptParams} beyond those converted from this object
     * @return null if the settings cannot be accurately represented, and hence the old
     *     PackageManager/installd code paths need to be used.
     */
    public @Nullable OptimizeParams convertToOptimizeParams(/*@OptimizeFlags*/ int extraFlags) {
    public @Nullable DexoptParams convertToDexoptParams(/*@DexoptFlags*/ int extraFlags) {
        if (mSplitName != null) {
            DexOptHelper.reportArtManagerFallback(
                    mPackageName, "Request to optimize only split " + mSplitName);
            return null;
        }

        /*@OptimizeFlags*/ int flags = extraFlags;
        /*@DexoptFlags*/ int flags = extraFlags;
        if ((mFlags & DEXOPT_CHECK_FOR_PROFILES_UPDATES) == 0
                && isProfileGuidedCompilerFilter(mCompilerFilter)) {
            // ART Service doesn't support bypassing the profile update check when profiles are
@@ -322,7 +322,7 @@ public final class DexoptOptions {
                        "Invalid compilation reason " + mCompilationReason);
        }

        return new OptimizeParams.Builder(reason, flags)
        return new DexoptParams.Builder(reason, flags)
                .setCompilerFilter(mCompilerFilter)
                .setPriorityClass(priority)
                .build();