Remove flags for `deleteDexoptArtifacts` and `clearAppProfiles`.
So far, we haven't identified any specific use case of those flags.
Bug: 265387694
Test: atest ArtServiceTests
Ignore-AOSP-First: ART Services.
Change-Id: Ic174a1c9bd6e9e4acee2b747dbcc7f9122dc70cc
diff --git a/libartservice/service/api/system-server-current.txt b/libartservice/service/api/system-server-current.txt
index bd76173..31a56da 100644
--- a/libartservice/service/api/system-server-current.txt
+++ b/libartservice/service/api/system-server-current.txt
@@ -7,11 +7,9 @@
method public void addDexoptDoneCallback(boolean, @NonNull java.util.concurrent.Executor, @NonNull com.android.server.art.ArtManagerLocal.DexoptDoneCallback);
method public void cancelBackgroundDexoptJob();
method @NonNull public void clearAppProfiles(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
- method @NonNull public void clearAppProfiles(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, int);
method public void clearBatchDexoptStartCallback();
method public void clearScheduleBackgroundDexoptJobCallback();
method @NonNull public com.android.server.art.model.DeleteResult deleteDexoptArtifacts(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
- method @NonNull public com.android.server.art.model.DeleteResult deleteDexoptArtifacts(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, int);
method @NonNull public com.android.server.art.model.DexoptResult dexoptPackage(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull com.android.server.art.model.DexoptParams);
method @NonNull public com.android.server.art.model.DexoptResult dexoptPackage(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull com.android.server.art.model.DexoptParams, @NonNull android.os.CancellationSignal);
method public void dump(@NonNull java.io.PrintWriter, @NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot);
@@ -78,8 +76,6 @@
package com.android.server.art.model {
public class ArtFlags {
- method public static int defaultClearProfileFlags();
- method public static int defaultDeleteFlags();
method public static int defaultGetStatusFlags();
field public static final int FLAG_FORCE = 16; // 0x10
field public static final int FLAG_FOR_PRIMARY_DEX = 1; // 0x1
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index 4c34df2..864a26d 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -22,8 +22,6 @@
import static com.android.server.art.ReasonMapping.BatchDexoptReason;
import static com.android.server.art.ReasonMapping.BootReason;
import static com.android.server.art.Utils.Abi;
-import static com.android.server.art.model.ArtFlags.ClearProfileFlags;
-import static com.android.server.art.model.ArtFlags.DeleteFlags;
import static com.android.server.art.model.ArtFlags.GetStatusFlags;
import static com.android.server.art.model.ArtFlags.ScheduleStatus;
import static com.android.server.art.model.Config.Callback;
@@ -149,9 +147,8 @@
}
/**
- * Deletes dexopt artifacts of a package.
- *
- * Uses the default flags ({@link ArtFlags#defaultDeleteFlags()}).
+ * Deletes dexopt artifacts of a package, including the artifacts for primary dex files and the
+ * ones for secondary dex files.
*
* @throws IllegalArgumentException if the package is not found or the flags are illegal
* @throws IllegalStateException if the operation encounters an error that should never happen
@@ -160,51 +157,28 @@
@NonNull
public DeleteResult deleteDexoptArtifacts(
@NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName) {
- return deleteDexoptArtifacts(snapshot, packageName, ArtFlags.defaultDeleteFlags());
- }
-
- /**
- * Same as above, but allows to specify flags.
- *
- * @see #deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String)
- */
- @NonNull
- public DeleteResult deleteDexoptArtifacts(
- @NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName,
- @DeleteFlags int flags) {
- if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) == 0
- && (flags & ArtFlags.FLAG_FOR_SECONDARY_DEX) == 0) {
- throw new IllegalArgumentException("Nothing to delete");
- }
-
PackageState pkgState = Utils.getPackageStateOrThrow(snapshot, packageName);
AndroidPackage pkg = Utils.getPackageOrThrow(pkgState);
try {
long freedBytes = 0;
- if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) != 0) {
- boolean isInDalvikCache = Utils.isInDalvikCache(pkgState);
- for (PrimaryDexInfo dexInfo : PrimaryDexUtils.getDexInfo(pkg)) {
- if (!dexInfo.hasCode()) {
- continue;
- }
- for (Abi abi : Utils.getAllAbis(pkgState)) {
- freedBytes +=
- mInjector.getArtd().deleteArtifacts(AidlUtils.buildArtifactsPath(
- dexInfo.dexPath(), abi.isa(), isInDalvikCache));
- }
+ boolean isInDalvikCache = Utils.isInDalvikCache(pkgState);
+ for (PrimaryDexInfo dexInfo : PrimaryDexUtils.getDexInfo(pkg)) {
+ if (!dexInfo.hasCode()) {
+ continue;
+ }
+ for (Abi abi : Utils.getAllAbis(pkgState)) {
+ freedBytes += mInjector.getArtd().deleteArtifacts(AidlUtils.buildArtifactsPath(
+ dexInfo.dexPath(), abi.isa(), isInDalvikCache));
}
}
- if ((flags & ArtFlags.FLAG_FOR_SECONDARY_DEX) != 0) {
- for (SecondaryDexInfo dexInfo :
- mInjector.getDexUseManager().getSecondaryDexInfo(packageName)) {
- for (Abi abi : Utils.getAllAbisForNames(dexInfo.abiNames(), pkgState)) {
- freedBytes +=
- mInjector.getArtd().deleteArtifacts(AidlUtils.buildArtifactsPath(
- dexInfo.dexPath(), abi.isa(), false /* isInDalvikCache */));
- }
+ for (SecondaryDexInfo dexInfo :
+ mInjector.getDexUseManager().getSecondaryDexInfo(packageName)) {
+ for (Abi abi : Utils.getAllAbisForNames(dexInfo.abiNames(), pkgState)) {
+ freedBytes += mInjector.getArtd().deleteArtifacts(AidlUtils.buildArtifactsPath(
+ dexInfo.dexPath(), abi.isa(), false /* isInDalvikCache */));
}
}
@@ -298,12 +272,11 @@
}
/**
- * Clears the profiles of the given app that are collected locally. More specifically, it clears
+ * Clears the profiles of the given app that are collected locally, including the profiles for
+ * primary dex files and the ones for secondary dex files. More specifically, it clears
* reference profiles and current profiles. External profiles (e.g., cloud profiles) will be
* kept.
*
- * Uses the default flags ({@link ArtFlags#defaultClearProfileFlags()}).
- *
* @throws IllegalArgumentException if the package is not found or the flags are illegal
* @throws IllegalStateException if the operation encounters an error that should never happen
* (e.g., an internal logic error).
@@ -311,50 +284,30 @@
@NonNull
public void clearAppProfiles(
@NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName) {
- clearAppProfiles(snapshot, packageName, ArtFlags.defaultClearProfileFlags());
- }
-
- /**
- * Same as above, but allows to specify flags.
- *
- * @see #clearAppProfiles(PackageManagerLocal.FilteredSnapshot, String)
- */
- @NonNull
- public void clearAppProfiles(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull String packageName, @ClearProfileFlags int flags) {
- if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) == 0
- && (flags & ArtFlags.FLAG_FOR_SECONDARY_DEX) == 0) {
- throw new IllegalArgumentException("Nothing to clear");
- }
-
PackageState pkgState = Utils.getPackageStateOrThrow(snapshot, packageName);
AndroidPackage pkg = Utils.getPackageOrThrow(pkgState);
try {
- if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) != 0) {
- for (PrimaryDexInfo dexInfo : PrimaryDexUtils.getDexInfo(pkg)) {
- if (!dexInfo.hasCode()) {
- continue;
- }
- mInjector.getArtd().deleteProfile(
- PrimaryDexUtils.buildRefProfilePath(pkgState, dexInfo));
- for (ProfilePath profile : PrimaryDexUtils.getCurProfiles(
- mInjector.getUserManager(), pkgState, dexInfo)) {
- mInjector.getArtd().deleteProfile(profile);
- }
+ for (PrimaryDexInfo dexInfo : PrimaryDexUtils.getDexInfo(pkg)) {
+ if (!dexInfo.hasCode()) {
+ continue;
+ }
+ mInjector.getArtd().deleteProfile(
+ PrimaryDexUtils.buildRefProfilePath(pkgState, dexInfo));
+ for (ProfilePath profile : PrimaryDexUtils.getCurProfiles(
+ mInjector.getUserManager(), pkgState, dexInfo)) {
+ mInjector.getArtd().deleteProfile(profile);
}
}
- if ((flags & ArtFlags.FLAG_FOR_SECONDARY_DEX) != 0) {
- // This only deletes the profiles of known secondary dex files. If there are unknown
- // secondary dex files, their profiles will be deleted by `cleanup`.
- for (SecondaryDexInfo dexInfo :
- mInjector.getDexUseManager().getSecondaryDexInfo(packageName)) {
- mInjector.getArtd().deleteProfile(
- AidlUtils.buildProfilePathForSecondaryRef(dexInfo.dexPath()));
- mInjector.getArtd().deleteProfile(
- AidlUtils.buildProfilePathForSecondaryCur(dexInfo.dexPath()));
- }
+ // This only deletes the profiles of known secondary dex files. If there are unknown
+ // secondary dex files, their profiles will be deleted by `cleanup`.
+ for (SecondaryDexInfo dexInfo :
+ mInjector.getDexUseManager().getSecondaryDexInfo(packageName)) {
+ mInjector.getArtd().deleteProfile(
+ AidlUtils.buildProfilePathForSecondaryRef(dexInfo.dexPath()));
+ mInjector.getArtd().deleteProfile(
+ AidlUtils.buildProfilePathForSecondaryCur(dexInfo.dexPath()));
}
} catch (RemoteException e) {
throw new IllegalStateException("An error occurred when calling artd", e);
diff --git a/libartservice/service/java/com/android/server/art/ArtShellCommand.java b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
index 79d5edb..6fd1dc5 100644
--- a/libartservice/service/java/com/android/server/art/ArtShellCommand.java
+++ b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
@@ -127,8 +127,8 @@
String subcmd = getNextArgRequired();
switch (subcmd) {
case "delete-dexopt-artifacts": {
- DeleteResult result = mArtManagerLocal.deleteDexoptArtifacts(
- snapshot, getNextArgRequired(), ArtFlags.defaultDeleteFlags());
+ DeleteResult result =
+ mArtManagerLocal.deleteDexoptArtifacts(snapshot, getNextArgRequired());
pw.printf("Freed %d bytes\n", result.getFreedBytes());
return 0;
}
diff --git a/libartservice/service/java/com/android/server/art/model/ArtFlags.java b/libartservice/service/java/com/android/server/art/model/ArtFlags.java
index aa8e53c..64ae807 100644
--- a/libartservice/service/java/com/android/server/art/model/ArtFlags.java
+++ b/libartservice/service/java/com/android/server/art/model/ArtFlags.java
@@ -72,31 +72,6 @@
/**
* Flags for {@link
- * ArtManagerLocal#deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String, int)}.
- *
- * @hide
- */
- // clang-format off
- @IntDef(flag = true, prefix = "FLAG_", value = {
- FLAG_FOR_PRIMARY_DEX,
- FLAG_FOR_SECONDARY_DEX,
- })
- // clang-format on
- @Retention(RetentionPolicy.SOURCE)
- public @interface DeleteFlags {}
-
- /**
- * Default flags that are used when {@link
- * ArtManagerLocal#deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String)} is
- * called.
- * Value: {@link #FLAG_FOR_PRIMARY_DEX}, {@link #FLAG_FOR_SECONDARY_DEX}.
- */
- public static @DeleteFlags int defaultDeleteFlags() {
- return FLAG_FOR_PRIMARY_DEX | FLAG_FOR_SECONDARY_DEX;
- }
-
- /**
- * Flags for {@link
* ArtManagerLocal#getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String, int)}.
*
* @hide
@@ -121,31 +96,6 @@
}
/**
- * Flags for {@link
- * ArtManagerLocal#clearAppProfiles(PackageManagerLocal.FilteredSnapshot, String, int)}.
- *
- * @hide
- */
- // clang-format off
- @IntDef(flag = true, prefix = "FLAG_", value = {
- FLAG_FOR_PRIMARY_DEX,
- FLAG_FOR_SECONDARY_DEX,
- })
- // clang-format on
- @Retention(RetentionPolicy.SOURCE)
- public @interface ClearProfileFlags {}
-
- /**
- * Default flags that are used when {@link
- * ArtManagerLocal#getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String)} is
- * called.
- * Value: {@link #FLAG_FOR_PRIMARY_DEX}, {@link #FLAG_FOR_SECONDARY_DEX}.
- */
- public static @ClearProfileFlags int defaultClearProfileFlags() {
- return FLAG_FOR_PRIMARY_DEX | FLAG_FOR_SECONDARY_DEX;
- }
-
- /**
* Flags for {@link DexoptParams}.
*
* @hide