Loading core/res/AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -7576,7 +7576,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> Loading services/core/java/com/android/server/pm/DexOptHelper.java +25 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading Loading @@ -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()); } Loading @@ -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()) { Loading @@ -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); } } Loading services/core/java/com/android/server/pm/dex/DexoptOptions.java +7 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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(); Loading Loading
core/res/AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -7576,7 +7576,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> Loading
services/core/java/com/android/server/pm/DexOptHelper.java +25 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading Loading @@ -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()); } Loading @@ -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()) { Loading @@ -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); } } Loading
services/core/java/com/android/server/pm/dex/DexoptOptions.java +7 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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(); Loading