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

Commit dc8d24ee authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

Break out the legacy to ART Service reason conversion code.

Test: m
Bug: 251903639
Change-Id: I8aff8519d0aeb00574182e1230f9feefc43a0178
parent 82c70fb5
Loading
Loading
Loading
Loading
+45 −54
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.pm.PackageManagerServiceCompilerMapping.getComp

import static dalvik.system.DexFile.isProfileGuidedCompilerFilter;

import android.annotation.NonNull;
import android.annotation.Nullable;

import com.android.server.art.ReasonMapping;
@@ -200,6 +201,49 @@ public final class DexoptOptions {
                mFlags);
    }

    /**
     * Returns the ART Service reason for the given PackageManagerService reason. Throws unchecked
     * exceptions for reasons that aren't supported.
     */
    public static @NonNull String convertToArtServiceDexoptReason(int pmDexoptReason) {
        switch (pmDexoptReason) {
            case PackageManagerService.REASON_FIRST_BOOT:
                return ReasonMapping.REASON_FIRST_BOOT;
            case PackageManagerService.REASON_BOOT_AFTER_OTA:
                return ReasonMapping.REASON_BOOT_AFTER_OTA;
            case PackageManagerService.REASON_INSTALL:
                return ReasonMapping.REASON_INSTALL;
            case PackageManagerService.REASON_INSTALL_FAST:
                return ReasonMapping.REASON_INSTALL_FAST;
            case PackageManagerService.REASON_INSTALL_BULK:
                return ReasonMapping.REASON_INSTALL_BULK;
            case PackageManagerService.REASON_INSTALL_BULK_SECONDARY:
                return ReasonMapping.REASON_INSTALL_BULK_SECONDARY;
            case PackageManagerService.REASON_INSTALL_BULK_DOWNGRADED:
                return ReasonMapping.REASON_INSTALL_BULK_DOWNGRADED;
            case PackageManagerService.REASON_INSTALL_BULK_SECONDARY_DOWNGRADED:
                return ReasonMapping.REASON_INSTALL_BULK_SECONDARY_DOWNGRADED;
            case PackageManagerService.REASON_BACKGROUND_DEXOPT:
                return ReasonMapping.REASON_BG_DEXOPT;
            case PackageManagerService.REASON_INACTIVE_PACKAGE_DOWNGRADE:
                return ReasonMapping.REASON_INACTIVE;
            case PackageManagerService.REASON_CMDLINE:
                return ReasonMapping.REASON_CMDLINE;
            case PackageManagerService.REASON_POST_BOOT:
            case PackageManagerService.REASON_SHARED:
            case PackageManagerService.REASON_AB_OTA:
                // REASON_POST_BOOT isn't supported - that dexopt stage is getting removed.
                // REASON_SHARED shouldn't go to ART Service - it's only used at lower levels
                // in PackageDexOptimizer.
                // TODO(b/251921228): OTA isn't supported, so REASON_AB_OTA shouldn't come this way
                // either.
                throw new UnsupportedOperationException(
                        "ART Service unsupported compilation reason " + pmDexoptReason);
            default:
                throw new IllegalArgumentException("Invalid compilation reason " + pmDexoptReason);
        }
    }

    /**
     * Returns an {@link DexoptParams} instance corresponding to this object, for use with
     * {@link com.android.server.art.ArtManagerLocal}.
@@ -269,60 +313,7 @@ public final class DexoptOptions {
        // -  DEXOPT_IDLE_BACKGROUND_JOB: Its only effect is to allow the debug variant dex2oatd to
        //    be used, but ART Service never uses that (cf. Artd::GetDex2Oat in artd.cc).

        String reason;
        switch (mCompilationReason) {
            case PackageManagerService.REASON_FIRST_BOOT:
                reason = ReasonMapping.REASON_FIRST_BOOT;
                break;
            case PackageManagerService.REASON_BOOT_AFTER_OTA:
                reason = ReasonMapping.REASON_BOOT_AFTER_OTA;
                break;
            case PackageManagerService.REASON_POST_BOOT:
                // This reason will go away with the legacy dexopt code.
                DexOptHelper.reportArtManagerFallback(
                        mPackageName, "Unsupported compilation reason REASON_POST_BOOT");
                return null;
            case PackageManagerService.REASON_INSTALL:
                reason = ReasonMapping.REASON_INSTALL;
                break;
            case PackageManagerService.REASON_INSTALL_FAST:
                reason = ReasonMapping.REASON_INSTALL_FAST;
                break;
            case PackageManagerService.REASON_INSTALL_BULK:
                reason = ReasonMapping.REASON_INSTALL_BULK;
                break;
            case PackageManagerService.REASON_INSTALL_BULK_SECONDARY:
                reason = ReasonMapping.REASON_INSTALL_BULK_SECONDARY;
                break;
            case PackageManagerService.REASON_INSTALL_BULK_DOWNGRADED:
                reason = ReasonMapping.REASON_INSTALL_BULK_DOWNGRADED;
                break;
            case PackageManagerService.REASON_INSTALL_BULK_SECONDARY_DOWNGRADED:
                reason = ReasonMapping.REASON_INSTALL_BULK_SECONDARY_DOWNGRADED;
                break;
            case PackageManagerService.REASON_BACKGROUND_DEXOPT:
                reason = ReasonMapping.REASON_BG_DEXOPT;
                break;
            case PackageManagerService.REASON_INACTIVE_PACKAGE_DOWNGRADE:
                reason = ReasonMapping.REASON_INACTIVE;
                break;
            case PackageManagerService.REASON_CMDLINE:
                reason = ReasonMapping.REASON_CMDLINE;
                break;
            case PackageManagerService.REASON_SHARED:
            case PackageManagerService.REASON_AB_OTA:
                // REASON_SHARED shouldn't go into this code path - it's only used at lower levels
                // in PackageDexOptimizer.
                // TODO(b/251921228): OTA isn't supported, so REASON_AB_OTA shouldn't come this way
                // either.
                throw new UnsupportedOperationException(
                        "ART Service unsupported compilation reason " + mCompilationReason);
            default:
                throw new IllegalArgumentException(
                        "Invalid compilation reason " + mCompilationReason);
        }

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