Use @AutoValue for OptimizationStatus.
Bug: 233383589
Test: atest ArtServiceTests
Ignore-AOSP-First: ART Services.
Change-Id: I195c0faa07e6f3b97dce9d19f3ce1b1d5f9e34a3
diff --git a/libartservice/service/api/system-server-current.txt b/libartservice/service/api/system-server-current.txt
index d22a8c3..395925f 100644
--- a/libartservice/service/api/system-server-current.txt
+++ b/libartservice/service/api/system-server-current.txt
@@ -50,17 +50,17 @@
method public long getFreedBytes();
}
- public class OptimizationStatus {
- method @NonNull public java.util.List<com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus> getDexContainerFileOptimizationStatuses();
+ public abstract class OptimizationStatus {
+ method @NonNull public abstract java.util.List<com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus> getDexContainerFileOptimizationStatuses();
}
- public static class OptimizationStatus.DexContainerFileOptimizationStatus {
- method @NonNull public String getAbi();
- method @NonNull public String getCompilationReason();
- method @NonNull public String getCompilerFilter();
- method @NonNull public String getDexContainerFile();
- method @NonNull public String getLocationDebugString();
- method public boolean isPrimaryAbi();
+ public abstract static class OptimizationStatus.DexContainerFileOptimizationStatus {
+ method @NonNull public abstract String getAbi();
+ method @NonNull public abstract String getCompilationReason();
+ method @NonNull public abstract String getCompilerFilter();
+ method @NonNull public abstract String getDexContainerFile();
+ method @NonNull public abstract String getLocationDebugString();
+ method public abstract boolean isPrimaryAbi();
}
public class OptimizeParams {
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index b67fb98..2792a2d 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -207,13 +207,14 @@
GetOptimizationStatusResult result =
mInjector.getArtd().getOptimizationStatus(dexInfo.dexPath(),
abi.isa(), dexInfo.classLoaderContext());
- statuses.add(new DexContainerFileOptimizationStatus(dexInfo.dexPath(),
- abi.isPrimaryAbi(), abi.name(), result.compilerFilter,
- result.compilationReason, result.locationDebugString));
+ statuses.add(
+ DexContainerFileOptimizationStatus.create(dexInfo.dexPath(),
+ abi.isPrimaryAbi(), abi.name(), result.compilerFilter,
+ result.compilationReason, result.locationDebugString));
} catch (ServiceSpecificException e) {
- statuses.add(new DexContainerFileOptimizationStatus(dexInfo.dexPath(),
- abi.isPrimaryAbi(), abi.name(), "error", "error",
- e.getMessage()));
+ statuses.add(DexContainerFileOptimizationStatus.create(
+ dexInfo.dexPath(), abi.isPrimaryAbi(), abi.name(), "error",
+ "error", e.getMessage()));
}
}
}
@@ -225,7 +226,7 @@
"Getting optimization status of secondary dex'es is not implemented yet");
}
- return new OptimizationStatus(statuses);
+ return OptimizationStatus.create(statuses);
} 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 5f6d6d4..0532dfd 100644
--- a/libartservice/service/java/com/android/server/art/ArtShellCommand.java
+++ b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
@@ -75,15 +75,7 @@
case "get-optimization-status": {
OptimizationStatus optimizationStatus = mArtManagerLocal.getOptimizationStatus(
snapshot, getNextArgRequired(), ArtFlags.defaultGetStatusFlags());
- for (DexContainerFileOptimizationStatus status :
- optimizationStatus.getDexContainerFileOptimizationStatuses()) {
- pw.printf("dexContainerFile = %s, isPrimaryAbi = %b, abi = %s, "
- + "compilerFilter = %s, compilationReason = %s, "
- + "locationDebugString = %s\n",
- status.getDexContainerFile(), status.isPrimaryAbi(), status.getAbi(),
- status.getCompilerFilter(), status.getCompilationReason(),
- status.getLocationDebugString());
- }
+ pw.println(optimizationStatus);
return 0;
}
case "optimize-package": {
diff --git a/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java b/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java
index f156e97..c4c817c 100644
--- a/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java
+++ b/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java
@@ -21,6 +21,8 @@
import com.android.internal.annotations.Immutable;
+import com.google.auto.value.AutoValue;
+
import java.util.ArrayList;
import java.util.List;
@@ -31,68 +33,57 @@
*/
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@Immutable
-public class OptimizationStatus {
- private final
- @NonNull List<DexContainerFileOptimizationStatus> mDexContainerFileOptimizationStatuses;
+@AutoValue
+public abstract class OptimizationStatus {
+ /** @hide */
+ protected OptimizationStatus() {}
/** @hide */
- public OptimizationStatus(@NonNull List<DexContainerFileOptimizationStatus>
- dexContainerFileOptimizationStatuses) {
- mDexContainerFileOptimizationStatuses = dexContainerFileOptimizationStatuses;
+ public static @NonNull OptimizationStatus
+ create(@NonNull List<DexContainerFileOptimizationStatus> dexContainerFileOptimizationStatuses) {
+ return new AutoValue_OptimizationStatus(dexContainerFileOptimizationStatuses);
}
/**
- * The statuses of the dex container file optimizations. Note that there can be
- * multiple entries for the same dex container file, but for different ABIs.
+ * The statuses of the dex container file optimizations. Note that there can be multiple entries
+ * for the same dex container file, but for different ABIs.
*/
@NonNull
- public List<DexContainerFileOptimizationStatus> getDexContainerFileOptimizationStatuses() {
- return mDexContainerFileOptimizationStatuses;
- }
+ public abstract List<DexContainerFileOptimizationStatus>
+ getDexContainerFileOptimizationStatuses();
/** Describes the optimization status of a dex container file. */
@Immutable
- public static class DexContainerFileOptimizationStatus {
- private final @NonNull String mDexContainerFile;
- private final @NonNull boolean mIsPrimaryAbi;
- private final @NonNull String mAbi;
- private final @NonNull String mCompilerFilter;
- private final @NonNull String mCompilationReason;
- private final @NonNull String mLocationDebugString;
+ @AutoValue
+ public abstract static class DexContainerFileOptimizationStatus {
+ /** @hide */
+ protected DexContainerFileOptimizationStatus() {}
/** @hide */
- public DexContainerFileOptimizationStatus(@NonNull String dexContainerFile,
- boolean isPrimaryAbi, @NonNull String abi, @NonNull String compilerFilter,
- @NonNull String compilationReason, @NonNull String locationDebugString) {
- mDexContainerFile = dexContainerFile;
- mIsPrimaryAbi = isPrimaryAbi;
- mAbi = abi;
- mCompilerFilter = compilerFilter;
- mCompilationReason = compilationReason;
- mLocationDebugString = locationDebugString;
+ public static @NonNull DexContainerFileOptimizationStatus create(
+ @NonNull String dexContainerFile, boolean isPrimaryAbi, @NonNull String abi,
+ @NonNull String compilerFilter, @NonNull String compilationReason,
+ @NonNull String locationDebugString) {
+ return new AutoValue_OptimizationStatus_DexContainerFileOptimizationStatus(
+ dexContainerFile, isPrimaryAbi, abi, compilerFilter, compilationReason,
+ locationDebugString);
}
/** The absolute path to the dex container file. */
- public @NonNull String getDexContainerFile() {
- return mDexContainerFile;
- }
+ public abstract @NonNull String getDexContainerFile();
/**
* If true, the optimization is for the primary ABI of the package (the ABI that the
* application is launched with). Otherwise, the optimization is for an ABI that other
* applications might be launched with when using this application's code.
*/
- public boolean isPrimaryAbi() {
- return mIsPrimaryAbi;
- }
+ public abstract boolean isPrimaryAbi();
/**
* Returns the ABI that the optimization is for. Possible values are documented at
* https://developer.android.com/ndk/guides/abis#sa.
*/
- public @NonNull String getAbi() {
- return mAbi;
- }
+ public abstract @NonNull String getAbi();
/**
* A human-readable string that describes the compiler filter.
@@ -108,9 +99,7 @@
* <li>{@code "error"}, if an unexpected error occurs.
* </ul>
*/
- public @NonNull String getCompilerFilter() {
- return mCompilerFilter;
- }
+ public abstract @NonNull String getCompilerFilter();
/**
* A string that describes the compilation reason.
@@ -122,9 +111,7 @@
* <li>{@code "error"}: if an unexpected error occurs.
* </ul>
*/
- public @NonNull String getCompilationReason() {
- return mCompilationReason;
- }
+ public abstract @NonNull String getCompilationReason();
/**
* A human-readable string that describes the location of the optimized artifacts.
@@ -132,8 +119,6 @@
* Note that this string is for debugging purposes only. There is no stability guarantees
* for the format of the string. DO NOT use it programmatically.
*/
- public @NonNull String getLocationDebugString() {
- return mLocationDebugString;
- }
+ public abstract @NonNull String getLocationDebugString();
}
}