Consistently use the term "dexopt".
Terminology:
- "dexopt":
- n. DEX optimization
- v. to perform DEX optimization
- "dexopted": past tense and past participle of "dexopt"
- "dexopting": present participle of "dexopt"
- "dexoptable": can be dexopted
Bug: 265248684
Test: Presubmit
Ignore-AOSP-First: ART Services.
Change-Id: I35b2843cc357fee4aaf4845fb069a955b063f744
diff --git a/artd/artd.cc b/artd/artd.cc
index 47e0733..b6304d2 100644
--- a/artd/artd.cc
+++ b/artd/artd.cc
@@ -73,15 +73,15 @@
namespace {
+using ::aidl::com::android::server::art::ArtdDexoptResult;
using ::aidl::com::android::server::art::ArtifactsPath;
using ::aidl::com::android::server::art::DexMetadataPath;
using ::aidl::com::android::server::art::DexoptOptions;
-using ::aidl::com::android::server::art::DexoptResult;
using ::aidl::com::android::server::art::DexoptTrigger;
using ::aidl::com::android::server::art::FileVisibility;
using ::aidl::com::android::server::art::FsPermission;
using ::aidl::com::android::server::art::GetDexoptNeededResult;
-using ::aidl::com::android::server::art::GetOptimizationStatusResult;
+using ::aidl::com::android::server::art::GetDexoptStatusResult;
using ::aidl::com::android::server::art::IArtdCancellationSignal;
using ::aidl::com::android::server::art::MergeProfileOptions;
using ::aidl::com::android::server::art::OutputArtifacts;
@@ -378,10 +378,10 @@
return ScopedAStatus::ok();
}
-ScopedAStatus Artd::getOptimizationStatus(const std::string& in_dexFile,
- const std::string& in_instructionSet,
- const std::string& in_classLoaderContext,
- GetOptimizationStatusResult* _aidl_return) {
+ScopedAStatus Artd::getDexoptStatus(const std::string& in_dexFile,
+ const std::string& in_instructionSet,
+ const std::string& in_classLoaderContext,
+ GetDexoptStatusResult* _aidl_return) {
Result<OatFileAssistantContext*> ofa_context = GetOatFileAssistantContext();
if (!ofa_context.ok()) {
return NonFatal("Failed to get runtime options: " + ofa_context.error().message());
@@ -763,7 +763,7 @@
PriorityClass in_priorityClass,
const DexoptOptions& in_dexoptOptions,
const std::shared_ptr<IArtdCancellationSignal>& in_cancellationSignal,
- DexoptResult* _aidl_return) {
+ ArtdDexoptResult* _aidl_return) {
_aidl_return->cancelled = false;
std::string oat_path = OR_RETURN_FATAL(BuildOatPath(in_outputArtifacts.artifactsPath));
diff --git a/artd/artd.h b/artd/artd.h
index f0288da..fbaaed0 100644
--- a/artd/artd.h
+++ b/artd/artd.h
@@ -85,11 +85,11 @@
const aidl::com::android::server::art::ArtifactsPath& in_artifactsPath,
int64_t* _aidl_return) override;
- ndk::ScopedAStatus getOptimizationStatus(
+ ndk::ScopedAStatus getDexoptStatus(
const std::string& in_dexFile,
const std::string& in_instructionSet,
const std::string& in_classLoaderContext,
- aidl::com::android::server::art::GetOptimizationStatusResult* _aidl_return) override;
+ aidl::com::android::server::art::GetDexoptStatusResult* _aidl_return) override;
ndk::ScopedAStatus isProfileUsable(const aidl::com::android::server::art::ProfilePath& in_profile,
const std::string& in_dexFile,
@@ -152,7 +152,7 @@
const aidl::com::android::server::art::DexoptOptions& in_dexoptOptions,
const std::shared_ptr<aidl::com::android::server::art::IArtdCancellationSignal>&
in_cancellationSignal,
- aidl::com::android::server::art::DexoptResult* _aidl_return) override;
+ aidl::com::android::server::art::ArtdDexoptResult* _aidl_return) override;
ndk::ScopedAStatus createCancellationSignal(
std::shared_ptr<aidl::com::android::server::art::IArtdCancellationSignal>* _aidl_return)
diff --git a/artd/artd_test.cc b/artd/artd_test.cc
index ca1a136..8d03536 100644
--- a/artd/artd_test.cc
+++ b/artd/artd_test.cc
@@ -63,10 +63,10 @@
namespace artd {
namespace {
+using ::aidl::com::android::server::art::ArtdDexoptResult;
using ::aidl::com::android::server::art::ArtifactsPath;
using ::aidl::com::android::server::art::DexMetadataPath;
using ::aidl::com::android::server::art::DexoptOptions;
-using ::aidl::com::android::server::art::DexoptResult;
using ::aidl::com::android::server::art::FileVisibility;
using ::aidl::com::android::server::art::FsPermission;
using ::aidl::com::android::server::art::IArtdCancellationSignal;
@@ -380,7 +380,8 @@
}
void RunDexopt(binder_exception_t expected_status = EX_NONE,
- Matcher<DexoptResult> aidl_return_matcher = Field(&DexoptResult::cancelled, false),
+ Matcher<ArtdDexoptResult> aidl_return_matcher = Field(&ArtdDexoptResult::cancelled,
+ false),
std::shared_ptr<IArtdCancellationSignal> cancellation_signal = nullptr) {
RunDexopt(Property(&ndk::ScopedAStatus::getExceptionCode, expected_status),
std::move(aidl_return_matcher),
@@ -388,13 +389,14 @@
}
void RunDexopt(Matcher<ndk::ScopedAStatus> status_matcher,
- Matcher<DexoptResult> aidl_return_matcher = Field(&DexoptResult::cancelled, false),
+ Matcher<ArtdDexoptResult> aidl_return_matcher = Field(&ArtdDexoptResult::cancelled,
+ false),
std::shared_ptr<IArtdCancellationSignal> cancellation_signal = nullptr) {
InitFilesBeforeDexopt();
if (cancellation_signal == nullptr) {
ASSERT_TRUE(artd_->createCancellationSignal(&cancellation_signal).isOk());
}
- DexoptResult aidl_return;
+ ArtdDexoptResult aidl_return;
ndk::ScopedAStatus status = artd_->dexopt(output_artifacts_,
dex_file_,
isa_,
@@ -617,13 +619,14 @@
WithArg<0>(WriteToFdFlag("--app-image-fd=", "art")),
SetArgPointee<2>(ProcessStat{.wall_time_ms = 100, .cpu_time_ms = 400}),
Return(0)));
- RunDexopt(EX_NONE,
- AllOf(Field(&DexoptResult::cancelled, false),
- Field(&DexoptResult::wallTimeMs, 100),
- Field(&DexoptResult::cpuTimeMs, 400),
- Field(&DexoptResult::sizeBytes, strlen("art") + strlen("oat") + strlen("vdex")),
- Field(&DexoptResult::sizeBeforeBytes,
- strlen("old_art") + strlen("old_oat") + strlen("old_vdex"))));
+ RunDexopt(
+ EX_NONE,
+ AllOf(Field(&ArtdDexoptResult::cancelled, false),
+ Field(&ArtdDexoptResult::wallTimeMs, 100),
+ Field(&ArtdDexoptResult::cpuTimeMs, 400),
+ Field(&ArtdDexoptResult::sizeBytes, strlen("art") + strlen("oat") + strlen("vdex")),
+ Field(&ArtdDexoptResult::sizeBeforeBytes,
+ strlen("old_art") + strlen("old_oat") + strlen("old_vdex"))));
CheckContent(scratch_path_ + "/a/oat/arm64/b.odex", "oat");
CheckContent(scratch_path_ + "/a/oat/arm64/b.vdex", "vdex");
@@ -762,7 +765,7 @@
// `sizeBeforeBytes` should include the size of the old ART file even if no new ART file is
// generated.
RunDexopt(EX_NONE,
- Field(&DexoptResult::sizeBeforeBytes,
+ Field(&ArtdDexoptResult::sizeBeforeBytes,
strlen("old_art") + strlen("old_oat") + strlen("old_vdex")));
}
@@ -1032,8 +1035,9 @@
return 0;
}));
- RunDexopt(EX_SERVICE_SPECIFIC,
- AllOf(Field(&DexoptResult::sizeBytes, 0), Field(&DexoptResult::sizeBeforeBytes, 0)));
+ RunDexopt(
+ EX_SERVICE_SPECIFIC,
+ AllOf(Field(&ArtdDexoptResult::sizeBytes, 0), Field(&ArtdDexoptResult::sizeBeforeBytes, 0)));
}
TEST_F(ArtdTest, dexoptCancelledBeforeDex2oat) {
@@ -1052,7 +1056,7 @@
cancellation_signal->cancel();
- RunDexopt(EX_NONE, Field(&DexoptResult::cancelled, true), cancellation_signal);
+ RunDexopt(EX_NONE, Field(&ArtdDexoptResult::cancelled, true), cancellation_signal);
CheckContent(scratch_path_ + "/a/oat/arm64/b.odex", "old_oat");
CheckContent(scratch_path_ + "/a/oat/arm64/b.vdex", "old_vdex");
@@ -1091,8 +1095,9 @@
{
std::unique_lock<std::mutex> lock(mu);
// Step 1.
- t = std::thread(
- [&] { RunDexopt(EX_NONE, Field(&DexoptResult::cancelled, true), cancellation_signal); });
+ t = std::thread([&] {
+ RunDexopt(EX_NONE, Field(&ArtdDexoptResult::cancelled, true), cancellation_signal);
+ });
EXPECT_EQ(process_started_cv.wait_for(lock, kTimeout), std::cv_status::no_timeout);
// Step 3.
cancellation_signal->cancel();
@@ -1122,7 +1127,7 @@
}));
EXPECT_CALL(mock_kill_, Call).Times(0);
- RunDexopt(EX_NONE, Field(&DexoptResult::cancelled, false), cancellation_signal);
+ RunDexopt(EX_NONE, Field(&ArtdDexoptResult::cancelled, false), cancellation_signal);
// This signal should be ignored.
cancellation_signal->cancel();
diff --git a/artd/binder/com/android/server/art/DexoptResult.aidl b/artd/binder/com/android/server/art/ArtdDexoptResult.aidl
similarity index 79%
rename from artd/binder/com/android/server/art/DexoptResult.aidl
rename to artd/binder/com/android/server/art/ArtdDexoptResult.aidl
index 52df54d..6f031f2 100644
--- a/artd/binder/com/android/server/art/DexoptResult.aidl
+++ b/artd/binder/com/android/server/art/ArtdDexoptResult.aidl
@@ -21,7 +21,7 @@
*
* @hide
*/
-parcelable DexoptResult {
+parcelable ArtdDexoptResult {
/** True if the operation is cancelled. */
boolean cancelled;
/**
@@ -35,13 +35,13 @@
*/
long cpuTimeMs;
/**
- * The total size, in bytes, of the optimized artifacts, or 0 if dex2oat fails, is cancelled, or
+ * The total size, in bytes, of the dexopt artifacts, or 0 if dex2oat fails, is cancelled, or
* is not run.
*/
long sizeBytes;
/**
- * The total size, in bytes, of the previous optimized artifacts that have been replaced, or
- * 0 if there were no previous optimized artifacts or dex2oat fails, is cancelled, or is not
+ * The total size, in bytes, of the previous dexopt artifacts that have been replaced, or
+ * 0 if there were no previous dexopt artifacts or dex2oat fails, is cancelled, or is not
* run.
*/
long sizeBeforeBytes;
diff --git a/artd/binder/com/android/server/art/ArtifactsPath.aidl b/artd/binder/com/android/server/art/ArtifactsPath.aidl
index f69b439..3122f0f 100644
--- a/artd/binder/com/android/server/art/ArtifactsPath.aidl
+++ b/artd/binder/com/android/server/art/ArtifactsPath.aidl
@@ -17,15 +17,15 @@
package com.android.server.art;
/**
- * Represents the path to the optimized artifacts of a dex file (i.e., ART, OAT, and VDEX files).
+ * Represents the path to the dexopt artifacts of a dex file (i.e., ART, OAT, and VDEX files).
*
* @hide
*/
parcelable ArtifactsPath {
/** The absolute path starting with '/' to the dex file (i.e., APK or JAR file). */
@utf8InCpp String dexPath;
- /** The instruction set of the optimized artifacts. */
+ /** The instruction set of the dexopt artifacts. */
@utf8InCpp String isa;
- /** Whether the optimized artifacts are in the dalvik-cache folder. */
+ /** Whether the dexopt artifacts are in the dalvik-cache folder. */
boolean isInDalvikCache;
}
diff --git a/artd/binder/com/android/server/art/GetOptimizationStatusResult.aidl b/artd/binder/com/android/server/art/GetDexoptStatusResult.aidl
similarity index 78%
rename from artd/binder/com/android/server/art/GetOptimizationStatusResult.aidl
rename to artd/binder/com/android/server/art/GetDexoptStatusResult.aidl
index 99a2e37..08786ca 100644
--- a/artd/binder/com/android/server/art/GetOptimizationStatusResult.aidl
+++ b/artd/binder/com/android/server/art/GetDexoptStatusResult.aidl
@@ -17,12 +17,12 @@
package com.android.server.art;
/**
- * The result of {@code IArtd.getOptimizationStatus}. Each field corresponds to a field in
- * {@code com.android.server.art.model.OptimizationStatus.DexFileOptimizationStatus}.
+ * The result of {@code IArtd.getDexoptStatus}. Each field corresponds to a field in
+ * {@code com.android.server.art.model.DexoptStatus.DexFileDexoptStatus}.
*
* @hide
*/
-parcelable GetOptimizationStatusResult {
+parcelable GetDexoptStatusResult {
@utf8InCpp String compilerFilter;
@utf8InCpp String compilationReason;
@utf8InCpp String locationDebugString;
diff --git a/artd/binder/com/android/server/art/IArtd.aidl b/artd/binder/com/android/server/art/IArtd.aidl
index 4e45657..5121063 100644
--- a/artd/binder/com/android/server/art/IArtd.aidl
+++ b/artd/binder/com/android/server/art/IArtd.aidl
@@ -29,11 +29,11 @@
long deleteArtifacts(in com.android.server.art.ArtifactsPath artifactsPath);
/**
- * Returns the optimization status of a dex file.
+ * Returns the dexopt status of a dex file.
*
* Throws fatal and non-fatal errors.
*/
- com.android.server.art.GetOptimizationStatusResult getOptimizationStatus(
+ com.android.server.art.GetDexoptStatusResult getDexoptStatus(
@utf8InCpp String dexFile, @utf8InCpp String instructionSet,
@utf8InCpp String classLoaderContext);
@@ -140,7 +140,7 @@
*
* Throws fatal and non-fatal errors.
*/
- com.android.server.art.DexoptResult dexopt(
+ com.android.server.art.ArtdDexoptResult dexopt(
in com.android.server.art.OutputArtifacts outputArtifacts,
@utf8InCpp String dexFile, @utf8InCpp String instructionSet,
@nullable @utf8InCpp String classLoaderContext, @utf8InCpp String compilerFilter,
diff --git a/artd/binder/com/android/server/art/OutputArtifacts.aidl b/artd/binder/com/android/server/art/OutputArtifacts.aidl
index af3e3ce..9a53965 100644
--- a/artd/binder/com/android/server/art/OutputArtifacts.aidl
+++ b/artd/binder/com/android/server/art/OutputArtifacts.aidl
@@ -17,7 +17,7 @@
package com.android.server.art;
/**
- * Represents output optimized artifacts of a dex file (i.e., ART, OAT, and VDEX files).
+ * Represents output dexopt artifacts of a dex file (i.e., ART, OAT, and VDEX files).
*
* @hide
*/
diff --git a/libartservice/service/api/system-server-current.txt b/libartservice/service/api/system-server-current.txt
index cd56727..bd76173 100644
--- a/libartservice/service/api/system-server-current.txt
+++ b/libartservice/service/api/system-server-current.txt
@@ -4,26 +4,26 @@
public final class ArtManagerLocal {
ctor @Deprecated public ArtManagerLocal();
ctor public ArtManagerLocal(@NonNull android.content.Context);
- method public void addOptimizePackageDoneCallback(boolean, @NonNull java.util.concurrent.Executor, @NonNull com.android.server.art.ArtManagerLocal.OptimizePackageDoneCallback);
+ 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 clearOptimizePackagesCallback();
+ method public void clearBatchDexoptStartCallback();
method public void clearScheduleBackgroundDexoptJobCallback();
- method @NonNull public com.android.server.art.model.DeleteResult deleteOptimizedArtifacts(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
- method @NonNull public com.android.server.art.model.DeleteResult deleteOptimizedArtifacts(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, int);
+ 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);
method public void dumpPackage(@NonNull java.io.PrintWriter, @NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
- method @NonNull public com.android.server.art.model.OptimizationStatus getOptimizationStatus(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
- method @NonNull public com.android.server.art.model.OptimizationStatus getOptimizationStatus(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, int);
+ method @NonNull public com.android.server.art.model.DexoptStatus getDexoptStatus(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String);
+ method @NonNull public com.android.server.art.model.DexoptStatus getDexoptStatus(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, int);
method public int handleShellCommand(@NonNull android.os.Binder, @NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull String[]);
method public void onBoot(@NonNull String, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<com.android.server.art.model.OperationProgress>);
- method @NonNull public com.android.server.art.model.OptimizeResult optimizePackage(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull com.android.server.art.model.OptimizeParams);
- method @NonNull public com.android.server.art.model.OptimizeResult optimizePackage(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull com.android.server.art.model.OptimizeParams, @NonNull android.os.CancellationSignal);
method public void printShellCommandHelp(@NonNull java.io.PrintWriter);
- method public void removeOptimizePackageDoneCallback(@NonNull com.android.server.art.ArtManagerLocal.OptimizePackageDoneCallback);
+ method public void removeDexoptDoneCallback(@NonNull com.android.server.art.ArtManagerLocal.DexoptDoneCallback);
method public int scheduleBackgroundDexoptJob();
- method public void setOptimizePackagesCallback(@NonNull java.util.concurrent.Executor, @NonNull com.android.server.art.ArtManagerLocal.OptimizePackagesCallback);
+ method public void setBatchDexoptStartCallback(@NonNull java.util.concurrent.Executor, @NonNull com.android.server.art.ArtManagerLocal.BatchDexoptStartCallback);
method public void setScheduleBackgroundDexoptJobCallback(@NonNull java.util.concurrent.Executor, @NonNull com.android.server.art.ArtManagerLocal.ScheduleBackgroundDexoptJobCallback);
method @NonNull public android.os.ParcelFileDescriptor snapshotAppProfile(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @Nullable String) throws com.android.server.art.ArtManagerLocal.SnapshotProfileException;
method @NonNull public android.os.ParcelFileDescriptor snapshotBootImageProfile(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot) throws com.android.server.art.ArtManagerLocal.SnapshotProfileException;
@@ -31,12 +31,12 @@
method public void unscheduleBackgroundDexoptJob();
}
- public static interface ArtManagerLocal.OptimizePackageDoneCallback {
- method public void onOptimizePackageDone(@NonNull com.android.server.art.model.OptimizeResult);
+ public static interface ArtManagerLocal.BatchDexoptStartCallback {
+ method public void onBatchDexoptStart(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull com.android.server.art.model.BatchDexoptParams.Builder, @NonNull android.os.CancellationSignal);
}
- public static interface ArtManagerLocal.OptimizePackagesCallback {
- method public void onOptimizePackagesStart(@NonNull com.android.server.pm.PackageManagerLocal.FilteredSnapshot, @NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull com.android.server.art.model.BatchOptimizeParams.Builder, @NonNull android.os.CancellationSignal);
+ public static interface ArtManagerLocal.DexoptDoneCallback {
+ method public void onDexoptDone(@NonNull com.android.server.art.model.DexoptResult);
}
public static interface ArtManagerLocal.ScheduleBackgroundDexoptJobCallback {
@@ -97,15 +97,15 @@
field public static final int SCHEDULE_SUCCESS = 0; // 0x0
}
- public abstract class BatchOptimizeParams {
- method @NonNull public abstract com.android.server.art.model.OptimizeParams getOptimizeParams();
+ public abstract class BatchDexoptParams {
+ method @NonNull public abstract com.android.server.art.model.DexoptParams getDexoptParams();
method @NonNull public abstract java.util.List<java.lang.String> getPackages();
}
- public static final class BatchOptimizeParams.Builder {
- method @NonNull public com.android.server.art.model.BatchOptimizeParams build();
- method @NonNull public com.android.server.art.model.BatchOptimizeParams.Builder setOptimizeParams(@NonNull com.android.server.art.model.OptimizeParams);
- method @NonNull public com.android.server.art.model.BatchOptimizeParams.Builder setPackages(@NonNull java.util.List<java.lang.String>);
+ public static final class BatchDexoptParams.Builder {
+ method @NonNull public com.android.server.art.model.BatchDexoptParams build();
+ method @NonNull public com.android.server.art.model.BatchDexoptParams.Builder setDexoptParams(@NonNull com.android.server.art.model.DexoptParams);
+ method @NonNull public com.android.server.art.model.BatchDexoptParams.Builder setPackages(@NonNull java.util.List<java.lang.String>);
}
public abstract class DeleteResult {
@@ -118,25 +118,7 @@
method @NonNull public abstract android.os.UserHandle getUserHandle();
}
- public abstract class OperationProgress {
- method public int getPercentage();
- }
-
- public abstract class OptimizationStatus {
- method @NonNull public abstract java.util.List<com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus> getDexContainerFileOptimizationStatuses();
- }
-
- 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();
- method public abstract boolean isPrimaryDex();
- }
-
- public class OptimizeParams {
+ public class DexoptParams {
method @NonNull public String getCompilerFilter();
method public int getFlags();
method public int getPriorityClass();
@@ -145,29 +127,29 @@
field public static final String COMPILER_FILTER_NOOP = "skip";
}
- public static final class OptimizeParams.Builder {
- ctor public OptimizeParams.Builder(@NonNull String);
- ctor public OptimizeParams.Builder(@NonNull String, int);
- method @NonNull public com.android.server.art.model.OptimizeParams build();
- method @NonNull public com.android.server.art.model.OptimizeParams.Builder setCompilerFilter(@NonNull String);
- method @NonNull public com.android.server.art.model.OptimizeParams.Builder setFlags(int);
- method @NonNull public com.android.server.art.model.OptimizeParams.Builder setFlags(int, int);
- method @NonNull public com.android.server.art.model.OptimizeParams.Builder setPriorityClass(int);
- method @NonNull public com.android.server.art.model.OptimizeParams.Builder setSplitName(@Nullable String);
+ public static final class DexoptParams.Builder {
+ ctor public DexoptParams.Builder(@NonNull String);
+ ctor public DexoptParams.Builder(@NonNull String, int);
+ method @NonNull public com.android.server.art.model.DexoptParams build();
+ method @NonNull public com.android.server.art.model.DexoptParams.Builder setCompilerFilter(@NonNull String);
+ method @NonNull public com.android.server.art.model.DexoptParams.Builder setFlags(int);
+ method @NonNull public com.android.server.art.model.DexoptParams.Builder setFlags(int, int);
+ method @NonNull public com.android.server.art.model.DexoptParams.Builder setPriorityClass(int);
+ method @NonNull public com.android.server.art.model.DexoptParams.Builder setSplitName(@Nullable String);
}
- public abstract class OptimizeResult {
+ public abstract class DexoptResult {
method public int getFinalStatus();
- method @NonNull public abstract java.util.List<com.android.server.art.model.OptimizeResult.PackageOptimizeResult> getPackageOptimizeResults();
+ method @NonNull public abstract java.util.List<com.android.server.art.model.DexoptResult.PackageDexoptResult> getPackageDexoptResults();
method @NonNull public abstract String getReason();
method @NonNull public abstract String getRequestedCompilerFilter();
- field public static final int OPTIMIZE_CANCELLED = 40; // 0x28
- field public static final int OPTIMIZE_FAILED = 30; // 0x1e
- field public static final int OPTIMIZE_PERFORMED = 20; // 0x14
- field public static final int OPTIMIZE_SKIPPED = 10; // 0xa
+ field public static final int DEXOPT_CANCELLED = 40; // 0x28
+ field public static final int DEXOPT_FAILED = 30; // 0x1e
+ field public static final int DEXOPT_PERFORMED = 20; // 0x14
+ field public static final int DEXOPT_SKIPPED = 10; // 0xa
}
- public abstract static class OptimizeResult.DexContainerFileOptimizeResult {
+ public abstract static class DexoptResult.DexContainerFileDexoptResult {
method @NonNull public abstract String getAbi();
method @NonNull public abstract String getActualCompilerFilter();
method public abstract long getDex2oatCpuTimeMillis();
@@ -179,12 +161,30 @@
method public abstract boolean isPrimaryAbi();
}
- public abstract static class OptimizeResult.PackageOptimizeResult {
- method @NonNull public abstract java.util.List<com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult> getDexContainerFileOptimizeResults();
+ public abstract static class DexoptResult.PackageDexoptResult {
+ method @NonNull public abstract java.util.List<com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult> getDexContainerFileDexoptResults();
method @NonNull public abstract String getPackageName();
method public int getStatus();
method public boolean hasUpdatedArtifacts();
}
+ public abstract class DexoptStatus {
+ method @NonNull public abstract java.util.List<com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus> getDexContainerFileDexoptStatuses();
+ }
+
+ public abstract static class DexoptStatus.DexContainerFileDexoptStatus {
+ 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();
+ method public abstract boolean isPrimaryDex();
+ }
+
+ public abstract class OperationProgress {
+ method public int getPercentage();
+ }
+
}
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index 12111c9..e904972 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -19,7 +19,7 @@
import static com.android.server.art.DexUseManagerLocal.SecondaryDexInfo;
import static com.android.server.art.PrimaryDexUtils.DetailedPrimaryDexInfo;
import static com.android.server.art.PrimaryDexUtils.PrimaryDexInfo;
-import static com.android.server.art.ReasonMapping.BatchOptimizeReason;
+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;
@@ -27,7 +27,7 @@
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;
-import static com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus;
+import static com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus;
import android.R;
import android.annotation.CallbackExecutor;
@@ -54,13 +54,13 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.LocalManagerRegistry;
import com.android.server.art.model.ArtFlags;
-import com.android.server.art.model.BatchOptimizeParams;
+import com.android.server.art.model.BatchDexoptParams;
import com.android.server.art.model.Config;
import com.android.server.art.model.DeleteResult;
+import com.android.server.art.model.DexoptParams;
+import com.android.server.art.model.DexoptResult;
+import com.android.server.art.model.DexoptStatus;
import com.android.server.art.model.OperationProgress;
-import com.android.server.art.model.OptimizationStatus;
-import com.android.server.art.model.OptimizeParams;
-import com.android.server.art.model.OptimizeResult;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.AndroidPackageSplit;
@@ -149,7 +149,7 @@
}
/**
- * Deletes optimized artifacts of a package.
+ * Deletes dexopt artifacts of a package.
*
* Uses the default flags ({@link ArtFlags#defaultDeleteFlags()}).
*
@@ -158,18 +158,18 @@
* (e.g., an internal logic error).
*/
@NonNull
- public DeleteResult deleteOptimizedArtifacts(
+ public DeleteResult deleteDexoptArtifacts(
@NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName) {
- return deleteOptimizedArtifacts(snapshot, packageName, ArtFlags.defaultDeleteFlags());
+ return deleteDexoptArtifacts(snapshot, packageName, ArtFlags.defaultDeleteFlags());
}
/**
* Same as above, but allows to specify flags.
*
- * @see #deleteOptimizedArtifacts(PackageManagerLocal.FilteredSnapshot, String)
+ * @see #deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String)
*/
@NonNull
- public DeleteResult deleteOptimizedArtifacts(
+ public DeleteResult deleteDexoptArtifacts(
@NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName,
@DeleteFlags int flags) {
if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) == 0
@@ -215,7 +215,7 @@
}
/**
- * Returns the optimization status of a package.
+ * Returns the dexopt status of a package.
*
* Uses the default flags ({@link ArtFlags#defaultGetStatusFlags()}).
*
@@ -224,20 +224,19 @@
* (e.g., an internal logic error).
*/
@NonNull
- public OptimizationStatus getOptimizationStatus(
+ public DexoptStatus getDexoptStatus(
@NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName) {
- return getOptimizationStatus(snapshot, packageName, ArtFlags.defaultGetStatusFlags());
+ return getDexoptStatus(snapshot, packageName, ArtFlags.defaultGetStatusFlags());
}
/**
* Same as above, but allows to specify flags.
*
- * @see #getOptimizationStatus(PackageManagerLocal.FilteredSnapshot, String)
+ * @see #getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String)
*/
@NonNull
- public OptimizationStatus getOptimizationStatus(
- @NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName,
- @GetStatusFlags int flags) {
+ public DexoptStatus getDexoptStatus(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull String packageName, @GetStatusFlags int flags) {
if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) == 0
&& (flags & ArtFlags.FLAG_FOR_SECONDARY_DEX) == 0) {
throw new IllegalArgumentException("Nothing to check");
@@ -247,7 +246,7 @@
AndroidPackage pkg = Utils.getPackageOrThrow(pkgState);
try {
- List<DexContainerFileOptimizationStatus> statuses = new ArrayList<>();
+ List<DexContainerFileDexoptStatus> statuses = new ArrayList<>();
if ((flags & ArtFlags.FLAG_FOR_PRIMARY_DEX) != 0) {
for (DetailedPrimaryDexInfo dexInfo :
@@ -257,17 +256,16 @@
}
for (Abi abi : Utils.getAllAbis(pkgState)) {
try {
- GetOptimizationStatusResult result =
- mInjector.getArtd().getOptimizationStatus(dexInfo.dexPath(),
- abi.isa(), dexInfo.classLoaderContext());
- statuses.add(DexContainerFileOptimizationStatus.create(
- dexInfo.dexPath(), true /* isPrimaryDex */, abi.isPrimaryAbi(),
- abi.name(), result.compilerFilter, result.compilationReason,
+ GetDexoptStatusResult result = mInjector.getArtd().getDexoptStatus(
+ dexInfo.dexPath(), abi.isa(), dexInfo.classLoaderContext());
+ statuses.add(DexContainerFileDexoptStatus.create(dexInfo.dexPath(),
+ true /* isPrimaryDex */, abi.isPrimaryAbi(), abi.name(),
+ result.compilerFilter, result.compilationReason,
result.locationDebugString));
} catch (ServiceSpecificException e) {
- statuses.add(DexContainerFileOptimizationStatus.create(
- dexInfo.dexPath(), true /* isPrimaryDex */, abi.isPrimaryAbi(),
- abi.name(), "error", "error", e.getMessage()));
+ statuses.add(DexContainerFileDexoptStatus.create(dexInfo.dexPath(),
+ true /* isPrimaryDex */, abi.isPrimaryAbi(), abi.name(),
+ "error", "error", e.getMessage()));
}
}
}
@@ -278,23 +276,22 @@
mInjector.getDexUseManager().getSecondaryDexInfo(packageName)) {
for (Abi abi : Utils.getAllAbisForNames(dexInfo.abiNames(), pkgState)) {
try {
- GetOptimizationStatusResult result =
- mInjector.getArtd().getOptimizationStatus(dexInfo.dexPath(),
- abi.isa(), dexInfo.classLoaderContext());
- statuses.add(DexContainerFileOptimizationStatus.create(
- dexInfo.dexPath(), false /* isPrimaryDex */, abi.isPrimaryAbi(),
- abi.name(), result.compilerFilter, result.compilationReason,
+ GetDexoptStatusResult result = mInjector.getArtd().getDexoptStatus(
+ dexInfo.dexPath(), abi.isa(), dexInfo.classLoaderContext());
+ statuses.add(DexContainerFileDexoptStatus.create(dexInfo.dexPath(),
+ false /* isPrimaryDex */, abi.isPrimaryAbi(), abi.name(),
+ result.compilerFilter, result.compilationReason,
result.locationDebugString));
} catch (ServiceSpecificException e) {
- statuses.add(DexContainerFileOptimizationStatus.create(
- dexInfo.dexPath(), false /* isPrimaryDex */, abi.isPrimaryAbi(),
- abi.name(), "error", "error", e.getMessage()));
+ statuses.add(DexContainerFileDexoptStatus.create(dexInfo.dexPath(),
+ false /* isPrimaryDex */, abi.isPrimaryAbi(), abi.name(),
+ "error", "error", e.getMessage()));
}
}
}
}
- return OptimizationStatus.create(statuses);
+ return DexoptStatus.create(statuses);
} catch (RemoteException e) {
throw new IllegalStateException("An error occurred when calling artd", e);
}
@@ -365,53 +362,52 @@
}
/**
- * Optimizes a package. The time this operation takes ranges from a few milliseconds to several
+ * Dexopts a package. The time this operation takes ranges from a few milliseconds to several
* minutes, depending on the params and the code size of the package.
*
* When this operation ends (either completed or cancelled), callbacks added by {@link
- * #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} are called.
+ * #addDexoptDoneCallback(Executor, DexoptDoneCallback)} are called.
*
* @throws IllegalArgumentException if the package is not found or the params are illegal
* @throws IllegalStateException if the operation encounters an error that should never happen
* (e.g., an internal logic error).
*/
@NonNull
- public OptimizeResult optimizePackage(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull String packageName, @NonNull OptimizeParams params) {
+ public DexoptResult dexoptPackage(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull String packageName, @NonNull DexoptParams params) {
var cancellationSignal = new CancellationSignal();
- return optimizePackage(snapshot, packageName, params, cancellationSignal);
+ return dexoptPackage(snapshot, packageName, params, cancellationSignal);
}
/**
* Same as above, but supports cancellation.
*
- * @see #optimizePackage(PackageManagerLocal.FilteredSnapshot, String, OptimizeParams)
+ * @see #dexoptPackage(PackageManagerLocal.FilteredSnapshot, String, DexoptParams)
*/
@NonNull
- public OptimizeResult optimizePackage(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull String packageName, @NonNull OptimizeParams params,
+ public DexoptResult dexoptPackage(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull String packageName, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
return mInjector.getDexOptHelper().dexopt(
snapshot, List.of(packageName), params, cancellationSignal, Runnable::run);
}
/**
- * Resets the optimization state of the package as if the package is newly installed.
+ * Resets the dexopt state of the package as if the package is newly installed.
*
* More specifically, it clears reference profiles, current profiles, and any code compiled from
* those local profiles. If there is an external profile (e.g., a cloud profile), the code
* compiled from that profile will be kept.
*
- * For secondary dex files, it also clears all optimized artifacts.
+ * For secondary dex files, it also clears all dexopt artifacts.
*
* @hide
*/
@NonNull
- public OptimizeResult resetOptimizationStatus(
- @NonNull PackageManagerLocal.FilteredSnapshot snapshot, @NonNull String packageName,
- @NonNull CancellationSignal cancellationSignal) {
+ public DexoptResult resetDexoptStatus(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull String packageName, @NonNull CancellationSignal cancellationSignal) {
// We must delete the artifacts for primary dex files beforehand rather than relying on
- // `optimizePackage` to replace them because:
+ // `dexoptPackage` to replace them because:
// - If dexopt is not needed after the deletion, then we shouldn't run dexopt at all. For
// example, when we have a DM file that contains a VDEX file but doesn't contain a cloud
// profile, this happens. Note that this is more about correctness rather than
@@ -419,27 +415,26 @@
// - We don't want the existing artifacts to affect dexopt. For example, the existing VDEX
// file should not be an input VDEX.
//
- // We delete the artifacts for secondary dex files and `optimizePackage` won't re-generate
- // them because `optimizePackage` for `REASON_INSTALL` is for primary dex only. This is
+ // We delete the artifacts for secondary dex files and `dexoptPackage` won't re-generate
+ // them because `dexoptPackage` for `REASON_INSTALL` is for primary dex only. This is
// intentional because secondary dex files are supposed to be unknown at install time.
- deleteOptimizedArtifacts(snapshot, packageName);
+ deleteDexoptArtifacts(snapshot, packageName);
clearAppProfiles(snapshot, packageName);
// Re-generate artifacts for primary dex files if needed.
- return optimizePackage(snapshot, packageName,
- new OptimizeParams.Builder(ReasonMapping.REASON_INSTALL).build(),
- cancellationSignal);
+ return dexoptPackage(snapshot, packageName,
+ new DexoptParams.Builder(ReasonMapping.REASON_INSTALL).build(), cancellationSignal);
}
/**
- * Runs batch optimization for the given reason.
+ * Runs batch dexopt for the given reason.
*
* This is called by ART Service automatically during boot / background dexopt.
*
* The list of packages and options are determined by {@code reason}, and can be overridden by
- * {@link #setOptimizePackagesCallback(Executor, OptimizePackagesCallback)}.
+ * {@link #setBatchDexoptStartCallback(Executor, BatchDexoptStartCallback)}.
*
- * The optimization is done in a thread pool. The number of packages being optimized
+ * The dexopt is done in a thread pool. The number of packages being dexopted
* simultaneously can be configured by system property {@code pm.dexopt.<reason>.concurrency}
* (e.g., {@code pm.dexopt.bg-dexopt.concurrency=4}), and the number of threads for each {@code
* dex2oat} invocation can be configured by system property {@code dalvik.vm.*dex2oat-threads}
@@ -449,7 +444,7 @@
* threads.
*
* When this operation ends (either completed or cancelled), callbacks added by {@link
- * #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} are called.
+ * #addDexoptDoneCallback(Executor, DexoptDoneCallback)} are called.
*
* If the storage is nearly low, and {@code reason} is {@link ReasonMapping#REASON_BG_DEXOPT},
* it may also downgrade some inactive packages to a less optimized compiler filter, specified
@@ -459,7 +454,7 @@
* is the Storage Manager's low space threshold plus {@link
* #DOWNGRADE_THRESHOLD_ABOVE_LOW_BYTES}. The concurrency can be configured by system property
* {@code pm.dexopt.inactive.concurrency}. The packages in the list provided by
- * {@link OptimizePackagesCallback} for {@link ReasonMapping#REASON_BG_DEXOPT} are never
+ * {@link BatchDexoptStartCallback} for {@link ReasonMapping#REASON_BG_DEXOPT} are never
* downgraded.
*
* @param snapshot the snapshot from {@link PackageManagerLocal} to operate on
@@ -469,31 +464,31 @@
* @param progressCallback called repeatedly whenever there is an update on the progress
* @throws IllegalStateException if the operation encounters an error that should never happen
* (e.g., an internal logic error), or the callback set by {@link
- * #setOptimizePackagesCallback(Executor, OptimizePackagesCallback)} provides invalid
+ * #setBatchDexoptStartCallback(Executor, BatchDexoptStartCallback)} provides invalid
* params.
*
* @hide
*/
@NonNull
- public OptimizeResult optimizePackages(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull @BatchOptimizeReason String reason,
+ public DexoptResult dexoptPackages(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull @BatchDexoptReason String reason,
@NonNull CancellationSignal cancellationSignal,
@Nullable @CallbackExecutor Executor progressCallbackExecutor,
@Nullable Consumer<OperationProgress> progressCallback) {
List<String> defaultPackages =
Collections.unmodifiableList(getDefaultPackages(snapshot, reason));
- OptimizeParams defaultOptimizeParams = new OptimizeParams.Builder(reason).build();
- var builder = new BatchOptimizeParams.Builder(defaultPackages, defaultOptimizeParams);
- Callback<OptimizePackagesCallback, Void> callback =
- mInjector.getConfig().getOptimizePackagesCallback();
+ DexoptParams defaultDexoptParams = new DexoptParams.Builder(reason).build();
+ var builder = new BatchDexoptParams.Builder(defaultPackages, defaultDexoptParams);
+ Callback<BatchDexoptStartCallback, Void> callback =
+ mInjector.getConfig().getBatchDexoptStartCallback();
if (callback != null) {
Utils.executeAndWait(callback.executor(), () -> {
- callback.get().onOptimizePackagesStart(
+ callback.get().onBatchDexoptStart(
snapshot, reason, defaultPackages, builder, cancellationSignal);
});
}
- BatchOptimizeParams params = builder.build();
- Utils.check(params.getOptimizeParams().getReason().equals(reason));
+ BatchDexoptParams params = builder.build();
+ Utils.check(params.getDexoptParams().getReason().equals(reason));
ExecutorService dexoptExecutor =
Executors.newFixedThreadPool(ReasonMapping.getConcurrencyForReason(reason));
@@ -503,9 +498,9 @@
new HashSet<>(params.getPackages()) /* excludedPackages */,
cancellationSignal, dexoptExecutor);
}
- Log.i(TAG, "Optimizing packages");
+ Log.i(TAG, "Dexopting packages");
return mInjector.getDexOptHelper().dexopt(snapshot, params.getPackages(),
- params.getOptimizeParams(), cancellationSignal, dexoptExecutor,
+ params.getDexoptParams(), cancellationSignal, dexoptExecutor,
progressCallbackExecutor, progressCallback);
} finally {
dexoptExecutor.shutdown();
@@ -513,26 +508,26 @@
}
/**
- * Overrides the default params for {@link #optimizePackages}. This method is thread-safe.
+ * Overrides the default params for {@link #dexoptPackages}. This method is thread-safe.
*
- * This method gives users the opportunity to change the behavior of {@link #optimizePackages},
+ * This method gives users the opportunity to change the behavior of {@link #dexoptPackages},
* which is called by ART Service automatically during boot / background dexopt.
*
* If this method is not called, the default list of packages and options determined by {@code
* reason} will be used.
*/
- public void setOptimizePackagesCallback(@NonNull @CallbackExecutor Executor executor,
- @NonNull OptimizePackagesCallback callback) {
- mInjector.getConfig().setOptimizePackagesCallback(executor, callback);
+ public void setBatchDexoptStartCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull BatchDexoptStartCallback callback) {
+ mInjector.getConfig().setBatchDexoptStartCallback(executor, callback);
}
/**
* Clears the callback set by {@link
- * #setOptimizePackagesCallback(Executor, OptimizePackagesCallback)}. This method is
+ * #setBatchDexoptStartCallback(Executor, BatchDexoptStartCallback)}. This method is
* thread-safe.
*/
- public void clearOptimizePackagesCallback() {
- mInjector.getConfig().clearOptimizePackagesCallback();
+ public void clearBatchDexoptStartCallback() {
+ mInjector.getConfig().clearBatchDexoptStartCallback();
}
/**
@@ -560,10 +555,10 @@
* window</i>. For information about <i>maintenance window</i>, see
* https://developer.android.com/training/monitoring-device-state/doze-standby.
*
- * See {@link #optimizePackages} for how to customize the behavior of the job.
+ * See {@link #dexoptPackages} for how to customize the behavior of the job.
*
* When the job ends (either completed or cancelled), the result is sent to the callbacks added
- * by {@link #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} with the
+ * by {@link #addDexoptDoneCallback(Executor, DexoptDoneCallback)} with the
* reason {@link ReasonMapping#REASON_BG_DEXOPT}.
*/
public @ScheduleStatus int scheduleBackgroundDexoptJob() {
@@ -578,8 +573,8 @@
*
* If the job is already started by the job scheduler and is running, it will be cancelled
* immediately, and the result sent to the callbacks added by {@link
- * #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} will contain {@link
- * OptimizeResult#OPTIMIZE_CANCELLED}. Note that a job started by {@link
+ * #addDexoptDoneCallback(Executor, DexoptDoneCallback)} will contain {@link
+ * DexoptResult#DEXOPT_CANCELLED}. Note that a job started by {@link
* #startBackgroundDexoptJob()} will not be cancelled by this method.
*/
public void unscheduleBackgroundDexoptJob() {
@@ -611,10 +606,10 @@
* constraints described in {@link #scheduleBackgroundDexoptJob()}, and hence will not be
* cancelled when they aren't met.
*
- * See {@link #optimizePackages} for how to customize the behavior of the job.
+ * See {@link #dexoptPackages} for how to customize the behavior of the job.
*
* When the job ends (either completed or cancelled), the result is sent to the callbacks added
- * by {@link #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} with the
+ * by {@link #addDexoptDoneCallback(Executor, DexoptDoneCallback)} with the
* reason {@link ReasonMapping#REASON_BG_DEXOPT}.
*/
public void startBackgroundDexoptJob() {
@@ -627,15 +622,15 @@
* blocking.
*
* The result sent to the callbacks added by {@link
- * #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)} will contain {@link
- * OptimizeResult#OPTIMIZE_CANCELLED}.
+ * #addDexoptDoneCallback(Executor, DexoptDoneCallback)} will contain {@link
+ * DexoptResult#DEXOPT_CANCELLED}.
*/
public void cancelBackgroundDexoptJob() {
mInjector.getBackgroundDexOptJob().cancel();
}
/**
- * Adds a global listener that listens to any result of optimizing package(s), no matter run
+ * Adds a global listener that listens to any result of dexopting package(s), no matter run
* manually or automatically. Calling this method multiple times with different callbacks is
* allowed. Callbacks are executed in the same order as the one in which they were added. This
* method is thread-safe.
@@ -645,20 +640,18 @@
* don't have any update.
* @throws IllegalStateException if the same callback instance is already added
*/
- public void addOptimizePackageDoneCallback(boolean onlyIncludeUpdates,
- @NonNull @CallbackExecutor Executor executor,
- @NonNull OptimizePackageDoneCallback callback) {
- mInjector.getConfig().addOptimizePackageDoneCallback(
- onlyIncludeUpdates, executor, callback);
+ public void addDexoptDoneCallback(boolean onlyIncludeUpdates,
+ @NonNull @CallbackExecutor Executor executor, @NonNull DexoptDoneCallback callback) {
+ mInjector.getConfig().addDexoptDoneCallback(onlyIncludeUpdates, executor, callback);
}
/**
* Removes the listener added by {@link
- * #addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)}. Does nothing if the
+ * #addDexoptDoneCallback(Executor, DexoptDoneCallback)}. Does nothing if the
* callback was not added. This method is thread-safe.
*/
- public void removeOptimizePackageDoneCallback(@NonNull OptimizePackageDoneCallback callback) {
- mInjector.getConfig().removeOptimizePackageDoneCallback(callback);
+ public void removeDexoptDoneCallback(@NonNull DexoptDoneCallback callback) {
+ mInjector.getConfig().removeDexoptDoneCallback(callback);
}
/**
@@ -753,7 +746,7 @@
snapshot.getPackageStates().forEach((packageName, appPkgState) -> {
// Hibernating apps can still provide useful profile contents, so skip the hibernation
// check.
- if (Utils.canOptimizePackage(appPkgState, null /* appHibernationManager */)) {
+ if (Utils.canDexoptPackage(appPkgState, null /* appHibernationManager */)) {
AndroidPackage appPkg = Utils.getPackageOrThrow(appPkgState);
for (PrimaryDexInfo appDexInfo : PrimaryDexUtils.getDexInfo(appPkg)) {
if (!appDexInfo.hasCode()) {
@@ -784,19 +777,19 @@
/**
* Notifies ART Service that this is a boot that falls into one of the categories listed in
* {@link BootReason}. The current behavior is that ART Service goes through all recently used
- * packages and optimizes those that are not optimized. This might change in the future.
+ * packages and dexopts those that are not dexopted. This might change in the future.
*
* This method is blocking. It takes about 30 seconds to a few minutes. During execution, {@code
* progressCallback} is repeatedly called whenever there is an update on the progress.
*
- * See {@link #optimizePackages} for how to customize the behavior.
+ * See {@link #dexoptPackages} for how to customize the behavior.
*/
public void onBoot(@NonNull @BootReason String bootReason,
@Nullable @CallbackExecutor Executor progressCallbackExecutor,
@Nullable Consumer<OperationProgress> progressCallback) {
try (var snapshot = mInjector.getPackageManagerLocal().withFilteredSnapshot()) {
- optimizePackages(snapshot, bootReason, new CancellationSignal(),
- progressCallbackExecutor, progressCallback);
+ dexoptPackages(snapshot, bootReason, new CancellationSignal(), progressCallbackExecutor,
+ progressCallback);
}
}
@@ -829,12 +822,12 @@
}
/**
- * Should be used by {@link BackgroundDexOptJobService} ONLY.
+ * Should be used by {@link BackgroundDexoptJobService} ONLY.
*
* @hide
*/
@NonNull
- BackgroundDexOptJob getBackgroundDexOptJob() {
+ BackgroundDexoptJob getBackgroundDexOptJob() {
return mInjector.getBackgroundDexOptJob();
}
@@ -849,7 +842,7 @@
if (!packages.isEmpty()) {
Log.i(TAG, "Storage is low. Downgrading inactive packages");
mInjector.getDexOptHelper().dexopt(snapshot, packages,
- new OptimizeParams.Builder(ReasonMapping.REASON_INACTIVE).build(),
+ new DexoptParams.Builder(ReasonMapping.REASON_INACTIVE).build(),
cancellationSignal, executor, null /* processCallbackExecutor */,
null /* progressCallback */);
} else {
@@ -877,8 +870,7 @@
// Filter out hibernating packages even if the reason is REASON_INACTIVE. This is because
// artifacts for hibernating packages are already deleted.
Stream<PackageState> packages = snapshot.getPackageStates().values().stream().filter(
- pkgState
- -> Utils.canOptimizePackage(pkgState, mInjector.getAppHibernationManager()));
+ pkgState -> Utils.canDexoptPackage(pkgState, mInjector.getAppHibernationManager()));
switch (reason) {
case ReasonMapping.REASON_BOOT_AFTER_MAINLINE_UPDATE:
packages = packages.filter(
@@ -901,7 +893,7 @@
private Stream<PackageState> filterAndSortByLastActiveTime(
@NonNull Stream<PackageState> packages, boolean keepRecent, boolean descending) {
// "pm.dexopt.downgrade_after_inactive_days" is repurposed to also determine whether to
- // optimize a package.
+ // dexopt a package.
long inactiveMs = TimeUnit.DAYS.toMillis(SystemProperties.getInt(
"pm.dexopt.downgrade_after_inactive_days", Integer.MAX_VALUE /* def */));
long currentTimeMs = mInjector.getCurrentTimeMillis();
@@ -954,19 +946,19 @@
/** @hide */
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- public interface OptimizePackagesCallback {
+ public interface BatchDexoptStartCallback {
/**
- * Mutates {@code builder} to override the default params for {@link #optimizePackages}. It
+ * Mutates {@code builder} to override the default params for {@link #dexoptPackages}. It
* must ignore unknown reasons because more reasons may be added in the future.
*
- * This is called before the start of any automatic package optimization (i.e., not
- * including package optimization initiated by the {@link #optimizePackage} API call).
+ * This is called before the start of any automatic package dexopt (i.e., not
+ * including package dexopt initiated by the {@link #dexoptPackage} API call).
*
* If {@code builder.setPackages} is not called, {@code defaultPackages} will be used as the
- * list of packages to optimize.
+ * list of packages to dexopt.
*
- * If {@code builder.setOptimizeParams} is not called, the default params built from {@code
- * new OptimizeParams.Builder(reason)} will to used as the params for optimizing each
+ * If {@code builder.setDexoptParams} is not called, the default params built from {@code
+ * new DexoptParams.Builder(reason)} will to used as the params for dexopting each
* package.
*
* Additionally, {@code cancellationSignal.cancel()} can be called to cancel this operation.
@@ -976,11 +968,11 @@
* https://developer.android.com/training/monitoring-device-state/doze-standby.
*
* Changing the reason is not allowed. Doing so will result in {@link IllegalStateException}
- * when {@link #optimizePackages} is called.
+ * when {@link #dexoptPackages} is called.
*/
- void onOptimizePackagesStart(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull @BatchOptimizeReason String reason, @NonNull List<String> defaultPackages,
- @NonNull BatchOptimizeParams.Builder builder,
+ void onBatchDexoptStart(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull @BatchDexoptReason String reason, @NonNull List<String> defaultPackages,
+ @NonNull BatchDexoptParams.Builder builder,
@NonNull CancellationSignal cancellationSignal);
}
@@ -997,9 +989,9 @@
* Setting {@link JobInfo.Builder#setRequiresStorageNotLow(boolean)} is not allowed. Doing
* so will result in {@link IllegalStateException} when {@link
* #scheduleBackgroundDexoptJob()} is called. ART Service has its own storage check, which
- * skips package optimization when the storage is low. The storage check is enabled by
+ * skips package dexopt when the storage is low. The storage check is enabled by
* default for background dexopt jobs. {@link
- * #setOptimizePackagesCallback(Executor, OptimizePackagesCallback)} can be used to disable
+ * #setBatchDexoptStartCallback(Executor, BatchDexoptStartCallback)} can be used to disable
* the storage check by clearing the {@link ArtFlags#FLAG_SKIP_IF_STORAGE_LOW} flag.
*/
void onOverrideJobInfo(@NonNull JobInfo.Builder builder);
@@ -1007,8 +999,8 @@
/** @hide */
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- public interface OptimizePackageDoneCallback {
- void onOptimizePackageDone(@NonNull OptimizeResult result);
+ public interface DexoptDoneCallback {
+ void onDexoptDone(@NonNull DexoptResult result);
}
/**
@@ -1033,7 +1025,7 @@
@Nullable private final Context mContext;
@Nullable private final PackageManagerLocal mPackageManagerLocal;
@Nullable private final Config mConfig;
- @Nullable private final BackgroundDexOptJob mBgDexOptJob;
+ @Nullable private final BackgroundDexoptJob mBgDexOptJob;
Injector(@NonNull ArtManagerLocal artManagerLocal, @Nullable Context context) {
mContext = context;
@@ -1042,7 +1034,7 @@
mPackageManagerLocal = Objects.requireNonNull(
LocalManagerRegistry.getManager(PackageManagerLocal.class));
mConfig = new Config();
- mBgDexOptJob = new BackgroundDexOptJob(context, artManagerLocal, mConfig);
+ mBgDexOptJob = new BackgroundDexoptJob(context, artManagerLocal, mConfig);
// Call the getters for various dependencies, to ensure correct initialization
// order.
@@ -1075,8 +1067,8 @@
}
@NonNull
- public DexOptHelper getDexOptHelper() {
- return new DexOptHelper(getContext(), getConfig());
+ public DexoptHelper getDexOptHelper() {
+ return new DexoptHelper(getContext(), getConfig());
}
@NonNull
@@ -1090,7 +1082,7 @@
}
@NonNull
- public BackgroundDexOptJob getBackgroundDexOptJob() {
+ public BackgroundDexoptJob getBackgroundDexOptJob() {
return Objects.requireNonNull(mBgDexOptJob);
}
diff --git a/libartservice/service/java/com/android/server/art/ArtShellCommand.java b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
index 923b404..79d5edb 100644
--- a/libartservice/service/java/com/android/server/art/ArtShellCommand.java
+++ b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
@@ -20,11 +20,11 @@
import static com.android.server.art.ArtManagerLocal.SnapshotProfileException;
import static com.android.server.art.PrimaryDexUtils.PrimaryDexInfo;
-import static com.android.server.art.model.ArtFlags.OptimizeFlags;
-import static com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
-import static com.android.server.art.model.OptimizeResult.OptimizeStatus;
-import static com.android.server.art.model.OptimizeResult.PackageOptimizeResult;
+import static com.android.server.art.model.ArtFlags.DexoptFlags;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
+import static com.android.server.art.model.DexoptResult.DexoptResultStatus;
+import static com.android.server.art.model.DexoptResult.PackageDexoptResult;
+import static com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus;
import android.annotation.NonNull;
import android.os.Binder;
@@ -43,10 +43,10 @@
import com.android.modules.utils.BasicShellCommandHandler;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.DeleteResult;
+import com.android.server.art.model.DexoptParams;
+import com.android.server.art.model.DexoptResult;
+import com.android.server.art.model.DexoptStatus;
import com.android.server.art.model.OperationProgress;
-import com.android.server.art.model.OptimizationStatus;
-import com.android.server.art.model.OptimizeParams;
-import com.android.server.art.model.OptimizeResult;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -126,22 +126,22 @@
enforceRoot();
String subcmd = getNextArgRequired();
switch (subcmd) {
- case "delete-optimized-artifacts": {
- DeleteResult result = mArtManagerLocal.deleteOptimizedArtifacts(
+ case "delete-dexopt-artifacts": {
+ DeleteResult result = mArtManagerLocal.deleteDexoptArtifacts(
snapshot, getNextArgRequired(), ArtFlags.defaultDeleteFlags());
pw.printf("Freed %d bytes\n", result.getFreedBytes());
return 0;
}
- case "get-optimization-status": {
- OptimizationStatus optimizationStatus = mArtManagerLocal.getOptimizationStatus(
+ case "get-dexopt-status": {
+ DexoptStatus dexoptStatus = mArtManagerLocal.getDexoptStatus(
snapshot, getNextArgRequired(), ArtFlags.defaultGetStatusFlags());
- pw.println(optimizationStatus);
+ pw.println(dexoptStatus);
return 0;
}
- case "optimize-package": {
- var paramsBuilder = new OptimizeParams.Builder("cmdline");
+ case "dexopt-package": {
+ var paramsBuilder = new DexoptParams.Builder("cmdline");
String opt;
- @OptimizeFlags int scopeFlags = 0;
+ @DexoptFlags int scopeFlags = 0;
boolean forSingleSplit = false;
boolean reset = false;
while ((opt = getNextOption()) != null) {
@@ -192,30 +192,30 @@
| ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES);
}
- OptimizeResult result;
+ DexoptResult result;
try (var signal = new WithCancellationSignal(pw)) {
if (reset) {
- result = mArtManagerLocal.resetOptimizationStatus(
+ result = mArtManagerLocal.resetDexoptStatus(
snapshot, getNextArgRequired(), signal.get());
} else {
- result = mArtManagerLocal.optimizePackage(snapshot, getNextArgRequired(),
+ result = mArtManagerLocal.dexoptPackage(snapshot, getNextArgRequired(),
paramsBuilder.build(), signal.get());
}
}
- printOptimizeResult(pw, result);
+ printDexoptResult(pw, result);
return 0;
}
- case "optimize-packages": {
- OptimizeResult result;
+ case "dexopt-packages": {
+ DexoptResult result;
ExecutorService executor = Executors.newSingleThreadExecutor();
try (var signal = new WithCancellationSignal(pw)) {
- result = mArtManagerLocal.optimizePackages(
+ result = mArtManagerLocal.dexoptPackages(
snapshot, getNextArgRequired(), signal.get(), executor, progress -> {
pw.println(String.format(
- "Optimizing apps: %d%%", progress.getPercentage()));
+ "Dexopting apps: %d%%", progress.getPercentage()));
pw.flush();
});
- Utils.executeAndWait(executor, () -> printOptimizeResult(pw, result));
+ Utils.executeAndWait(executor, () -> printDexoptResult(pw, result));
} finally {
executor.shutdown();
}
@@ -374,40 +374,40 @@
pw.println(" no stability guarantees for them.");
pw.println();
pw.println(" Supported sub-commands:");
- pw.println(" delete-optimized-artifacts PACKAGE_NAME");
- pw.println(" Delete the optimized artifacts of both primary dex files and secondary");
+ pw.println(" delete-dexopt-artifacts PACKAGE_NAME");
+ pw.println(" Delete the dexopt artifacts of both primary dex files and secondary");
pw.println(" dex files of a package.");
- pw.println(" get-optimization-status PACKAGE_NAME");
- pw.println(" Print the optimization status of both primary dex files and secondary dex");
+ pw.println(" get-dexopt-status PACKAGE_NAME");
+ pw.println(" Print the dexopt status of both primary dex files and secondary dex");
pw.println(" files of a package.");
- pw.println(" optimize-package [-m COMPILER_FILTER] [-f] [--primary-dex]");
+ pw.println(" dexopt-package [-m COMPILER_FILTER] [-f] [--primary-dex]");
pw.println(" [--secondary-dex] [--include-dependencies] [--split SPLIT_NAME]");
pw.println(" PACKAGE_NAME");
- pw.println(" Optimize a package.");
+ pw.println(" Dexopt a package.");
pw.println(" If none of '--primary-dex', '--secondary-dex', and");
- pw.println(" '--include-dependencies' is set, the command optimizes all of them.");
+ pw.println(" '--include-dependencies' is set, the command dexopts all of them.");
pw.println(" The command prints a job ID, which can be used to cancel the job using");
pw.println(" the 'cancel' command.");
pw.println(" Options:");
pw.println(" -m Set the compiler filter.");
pw.println(" -f Force compilation.");
- pw.println(" --primary-dex Optimize primary dex files.");
- pw.println(" --secondary-dex Optimize secondary dex files.");
+ pw.println(" --primary-dex Dexopt primary dex files.");
+ pw.println(" --secondary-dex Dexopt secondary dex files.");
pw.println(" --include-dependencies Include dependencies.");
- pw.println(" --split SPLIT_NAME Only optimize the given split. If SPLIT_NAME is an");
- pw.println(" empty string, only optimize the base APK. When this option is set,");
+ pw.println(" --split SPLIT_NAME Only dexopt the given split. If SPLIT_NAME is an");
+ pw.println(" empty string, only dexopt the base APK. When this option is set,");
pw.println(" '--primary-dex', '--secondary-dex', and '--include-dependencies' must");
pw.println(" not be set.");
- pw.println(" --reset Reset the optimization state of the package as if the package");
+ pw.println(" --reset Reset the dexopt state of the package as if the package");
pw.println(" is newly installed.");
pw.println(" More specifically, it clears reference profiles, current profiles,");
pw.println(" and any code compiled from those local profiles. If there is an");
pw.println(" external profile (e.g., a cloud profile), the code compiled from that");
pw.println(" profile will be kept.");
- pw.println(" For secondary dex files, it also clears all optimized artifacts.");
+ pw.println(" For secondary dex files, it also clears all dexopt artifacts.");
pw.println(" When this flag is set, all the other flags are ignored.");
- pw.println(" optimize-packages REASON");
- pw.println(" Run batch optimization for the given reason.");
+ pw.println(" dexopt-packages REASON");
+ pw.println(" Run batch dexopt for the given reason.");
pw.println(" The command prints a job ID, which can be used to cancel the job using");
pw.println(" the 'cancel' command.");
pw.println(" cancel JOB_ID");
@@ -463,26 +463,26 @@
}
@NonNull
- private String optimizeStatusToString(@OptimizeStatus int status) {
+ private String dexoptResultStatusToString(@DexoptResultStatus int status) {
switch (status) {
- case OptimizeResult.OPTIMIZE_SKIPPED:
+ case DexoptResult.DEXOPT_SKIPPED:
return "SKIPPED";
- case OptimizeResult.OPTIMIZE_PERFORMED:
+ case DexoptResult.DEXOPT_PERFORMED:
return "PERFORMED";
- case OptimizeResult.OPTIMIZE_FAILED:
+ case DexoptResult.DEXOPT_FAILED:
return "FAILED";
- case OptimizeResult.OPTIMIZE_CANCELLED:
+ case DexoptResult.DEXOPT_CANCELLED:
return "CANCELLED";
}
- throw new IllegalArgumentException("Unknown optimize status " + status);
+ throw new IllegalArgumentException("Unknown dexopt status " + status);
}
- private void printOptimizeResult(@NonNull PrintWriter pw, @NonNull OptimizeResult result) {
- pw.println(optimizeStatusToString(result.getFinalStatus()));
- for (PackageOptimizeResult packageResult : result.getPackageOptimizeResults()) {
+ private void printDexoptResult(@NonNull PrintWriter pw, @NonNull DexoptResult result) {
+ pw.println(dexoptResultStatusToString(result.getFinalStatus()));
+ for (PackageDexoptResult packageResult : result.getPackageDexoptResults()) {
pw.printf("[%s]\n", packageResult.getPackageName());
- for (DexContainerFileOptimizeResult fileResult :
- packageResult.getDexContainerFileOptimizeResults()) {
+ for (DexContainerFileDexoptResult fileResult :
+ packageResult.getDexContainerFileDexoptResults()) {
pw.println(fileResult);
}
}
diff --git a/libartservice/service/java/com/android/server/art/BackgroundDexOptJob.java b/libartservice/service/java/com/android/server/art/BackgroundDexoptJob.java
similarity index 90%
rename from libartservice/service/java/com/android/server/art/BackgroundDexOptJob.java
rename to libartservice/service/java/com/android/server/art/BackgroundDexoptJob.java
index 0df9ace..9f03107 100644
--- a/libartservice/service/java/com/android/server/art/BackgroundDexOptJob.java
+++ b/libartservice/service/java/com/android/server/art/BackgroundDexoptJob.java
@@ -37,7 +37,7 @@
import com.android.server.LocalManagerRegistry;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.Config;
-import com.android.server.art.model.OptimizeResult;
+import com.android.server.art.model.DexoptResult;
import com.android.server.pm.PackageManagerLocal;
import com.google.auto.value.AutoValue;
@@ -47,8 +47,8 @@
import java.util.concurrent.TimeUnit;
/** @hide */
-public class BackgroundDexOptJob {
- private static final String TAG = "BackgroundDexOptJob";
+public class BackgroundDexoptJob {
+ private static final String TAG = "BackgroundDexoptJob";
/**
* "android" is the package name for a <service> declared in
@@ -66,19 +66,19 @@
@GuardedBy("this") @Nullable private CancellationSignal mCancellationSignal = null;
@GuardedBy("this") @NonNull private Optional<Integer> mLastStopReason = Optional.empty();
- public BackgroundDexOptJob(@NonNull Context context, @NonNull ArtManagerLocal artManagerLocal,
+ public BackgroundDexoptJob(@NonNull Context context, @NonNull ArtManagerLocal artManagerLocal,
@NonNull Config config) {
this(new Injector(context, artManagerLocal, config));
}
@VisibleForTesting
- public BackgroundDexOptJob(@NonNull Injector injector) {
+ public BackgroundDexoptJob(@NonNull Injector injector) {
mInjector = injector;
}
- /** Handles {@link BackgroundDexOptJobService#onStartJob(JobParameters)}. */
+ /** Handles {@link BackgroundDexoptJobService#onStartJob(JobParameters)}. */
public boolean onStartJob(
- @NonNull BackgroundDexOptJobService jobService, @NonNull JobParameters params) {
+ @NonNull BackgroundDexoptJobService jobService, @NonNull JobParameters params) {
start().thenAcceptAsync(result -> {
writeStats(result);
// This is a periodic job, where the interval is specified in the `JobInfo`. "true"
@@ -88,14 +88,14 @@
// This call will be ignored if `onStopJob` is called.
boolean wantsReschedule = result instanceof CompletedResult
&& ((CompletedResult) result).dexoptResult().getFinalStatus()
- == OptimizeResult.OPTIMIZE_CANCELLED;
+ == DexoptResult.DEXOPT_CANCELLED;
jobService.jobFinished(params, wantsReschedule);
});
// "true" means the job will continue running until `jobFinished` is called.
return true;
}
- /** Handles {@link BackgroundDexOptJobService#onStopJob(JobParameters)}. */
+ /** Handles {@link BackgroundDexoptJobService#onStopJob(JobParameters)}. */
public boolean onStopJob(@NonNull JobParameters params) {
synchronized (this) {
mLastStopReason = Optional.of(params.getStopReason());
@@ -108,7 +108,7 @@
/** Handles {@link ArtManagerLocal#scheduleBackgroundDexoptJob()}. */
public @ScheduleStatus int schedule() {
- if (this != BackgroundDexOptJobService.getJob()) {
+ if (this != BackgroundDexoptJobService.getJob()) {
throw new IllegalStateException("This job cannot be scheduled");
}
@@ -121,7 +121,7 @@
new JobInfo
.Builder(JOB_ID,
new ComponentName(
- JOB_PKG_NAME, BackgroundDexOptJobService.class.getName()))
+ JOB_PKG_NAME, BackgroundDexoptJobService.class.getName()))
.setPeriodic(JOB_INTERVAL_MS)
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
@@ -148,7 +148,7 @@
/** Handles {@link ArtManagerLocal#unscheduleBackgroundDexoptJob()}. */
public void unschedule() {
- if (this != BackgroundDexOptJobService.getJob()) {
+ if (this != BackgroundDexoptJobService.getJob()) {
throw new IllegalStateException("This job cannot be unscheduled");
}
@@ -197,9 +197,9 @@
// TODO(b/254013427): Cleanup dex use info.
// TODO(b/254013425): Cleanup unused secondary dex file artifacts.
long startTimeMs = SystemClock.uptimeMillis();
- OptimizeResult dexoptResult;
+ DexoptResult dexoptResult;
try (var snapshot = mInjector.getPackageManagerLocal().withFilteredSnapshot()) {
- dexoptResult = mInjector.getArtManagerLocal().optimizePackages(snapshot,
+ dexoptResult = mInjector.getArtManagerLocal().dexoptPackages(snapshot,
ReasonMapping.REASON_BG_DEXOPT, cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */);
}
@@ -225,7 +225,7 @@
}
private int getStatusForStats(@NonNull CompletedResult result, Optional<Integer> stopReason) {
- if (result.dexoptResult().getFinalStatus() == OptimizeResult.OPTIMIZE_CANCELLED) {
+ if (result.dexoptResult().getFinalStatus() == DexoptResult.DEXOPT_CANCELLED) {
if (stopReason.isPresent()) {
return ArtStatsLog
.BACKGROUND_DEXOPT_JOB_ENDED__STATUS__STATUS_ABORT_BY_CANCELLATION;
@@ -236,10 +236,10 @@
boolean isSkippedDueToStorageLow =
result.dexoptResult()
- .getPackageOptimizeResults()
+ .getPackageDexoptResults()
.stream()
.flatMap(packageResult
- -> packageResult.getDexContainerFileOptimizeResults().stream())
+ -> packageResult.getDexContainerFileDexoptResults().stream())
.anyMatch(fileResult -> fileResult.isSkippedDueToStorageLow());
if (isSkippedDueToStorageLow) {
return ArtStatsLog.BACKGROUND_DEXOPT_JOB_ENDED__STATUS__STATUS_ABORT_NO_SPACE_LEFT;
@@ -253,12 +253,12 @@
@AutoValue
static abstract class CompletedResult extends Result {
- abstract @NonNull OptimizeResult dexoptResult();
+ abstract @NonNull DexoptResult dexoptResult();
abstract long durationMs();
@NonNull
- static CompletedResult create(@NonNull OptimizeResult dexoptResult, long durationMs) {
- return new AutoValue_BackgroundDexOptJob_CompletedResult(dexoptResult, durationMs);
+ static CompletedResult create(@NonNull DexoptResult dexoptResult, long durationMs) {
+ return new AutoValue_BackgroundDexoptJob_CompletedResult(dexoptResult, durationMs);
}
}
diff --git a/libartservice/service/java/com/android/server/art/BackgroundDexOptJobService.java b/libartservice/service/java/com/android/server/art/BackgroundDexoptJobService.java
similarity index 92%
rename from libartservice/service/java/com/android/server/art/BackgroundDexOptJobService.java
rename to libartservice/service/java/com/android/server/art/BackgroundDexoptJobService.java
index 5ab35d5..5da7279 100644
--- a/libartservice/service/java/com/android/server/art/BackgroundDexOptJobService.java
+++ b/libartservice/service/java/com/android/server/art/BackgroundDexoptJobService.java
@@ -28,7 +28,7 @@
*
* @hide
*/
-public class BackgroundDexOptJobService extends JobService {
+public class BackgroundDexoptJobService extends JobService {
@Override
public boolean onStartJob(@NonNull JobParameters params) {
return getJob().onStartJob(this, params);
@@ -40,7 +40,7 @@
}
@NonNull
- static BackgroundDexOptJob getJob() {
+ static BackgroundDexoptJob getJob() {
return LocalManagerRegistry.getManager(ArtManagerLocal.class).getBackgroundDexOptJob();
}
}
diff --git a/libartservice/service/java/com/android/server/art/DexOptimizer.java b/libartservice/service/java/com/android/server/art/DexOptimizer.java
index b27a426..1cbe5db 100644
--- a/libartservice/service/java/com/android/server/art/DexOptimizer.java
+++ b/libartservice/service/java/com/android/server/art/DexOptimizer.java
@@ -20,8 +20,8 @@
import static com.android.server.art.OutputArtifacts.PermissionSettings;
import static com.android.server.art.ProfilePath.TmpProfilePath;
import static com.android.server.art.Utils.Abi;
-import static com.android.server.art.model.ArtFlags.OptimizeFlags;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
+import static com.android.server.art.model.ArtFlags.DexoptFlags;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import android.R;
import android.annotation.NonNull;
@@ -42,8 +42,8 @@
import com.android.server.LocalManagerRegistry;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.DetailedDexInfo;
-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.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -64,11 +64,11 @@
@NonNull protected final PackageState mPkgState;
/** This is always {@code mPkgState.getAndroidPackage()} and guaranteed to be non-null. */
@NonNull protected final AndroidPackage mPkg;
- @NonNull protected final OptimizeParams mParams;
+ @NonNull protected final DexoptParams mParams;
@NonNull protected final CancellationSignal mCancellationSignal;
protected DexOptimizer(@NonNull Injector injector, @NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
mInjector = injector;
mPkgState = pkgState;
@@ -83,23 +83,23 @@
/**
* DO NOT use this method directly. Use {@link
- * ArtManagerLocal#optimizePackage(PackageManagerLocal.FilteredSnapshot, String,
- * OptimizeParams)}.
+ * ArtManagerLocal#dexoptPackage(PackageManagerLocal.FilteredSnapshot, String,
+ * DexoptParams)}.
*/
@NonNull
- public final List<DexContainerFileOptimizeResult> dexopt() throws RemoteException {
- List<DexContainerFileOptimizeResult> results = new ArrayList<>();
+ public final List<DexContainerFileDexoptResult> dexopt() throws RemoteException {
+ List<DexContainerFileDexoptResult> results = new ArrayList<>();
for (DexInfoType dexInfo : getDexInfoList()) {
ProfilePath profile = null;
boolean succeeded = true;
try {
- if (!isOptimizable(dexInfo)) {
+ if (!isDexoptable(dexInfo)) {
continue;
}
String compilerFilter = adjustCompilerFilter(mParams.getCompilerFilter(), dexInfo);
- if (compilerFilter.equals(OptimizeParams.COMPILER_FILTER_NOOP)) {
+ if (compilerFilter.equals(DexoptParams.COMPILER_FILTER_NOOP)) {
continue;
}
@@ -127,7 +127,7 @@
}
}
if (profile == null) {
- // A profile guided optimization with no profile is essentially 'verify',
+ // A profile guided dexopt with no profile is essentially 'verify',
// and dex2oat already makes this transformation. However, we need to
// explicitly make this transformation here to guide the later decisions
// such as whether the artifacts can be public and whether dexopt is needed.
@@ -149,7 +149,7 @@
getDexoptOptions(dexInfo, isProfileGuidedCompilerFilter);
for (Abi abi : getAllAbis(dexInfo)) {
- @OptimizeResult.OptimizeStatus int status = OptimizeResult.OPTIMIZE_SKIPPED;
+ @DexoptResult.DexoptResultStatus int status = DexoptResult.DEXOPT_SKIPPED;
long wallTimeMs = 0;
long cpuTimeMs = 0;
long sizeBytes = 0;
@@ -204,17 +204,17 @@
}
});
- DexoptResult dexoptResult = dexoptFile(target, profile,
+ ArtdDexoptResult dexoptResult = dexoptFile(target, profile,
getDexoptNeededResult, permissionSettings,
mParams.getPriorityClass(), dexoptOptions, artdCancellationSignal);
- status = dexoptResult.cancelled ? OptimizeResult.OPTIMIZE_CANCELLED
- : OptimizeResult.OPTIMIZE_PERFORMED;
+ status = dexoptResult.cancelled ? DexoptResult.DEXOPT_CANCELLED
+ : DexoptResult.DEXOPT_PERFORMED;
wallTimeMs = dexoptResult.wallTimeMs;
cpuTimeMs = dexoptResult.cpuTimeMs;
sizeBytes = dexoptResult.sizeBytes;
sizeBeforeBytes = dexoptResult.sizeBeforeBytes;
- if (status == OptimizeResult.OPTIMIZE_CANCELLED) {
+ if (status == DexoptResult.DEXOPT_CANCELLED) {
return results;
}
} catch (ServiceSpecificException e) {
@@ -225,13 +225,13 @@
mPkgState.getPackageName(), dexInfo.dexPath(), abi.isa(),
dexInfo.classLoaderContext()),
e);
- status = OptimizeResult.OPTIMIZE_FAILED;
+ status = DexoptResult.DEXOPT_FAILED;
} finally {
- results.add(DexContainerFileOptimizeResult.create(dexInfo.dexPath(),
+ results.add(DexContainerFileDexoptResult.create(dexInfo.dexPath(),
abi.isPrimaryAbi(), abi.name(), compilerFilter, status, wallTimeMs,
cpuTimeMs, sizeBytes, sizeBeforeBytes, isSkippedDueToStorageLow));
- if (status != OptimizeResult.OPTIMIZE_SKIPPED
- && status != OptimizeResult.OPTIMIZE_PERFORMED) {
+ if (status != DexoptResult.DEXOPT_SKIPPED
+ && status != DexoptResult.DEXOPT_PERFORMED) {
succeeded = false;
}
// Make sure artd does not leak even if the caller holds
@@ -428,7 +428,7 @@
return dexoptTrigger;
}
- private DexoptResult dexoptFile(@NonNull DexoptTarget<DexInfoType> target,
+ private ArtdDexoptResult dexoptFile(@NonNull DexoptTarget<DexInfoType> target,
@Nullable ProfilePath profile, @NonNull GetDexoptNeededResult getDexoptNeededResult,
@NonNull PermissionSettings permissionSettings, @PriorityClass int priorityClass,
@NonNull DexoptOptions dexoptOptions, IArtdCancellationSignal artdCancellationSignal)
@@ -543,8 +543,8 @@
/** Returns information about all dex files. */
@NonNull protected abstract List<DexInfoType> getDexInfoList();
- /** Returns true if the given dex file should be optimized. */
- protected abstract boolean isOptimizable(@NonNull DexInfoType dexInfo);
+ /** Returns true if the given dex file should be dexopted. */
+ protected abstract boolean isDexoptable(@NonNull DexInfoType dexInfo);
/**
* Returns true if the artifacts should be shared with other apps. Note that this must imply
@@ -619,7 +619,7 @@
@AutoValue
abstract static class GetDexoptNeededOptions {
- abstract @OptimizeFlags int flags();
+ abstract @DexoptFlags int flags();
abstract boolean profileMerged();
abstract boolean needsToBePublic();
@@ -629,7 +629,7 @@
@AutoValue.Builder
abstract static class Builder {
- abstract Builder setFlags(@OptimizeFlags int value);
+ abstract Builder setFlags(@DexoptFlags int value);
abstract Builder setProfileMerged(boolean value);
abstract Builder setNeedsToBePublic(boolean value);
abstract GetDexoptNeededOptions build();
diff --git a/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java b/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java
index 14b7d03..996d087 100644
--- a/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java
@@ -321,7 +321,7 @@
} else if (distinctClcList.size() == 1) {
clc = distinctClcList.get(0);
} else {
- // If there are more than one class loader contexts, we can't optimize the dex
+ // If there are more than one class loader contexts, we can't dexopt the dex
// file.
clc = SecondaryDexInfo.VARYING_CLASS_LOADER_CONTEXTS;
}
@@ -349,7 +349,7 @@
* ART Service uses this information to:
* <ul>
* <li>Determine whether an app is used by another app
- * <li>Record which secondary dex container files to optimize and how to optimize them
+ * <li>Record which secondary dex container files to dexopt and how to dexopt them
* </ul>
*
* @param loadingPackageName the name of the package who performs the load. ART Service assumes
@@ -571,7 +571,7 @@
@NonNull DexLoader loader, @NonNull String owningPackageName) {
// If the dex file is loaded by an isolated process of the same app, it can also be
// considered as "used by other apps" because isolated processes are sandboxed and can only
- // read world readable files, so they need the optimized artifacts to be world readable. An
+ // read world readable files, so they need the dexopt artifacts to be world readable. An
// example of such a package is webview.
return !loader.loadingPackageName().equals(owningPackageName) || loader.isolatedProcess();
}
diff --git a/libartservice/service/java/com/android/server/art/DexOptHelper.java b/libartservice/service/java/com/android/server/art/DexoptHelper.java
similarity index 79%
rename from libartservice/service/java/com/android/server/art/DexOptHelper.java
rename to libartservice/service/java/com/android/server/art/DexoptHelper.java
index 51f4442..11faed2 100644
--- a/libartservice/service/java/com/android/server/art/DexOptHelper.java
+++ b/libartservice/service/java/com/android/server/art/DexoptHelper.java
@@ -16,10 +16,10 @@
package com.android.server.art;
-import static com.android.server.art.ArtManagerLocal.OptimizePackageDoneCallback;
+import static com.android.server.art.ArtManagerLocal.DexoptDoneCallback;
import static com.android.server.art.model.Config.Callback;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
-import static com.android.server.art.model.OptimizeResult.PackageOptimizeResult;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
+import static com.android.server.art.model.DexoptResult.PackageDexoptResult;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -34,9 +34,9 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.Config;
+import com.android.server.art.model.DexoptParams;
+import com.android.server.art.model.DexoptResult;
import com.android.server.art.model.OperationProgress;
-import com.android.server.art.model.OptimizeParams;
-import com.android.server.art.model.OptimizeResult;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -66,7 +66,7 @@
*
* @hide
*/
-public class DexOptHelper {
+public class DexoptHelper {
private static final String TAG = "DexoptHelper";
/**
@@ -77,34 +77,34 @@
@NonNull private final Injector mInjector;
- public DexOptHelper(@NonNull Context context, @NonNull Config config) {
+ public DexoptHelper(@NonNull Context context, @NonNull Config config) {
this(new Injector(context, config));
}
@VisibleForTesting
- public DexOptHelper(@NonNull Injector injector) {
+ public DexoptHelper(@NonNull Injector injector) {
mInjector = injector;
}
/**
- * DO NOT use this method directly. Use {@link ArtManagerLocal#optimizePackage} or {@link
- * ArtManagerLocal#optimizePackages}.
+ * DO NOT use this method directly. Use {@link ArtManagerLocal#dexoptPackage} or {@link
+ * ArtManagerLocal#dexoptPackages}.
*/
@NonNull
- public OptimizeResult dexopt(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull List<String> packageNames, @NonNull OptimizeParams params,
+ public DexoptResult dexopt(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull List<String> packageNames, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal, @NonNull Executor dexoptExecutor) {
return dexopt(snapshot, packageNames, params, cancellationSignal, dexoptExecutor,
null /* progressCallbackExecutor */, null /* progressCallback */);
}
/**
- * DO NOT use this method directly. Use {@link ArtManagerLocal#optimizePackage} or {@link
- * ArtManagerLocal#optimizePackages}.
+ * DO NOT use this method directly. Use {@link ArtManagerLocal#dexoptPackage} or {@link
+ * ArtManagerLocal#dexoptPackages}.
*/
@NonNull
- public OptimizeResult dexopt(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
- @NonNull List<String> packageNames, @NonNull OptimizeParams params,
+ public DexoptResult dexopt(@NonNull PackageManagerLocal.FilteredSnapshot snapshot,
+ @NonNull List<String> packageNames, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal, @NonNull Executor dexoptExecutor,
@Nullable Executor progressCallbackExecutor,
@Nullable Consumer<OperationProgress> progressCallback) {
@@ -116,12 +116,12 @@
}
/**
- * DO NOT use this method directly. Use {@link ArtManagerLocal#optimizePackage} or {@link
- * ArtManagerLocal#optimizePackages}.
+ * DO NOT use this method directly. Use {@link ArtManagerLocal#dexoptPackage} or {@link
+ * ArtManagerLocal#dexoptPackages}.
*/
@NonNull
- private OptimizeResult dexoptPackages(@NonNull List<PackageState> pkgStates,
- @NonNull OptimizeParams params, @NonNull CancellationSignal cancellationSignal,
+ private DexoptResult dexoptPackages(@NonNull List<PackageState> pkgStates,
+ @NonNull DexoptParams params, @NonNull CancellationSignal cancellationSignal,
@NonNull Executor dexoptExecutor, @Nullable Executor progressCallbackExecutor,
@Nullable Consumer<OperationProgress> progressCallback) {
int callingUid = Binder.getCallingUid();
@@ -135,7 +135,7 @@
wakeLock.setWorkSource(new WorkSource(callingUid));
wakeLock.acquire(WAKE_LOCK_TIMEOUT_MS);
- List<CompletableFuture<PackageOptimizeResult>> futures = new ArrayList<>();
+ List<CompletableFuture<PackageDexoptResult>> futures = new ArrayList<>();
for (PackageState pkgState : pkgStates) {
futures.add(CompletableFuture.supplyAsync(
() -> dexoptPackage(pkgState, params, cancellationSignal), dexoptExecutor));
@@ -147,7 +147,7 @@
OperationProgress.create(0 /* current */, futures.size()));
}, progressCallbackExecutor);
AtomicInteger current = new AtomicInteger(0);
- for (CompletableFuture<PackageOptimizeResult> future : futures) {
+ for (CompletableFuture<PackageDexoptResult> future : futures) {
future.thenRunAsync(() -> {
progressCallback.accept(OperationProgress.create(
current.incrementAndGet(), futures.size()));
@@ -155,30 +155,30 @@
}
}
- List<PackageOptimizeResult> results =
+ List<PackageDexoptResult> results =
futures.stream().map(Utils::getFuture).collect(Collectors.toList());
var result =
- OptimizeResult.create(params.getCompilerFilter(), params.getReason(), results);
+ DexoptResult.create(params.getCompilerFilter(), params.getReason(), results);
- for (Callback<OptimizePackageDoneCallback, Boolean> doneCallback :
- mInjector.getConfig().getOptimizePackageDoneCallbacks()) {
+ for (Callback<DexoptDoneCallback, Boolean> doneCallback :
+ mInjector.getConfig().getDexoptDoneCallbacks()) {
boolean onlyIncludeUpdates = doneCallback.extra();
if (onlyIncludeUpdates) {
- List<PackageOptimizeResult> filteredResults =
+ List<PackageDexoptResult> filteredResults =
results.stream()
- .filter(PackageOptimizeResult::hasUpdatedArtifacts)
+ .filter(PackageDexoptResult::hasUpdatedArtifacts)
.collect(Collectors.toList());
if (!filteredResults.isEmpty()) {
- var resultForCallback = OptimizeResult.create(
+ var resultForCallback = DexoptResult.create(
params.getCompilerFilter(), params.getReason(), filteredResults);
CompletableFuture.runAsync(() -> {
- doneCallback.get().onOptimizePackageDone(resultForCallback);
+ doneCallback.get().onDexoptDone(resultForCallback);
}, doneCallback.executor());
}
} else {
CompletableFuture.runAsync(() -> {
- doneCallback.get().onOptimizePackageDone(result);
+ doneCallback.get().onDexoptDone(result);
}, doneCallback.executor());
}
}
@@ -193,20 +193,20 @@
}
/**
- * DO NOT use this method directly. Use {@link ArtManagerLocal#optimizePackage} or {@link
- * ArtManagerLocal#optimizePackages}.
+ * DO NOT use this method directly. Use {@link ArtManagerLocal#dexoptPackage} or {@link
+ * ArtManagerLocal#dexoptPackages}.
*/
@NonNull
- private PackageOptimizeResult dexoptPackage(@NonNull PackageState pkgState,
- @NonNull OptimizeParams params, @NonNull CancellationSignal cancellationSignal) {
- List<DexContainerFileOptimizeResult> results = new ArrayList<>();
- Supplier<PackageOptimizeResult> createResult = ()
- -> PackageOptimizeResult.create(
+ private PackageDexoptResult dexoptPackage(@NonNull PackageState pkgState,
+ @NonNull DexoptParams params, @NonNull CancellationSignal cancellationSignal) {
+ List<DexContainerFileDexoptResult> results = new ArrayList<>();
+ Supplier<PackageDexoptResult> createResult = ()
+ -> PackageDexoptResult.create(
pkgState.getPackageName(), results, cancellationSignal.isCanceled());
AndroidPackage pkg = Utils.getPackageOrThrow(pkgState);
- if (!canOptimizePackage(pkgState)) {
+ if (!canDexoptPackage(pkgState)) {
return createResult.get();
}
@@ -243,8 +243,8 @@
return createResult.get();
}
- private boolean canOptimizePackage(@NonNull PackageState pkgState) {
- return Utils.canOptimizePackage(pkgState, mInjector.getAppHibernationManager());
+ private boolean canDexoptPackage(@NonNull PackageState pkgState) {
+ return Utils.canDexoptPackage(pkgState, mInjector.getAppHibernationManager());
}
@NonNull
@@ -268,7 +268,7 @@
PackageState pkgState = Utils.getPackageStateOrThrow(snapshot, packageName);
Utils.getPackageOrThrow(pkgState);
pkgStates.put(packageName, pkgState);
- if (includeDependencies && canOptimizePackage(pkgState)) {
+ if (includeDependencies && canDexoptPackage(pkgState)) {
for (SharedLibrary library : pkgState.getUsesLibraries()) {
maybeEnqueue.accept(library);
}
@@ -279,7 +279,7 @@
while ((library = queue.poll()) != null) {
String packageName = library.getPackageName();
PackageState pkgState = Utils.getPackageStateOrThrow(snapshot, packageName);
- if (canOptimizePackage(pkgState)) {
+ if (canDexoptPackage(pkgState)) {
pkgStates.put(packageName, pkgState);
// Note that `library.getDependencies()` is different from
@@ -318,14 +318,14 @@
@NonNull
PrimaryDexOptimizer getPrimaryDexOptimizer(@NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
return new PrimaryDexOptimizer(mContext, pkgState, pkg, params, cancellationSignal);
}
@NonNull
SecondaryDexOptimizer getSecondaryDexOptimizer(@NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
return new SecondaryDexOptimizer(mContext, pkgState, pkg, params, cancellationSignal);
}
diff --git a/libartservice/service/java/com/android/server/art/DumpHelper.java b/libartservice/service/java/com/android/server/art/DumpHelper.java
index 6c01ab4..0de2c1b 100644
--- a/libartservice/service/java/com/android/server/art/DumpHelper.java
+++ b/libartservice/service/java/com/android/server/art/DumpHelper.java
@@ -18,7 +18,7 @@
import static com.android.server.art.DexUseManagerLocal.DexLoader;
import static com.android.server.art.DexUseManagerLocal.SecondaryDexInfo;
-import static com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus;
+import static com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus;
import android.annotation.NonNull;
@@ -82,10 +82,10 @@
String packageName = pkgState.getPackageName();
ipw.printf("[%s]\n", packageName);
- List<DexContainerFileOptimizationStatus> statuses =
+ List<DexContainerFileDexoptStatus> statuses =
mInjector.getArtManagerLocal()
- .getOptimizationStatus(snapshot, packageName)
- .getDexContainerFileOptimizationStatuses();
+ .getDexoptStatus(snapshot, packageName)
+ .getDexContainerFileDexoptStatuses();
Map<String, SecondaryDexInfo> secondaryDexInfoByDexPath =
mInjector.getDexUseManager()
.getSecondaryDexInfo(packageName)
@@ -94,17 +94,17 @@
// Use LinkedHashMap to keep the order.
var primaryStatusesByDexPath =
- new LinkedHashMap<String, List<DexContainerFileOptimizationStatus>>();
+ new LinkedHashMap<String, List<DexContainerFileDexoptStatus>>();
var secondaryStatusesByDexPath =
- new LinkedHashMap<String, List<DexContainerFileOptimizationStatus>>();
- for (DexContainerFileOptimizationStatus fileStatus : statuses) {
+ new LinkedHashMap<String, List<DexContainerFileDexoptStatus>>();
+ for (DexContainerFileDexoptStatus fileStatus : statuses) {
if (fileStatus.isPrimaryDex()) {
primaryStatusesByDexPath
.computeIfAbsent(fileStatus.getDexContainerFile(), k -> new ArrayList<>())
.add(fileStatus);
} else if (secondaryDexInfoByDexPath.containsKey(fileStatus.getDexContainerFile())) {
// The condition above is false only if a change occurs between
- // `getOptimizationStatus` and `getSecondaryDexInfo`, which is an edge case.
+ // `getDexoptStatus` and `getSecondaryDexInfo`, which is an edge case.
secondaryStatusesByDexPath
.computeIfAbsent(fileStatus.getDexContainerFile(), k -> new ArrayList<>())
.add(fileStatus);
@@ -112,14 +112,13 @@
}
ipw.increaseIndent();
- for (List<DexContainerFileOptimizationStatus> fileStatuses :
- primaryStatusesByDexPath.values()) {
+ for (List<DexContainerFileDexoptStatus> fileStatuses : primaryStatusesByDexPath.values()) {
dumpPrimaryDex(ipw, fileStatuses, packageName);
}
if (!secondaryStatusesByDexPath.isEmpty()) {
ipw.println("known secondary dex files:");
ipw.increaseIndent();
- for (Map.Entry<String, List<DexContainerFileOptimizationStatus>> entry :
+ for (Map.Entry<String, List<DexContainerFileDexoptStatus>> entry :
secondaryStatusesByDexPath.entrySet()) {
dumpSecondaryDex(ipw, entry.getValue(), packageName,
secondaryDexInfoByDexPath.get(entry.getKey()));
@@ -130,7 +129,7 @@
}
private void dumpPrimaryDex(@NonNull IndentingPrintWriter ipw,
- List<DexContainerFileOptimizationStatus> fileStatuses, @NonNull String packageName) {
+ List<DexContainerFileDexoptStatus> fileStatuses, @NonNull String packageName) {
String dexPath = fileStatuses.get(0).getDexContainerFile();
ipw.printf("path: %s\n", dexPath);
ipw.increaseIndent();
@@ -142,7 +141,7 @@
}
private void dumpSecondaryDex(@NonNull IndentingPrintWriter ipw,
- List<DexContainerFileOptimizationStatus> fileStatuses, @NonNull String packageName,
+ List<DexContainerFileDexoptStatus> fileStatuses, @NonNull String packageName,
@NonNull SecondaryDexInfo info) {
String dexPath = fileStatuses.get(0).getDexContainerFile();
ipw.println(dexPath);
@@ -153,9 +152,9 @@
ipw.decreaseIndent();
}
- private void dumpFileStatuses(@NonNull IndentingPrintWriter ipw,
- List<DexContainerFileOptimizationStatus> fileStatuses) {
- for (DexContainerFileOptimizationStatus fileStatus : fileStatuses) {
+ private void dumpFileStatuses(
+ @NonNull IndentingPrintWriter ipw, List<DexContainerFileDexoptStatus> fileStatuses) {
+ for (DexContainerFileDexoptStatus fileStatus : fileStatuses) {
ipw.printf("%s: [status=%s] [reason=%s]\n",
VMRuntime.getInstructionSet(fileStatus.getAbi()),
fileStatus.getCompilerFilter(), fileStatus.getCompilationReason());
diff --git a/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java b/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
index 55d92c6..635fe8b 100644
--- a/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
+++ b/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
@@ -34,8 +34,8 @@
import com.android.internal.annotations.VisibleForTesting;
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.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -55,14 +55,14 @@
private final int mSharedGid;
public PrimaryDexOptimizer(@NonNull Context context, @NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
this(new Injector(context), pkgState, pkg, params, cancellationSignal);
}
@VisibleForTesting
public PrimaryDexOptimizer(@NonNull Injector injector, @NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
super(injector, pkgState, pkg, params, cancellationSignal);
@@ -86,7 +86,7 @@
}
@Override
- protected boolean isOptimizable(@NonNull DetailedPrimaryDexInfo dexInfo) {
+ protected boolean isDexoptable(@NonNull DetailedPrimaryDexInfo dexInfo) {
if (!dexInfo.hasCode()) {
return false;
}
diff --git a/libartservice/service/java/com/android/server/art/ReasonMapping.java b/libartservice/service/java/com/android/server/art/ReasonMapping.java
index 0a44fa9..ca9b9ed 100644
--- a/libartservice/service/java/com/android/server/art/ReasonMapping.java
+++ b/libartservice/service/java/com/android/server/art/ReasonMapping.java
@@ -42,15 +42,15 @@
public class ReasonMapping {
private ReasonMapping() {}
- /** Optimizing apps on the first boot after flashing or factory resetting the device. */
+ /** Dexopting apps on the first boot after flashing or factory resetting the device. */
public static final String REASON_FIRST_BOOT = "first-boot";
- /** Optimizing apps on the next boot after an OTA. */
+ /** Dexopting apps on the next boot after an OTA. */
public static final String REASON_BOOT_AFTER_OTA = "boot-after-ota";
- /** Optimizing apps on the next boot after a mainline update. */
+ /** Dexopting apps on the next boot after a mainline update. */
public static final String REASON_BOOT_AFTER_MAINLINE_UPDATE = "boot-after-mainline-update";
/** Installing an app after user presses the "install"/"update" button. */
public static final String REASON_INSTALL = "install";
- /** Optimizing apps in the background. */
+ /** Dexopting apps in the background. */
public static final String REASON_BG_DEXOPT = "bg-dexopt";
/** Invoked by cmdline. */
public static final String REASON_CMDLINE = "cmdline";
@@ -71,7 +71,7 @@
REASON_INSTALL_BULK_DOWNGRADED, REASON_INSTALL_BULK_SECONDARY_DOWNGRADED);
/**
- * Reasons for {@link ArtManagerLocal#optimizePackages}.
+ * Reasons for {@link ArtManagerLocal#dexoptPackages}.
*
* @hide
*/
@@ -84,7 +84,7 @@
})
// clang-format on
@Retention(RetentionPolicy.SOURCE)
- public @interface BatchOptimizeReason {}
+ public @interface BatchDexoptReason {}
/**
* Reasons for {@link ArtManagerLocal#onBoot(String, Executor, Consumer<OperationProgress>)}.
@@ -176,13 +176,13 @@
}
/**
- * Loads the concurrency from the system property, for batch optimization ({@link
- * ArtManagerLocal#optimizePackages}), or 1 if the system property is not found or cannot be
+ * Loads the concurrency from the system property, for batch dexopt ({@link
+ * ArtManagerLocal#dexoptPackages}), or 1 if the system property is not found or cannot be
* parsed.
*
* @hide
*/
- public static int getConcurrencyForReason(@NonNull @BatchOptimizeReason String reason) {
+ public static int getConcurrencyForReason(@NonNull @BatchDexoptReason String reason) {
return SystemProperties.getInt("pm.dexopt." + reason + ".concurrency", 1 /* def */);
}
}
diff --git a/libartservice/service/java/com/android/server/art/SecondaryDexOptimizer.java b/libartservice/service/java/com/android/server/art/SecondaryDexOptimizer.java
index 2f79a21..5d5a227 100644
--- a/libartservice/service/java/com/android/server/art/SecondaryDexOptimizer.java
+++ b/libartservice/service/java/com/android/server/art/SecondaryDexOptimizer.java
@@ -27,7 +27,7 @@
import android.os.CancellationSignal;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.art.model.OptimizeParams;
+import com.android.server.art.model.DexoptParams;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -38,14 +38,14 @@
private static final String TAG = "SecondaryDexOptimizer";
public SecondaryDexOptimizer(@NonNull Context context, @NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
this(new Injector(context), pkgState, pkg, params, cancellationSignal);
}
@VisibleForTesting
public SecondaryDexOptimizer(@NonNull Injector injector, @NonNull PackageState pkgState,
- @NonNull AndroidPackage pkg, @NonNull OptimizeParams params,
+ @NonNull AndroidPackage pkg, @NonNull DexoptParams params,
@NonNull CancellationSignal cancellationSignal) {
super(injector, pkgState, pkg, params, cancellationSignal);
}
@@ -65,7 +65,7 @@
}
@Override
- protected boolean isOptimizable(@NonNull DetailedSecondaryDexInfo dexInfo) {
+ protected boolean isDexoptable(@NonNull DetailedSecondaryDexInfo dexInfo) {
return true;
}
diff --git a/libartservice/service/java/com/android/server/art/Utils.java b/libartservice/service/java/com/android/server/art/Utils.java
index 9e6ca85..341c741 100644
--- a/libartservice/service/java/com/android/server/art/Utils.java
+++ b/libartservice/service/java/com/android/server/art/Utils.java
@@ -26,7 +26,7 @@
import android.util.Log;
import android.util.SparseArray;
-import com.android.server.art.model.OptimizeParams;
+import com.android.server.art.model.DexoptParams;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -166,7 +166,7 @@
/** Returns true if the given string is a valid compiler filter. */
public static boolean isValidArtServiceCompilerFilter(@NonNull String compilerFilter) {
- if (compilerFilter.equals(OptimizeParams.COMPILER_FILTER_NOOP)) {
+ if (compilerFilter.equals(DexoptParams.COMPILER_FILTER_NOOP)) {
return true;
}
return DexFile.isValidCompilerFilter(compilerFilter);
@@ -241,12 +241,12 @@
}
/**
- * Returns true if the given package is optimizable.
+ * Returns true if the given package is dexoptable.
*
* @param appHibernationManager the {@link AppHibernationManager} instance for checking
* hibernation status, or null to skip the check
*/
- public static boolean canOptimizePackage(
+ public static boolean canDexoptPackage(
@NonNull PackageState pkgState, @Nullable AppHibernationManager appHibernationManager) {
// An APEX has a uid of -1.
// TODO(b/256637152): Consider using `isApex` instead.
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 f0e3b24..aa8e53c 100644
--- a/libartservice/service/java/com/android/server/art/model/ArtFlags.java
+++ b/libartservice/service/java/com/android/server/art/model/ArtFlags.java
@@ -39,32 +39,32 @@
/** Whether the operation is applied for secondary dex'es. */
public static final int FLAG_FOR_SECONDARY_DEX = 1 << 1;
- // Flags specific to `optimizePackage`.
+ // Flags specific to `dexoptPackage`.
- /** Whether to optimize dependency libraries as well. */
+ /** Whether to dexopt dependency libraries as well. */
public static final int FLAG_SHOULD_INCLUDE_DEPENDENCIES = 1 << 2;
/**
- * Whether the intention is to downgrade the compiler filter. If true, the optimization will
+ * Whether the intention is to downgrade the compiler filter. If true, the dexopt will
* be skipped if the target compiler filter is better than or equal to the compiler filter
- * of the existing optimized artifacts, or optimized artifacts do not exist.
+ * of the existing dexopt artifacts, or dexopt artifacts do not exist.
*/
public static final int FLAG_SHOULD_DOWNGRADE = 1 << 3;
/**
- * Whether to force optimization. If true, the optimization will be performed regardless of
- * any existing optimized artifacts.
+ * Whether to force dexopt. If true, the dexopt will be performed regardless of
+ * any existing dexopt artifacts.
*/
public static final int FLAG_FORCE = 1 << 4;
/**
- * If set, the optimization will be performed for a single split. Otherwise, the optimization
- * will be performed for all splits. {@link OptimizeParams.Builder#setSplitName()} can be used
- * to specify the split to optimize.
+ * If set, the dexopt will be performed for a single split. Otherwise, the dexopt
+ * will be performed for all splits. {@link DexoptParams.Builder#setSplitName()} can be used
+ * to specify the split to dexopt.
*
* When this flag is set, {@link #FLAG_FOR_PRIMARY_DEX} must be set, and {@link
* #FLAG_FOR_SECONDARY_DEX} and {@link #FLAG_SHOULD_INCLUDE_DEPENDENCIES} must not be set.
*/
public static final int FLAG_FOR_SINGLE_SPLIT = 1 << 5;
/**
- * If set, skips the optimization if the remaining storage space is low. The threshold is
+ * If set, skips the dexopt if the remaining storage space is low. The threshold is
* controlled by the global settings {@code sys_storage_threshold_percentage} and {@code
* sys_storage_threshold_max_bytes}.
*/
@@ -72,7 +72,7 @@
/**
* Flags for {@link
- * ArtManagerLocal#deleteOptimizedArtifacts(PackageManagerLocal.FilteredSnapshot, String, int)}.
+ * ArtManagerLocal#deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String, int)}.
*
* @hide
*/
@@ -87,7 +87,7 @@
/**
* Default flags that are used when {@link
- * ArtManagerLocal#deleteOptimizedArtifacts(PackageManagerLocal.FilteredSnapshot, String)} is
+ * ArtManagerLocal#deleteDexoptArtifacts(PackageManagerLocal.FilteredSnapshot, String)} is
* called.
* Value: {@link #FLAG_FOR_PRIMARY_DEX}, {@link #FLAG_FOR_SECONDARY_DEX}.
*/
@@ -97,7 +97,7 @@
/**
* Flags for {@link
- * ArtManagerLocal#getOptimizationStatus(PackageManagerLocal.FilteredSnapshot, String, int)}.
+ * ArtManagerLocal#getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String, int)}.
*
* @hide
*/
@@ -112,7 +112,7 @@
/**
* Default flags that are used when {@link
- * ArtManagerLocal#getOptimizationStatus(PackageManagerLocal.FilteredSnapshot, String)} is
+ * ArtManagerLocal#getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String)} is
* called.
* Value: {@link #FLAG_FOR_PRIMARY_DEX}, {@link #FLAG_FOR_SECONDARY_DEX}.
*/
@@ -137,7 +137,7 @@
/**
* Default flags that are used when {@link
- * ArtManagerLocal#getOptimizationStatus(PackageManagerLocal.FilteredSnapshot, String)} is
+ * ArtManagerLocal#getDexoptStatus(PackageManagerLocal.FilteredSnapshot, String)} is
* called.
* Value: {@link #FLAG_FOR_PRIMARY_DEX}, {@link #FLAG_FOR_SECONDARY_DEX}.
*/
@@ -146,7 +146,7 @@
}
/**
- * Flags for {@link OptimizeParams}.
+ * Flags for {@link DexoptParams}.
*
* @hide
*/
@@ -162,15 +162,15 @@
})
// clang-format on
@Retention(RetentionPolicy.SOURCE)
- public @interface OptimizeFlags {}
+ public @interface DexoptFlags {}
/**
* Default flags that are used when
- * {@link OptimizeParams.Builder#Builder(String)} is called.
+ * {@link DexoptParams.Builder#Builder(String)} is called.
*
* @hide
*/
- public static @OptimizeFlags int defaultOptimizeFlags(@NonNull String reason) {
+ public static @DexoptFlags int defaultDexoptFlags(@NonNull String reason) {
switch (reason) {
case ReasonMapping.REASON_INSTALL:
case ReasonMapping.REASON_INSTALL_FAST:
diff --git a/libartservice/service/java/com/android/server/art/model/BatchOptimizeParams.java b/libartservice/service/java/com/android/server/art/model/BatchDexoptParams.java
similarity index 65%
rename from libartservice/service/java/com/android/server/art/model/BatchOptimizeParams.java
rename to libartservice/service/java/com/android/server/art/model/BatchDexoptParams.java
index 6869bb5..ffe5500 100644
--- a/libartservice/service/java/com/android/server/art/model/BatchOptimizeParams.java
+++ b/libartservice/service/java/com/android/server/art/model/BatchDexoptParams.java
@@ -31,22 +31,22 @@
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@Immutable
@AutoValue
-public abstract class BatchOptimizeParams {
+public abstract class BatchDexoptParams {
/** @hide */
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public static final class Builder {
private @NonNull List<String> mPackageNames; // This is assumed immutable.
- private @NonNull OptimizeParams mOptimizeParams;
+ private @NonNull DexoptParams mDexoptParams;
/** @hide */
- public Builder(@NonNull List<String> defaultPackages,
- @NonNull OptimizeParams defaultOptimizeParams) {
+ public Builder(
+ @NonNull List<String> defaultPackages, @NonNull DexoptParams defaultDexoptParams) {
mPackageNames = defaultPackages; // The argument is assumed immutable.
- mOptimizeParams = defaultOptimizeParams;
+ mDexoptParams = defaultDexoptParams;
}
/**
- * Sets the list of packages to optimize. The optimization will be scheduled in the given
+ * Sets the list of packages to dexopt. The dexopt will be scheduled in the given
* order.
*
* If not called, the default list will be used.
@@ -58,30 +58,30 @@
}
/**
- * Sets the params for optimizing each package.
+ * Sets the params for dexopting each package.
*
- * If not called, the default params built from {@link OptimizeParams#Builder(String)} will
+ * If not called, the default params built from {@link DexoptParams#Builder(String)} will
* be used.
*/
@NonNull
- public Builder setOptimizeParams(@NonNull OptimizeParams optimizeParams) {
- mOptimizeParams = optimizeParams;
+ public Builder setDexoptParams(@NonNull DexoptParams dexoptParams) {
+ mDexoptParams = dexoptParams;
return this;
}
/** Returns the built object. */
@NonNull
- public BatchOptimizeParams build() {
- return new AutoValue_BatchOptimizeParams(mPackageNames, mOptimizeParams);
+ public BatchDexoptParams build() {
+ return new AutoValue_BatchDexoptParams(mPackageNames, mDexoptParams);
}
}
/** @hide */
- protected BatchOptimizeParams() {}
+ protected BatchDexoptParams() {}
- /** The ordered list of packages to optimize. */
+ /** The ordered list of packages to dexopt. */
public abstract @NonNull List<String> getPackages();
- /** The params for optimizing each package. */
- public abstract @NonNull OptimizeParams getOptimizeParams();
+ /** The params for dexopting each package. */
+ public abstract @NonNull DexoptParams getDexoptParams();
}
diff --git a/libartservice/service/java/com/android/server/art/model/Config.java b/libartservice/service/java/com/android/server/art/model/Config.java
index 7d9704e..49bc930 100644
--- a/libartservice/service/java/com/android/server/art/model/Config.java
+++ b/libartservice/service/java/com/android/server/art/model/Config.java
@@ -16,8 +16,8 @@
package com.android.server.art.model;
-import static com.android.server.art.ArtManagerLocal.OptimizePackageDoneCallback;
-import static com.android.server.art.ArtManagerLocal.OptimizePackagesCallback;
+import static com.android.server.art.ArtManagerLocal.BatchDexoptStartCallback;
+import static com.android.server.art.ArtManagerLocal.DexoptDoneCallback;
import static com.android.server.art.ArtManagerLocal.ScheduleBackgroundDexoptJobCallback;
import android.annotation.NonNull;
@@ -40,10 +40,10 @@
* @hide
*/
public class Config {
- /** @see ArtManagerLocal#setOptimizePackagesCallback(Executor, OptimizePackagesCallback) */
+ /** @see ArtManagerLocal#setBatchDexoptStartCallback(Executor, BatchDexoptStartCallback) */
@GuardedBy("this")
@Nullable
- private Callback<OptimizePackagesCallback, Void> mOptimizePackagesCallback = null;
+ private Callback<BatchDexoptStartCallback, Void> mBatchDexoptStartCallback = null;
/**
* @see ArtManagerLocal#setScheduleBackgroundDexoptJobCallback(Executor,
@@ -55,26 +55,25 @@
mScheduleBackgroundDexoptJobCallback = null;
/**
- * @see ArtManagerLocal#addOptimizePackageDoneCallback(Executor, OptimizePackageDoneCallback)
+ * @see ArtManagerLocal#addDexoptDoneCallback(Executor, DexoptDoneCallback)
*/
@GuardedBy("this")
@NonNull
- private LinkedHashMap<OptimizePackageDoneCallback,
- Callback<OptimizePackageDoneCallback, Boolean>> mOptimizePackageDoneCallbacks =
- new LinkedHashMap<>();
+ private LinkedHashMap<DexoptDoneCallback, Callback<DexoptDoneCallback, Boolean>>
+ mDexoptDoneCallbacks = new LinkedHashMap<>();
- public synchronized void setOptimizePackagesCallback(
- @NonNull Executor executor, @NonNull OptimizePackagesCallback callback) {
- mOptimizePackagesCallback = Callback.create(callback, executor);
+ public synchronized void setBatchDexoptStartCallback(
+ @NonNull Executor executor, @NonNull BatchDexoptStartCallback callback) {
+ mBatchDexoptStartCallback = Callback.create(callback, executor);
}
- public synchronized void clearOptimizePackagesCallback() {
- mOptimizePackagesCallback = null;
+ public synchronized void clearBatchDexoptStartCallback() {
+ mBatchDexoptStartCallback = null;
}
@Nullable
- public synchronized Callback<OptimizePackagesCallback, Void> getOptimizePackagesCallback() {
- return mOptimizePackagesCallback;
+ public synchronized Callback<BatchDexoptStartCallback, Void> getBatchDexoptStartCallback() {
+ return mBatchDexoptStartCallback;
}
public synchronized void setScheduleBackgroundDexoptJobCallback(
@@ -92,24 +91,22 @@
return mScheduleBackgroundDexoptJobCallback;
}
- public synchronized void addOptimizePackageDoneCallback(boolean onlyIncludeUpdates,
- @NonNull Executor executor, @NonNull OptimizePackageDoneCallback callback) {
- if (mOptimizePackageDoneCallbacks.putIfAbsent(
+ public synchronized void addDexoptDoneCallback(boolean onlyIncludeUpdates,
+ @NonNull Executor executor, @NonNull DexoptDoneCallback callback) {
+ if (mDexoptDoneCallbacks.putIfAbsent(
callback, Callback.create(callback, executor, onlyIncludeUpdates))
!= null) {
throw new IllegalStateException("callback already added");
}
}
- public synchronized void removeOptimizePackageDoneCallback(
- @NonNull OptimizePackageDoneCallback callback) {
- mOptimizePackageDoneCallbacks.remove(callback);
+ public synchronized void removeDexoptDoneCallback(@NonNull DexoptDoneCallback callback) {
+ mDexoptDoneCallbacks.remove(callback);
}
@NonNull
- public synchronized List<Callback<OptimizePackageDoneCallback, Boolean>>
- getOptimizePackageDoneCallbacks() {
- return new ArrayList<>(mOptimizePackageDoneCallbacks.values());
+ public synchronized List<Callback<DexoptDoneCallback, Boolean>> getDexoptDoneCallbacks() {
+ return new ArrayList<>(mDexoptDoneCallbacks.values());
}
@AutoValue
diff --git a/libartservice/service/java/com/android/server/art/model/OptimizeParams.java b/libartservice/service/java/com/android/server/art/model/DexoptParams.java
similarity index 88%
rename from libartservice/service/java/com/android/server/art/model/OptimizeParams.java
rename to libartservice/service/java/com/android/server/art/model/DexoptParams.java
index ffe5003..4dc9471 100644
--- a/libartservice/service/java/com/android/server/art/model/OptimizeParams.java
+++ b/libartservice/service/java/com/android/server/art/model/DexoptParams.java
@@ -16,7 +16,7 @@
package com.android.server.art.model;
-import static com.android.server.art.model.ArtFlags.OptimizeFlags;
+import static com.android.server.art.model.ArtFlags.DexoptFlags;
import static com.android.server.art.model.ArtFlags.PriorityClassApi;
import android.annotation.NonNull;
@@ -30,16 +30,16 @@
/** @hide */
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@Immutable
-public class OptimizeParams {
+public class DexoptParams {
/** @hide */
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public static final class Builder {
- private OptimizeParams mParams = new OptimizeParams();
+ private DexoptParams mParams = new DexoptParams();
/**
* Creates a builder.
*
- * Uses default flags ({@link ArtFlags#defaultOptimizeFlags()}).
+ * Uses default flags ({@link ArtFlags#defaultDexoptFlags()}).
*
* @param reason Compilation reason. Can be a string defined in {@link ReasonMapping} or a
* custom string. If the value is a string defined in {@link ReasonMapping}, it
@@ -48,27 +48,27 @@
* compiler filter must be explicitly set.
*/
public Builder(@NonNull String reason) {
- this(reason, ArtFlags.defaultOptimizeFlags(reason));
+ this(reason, ArtFlags.defaultDexoptFlags(reason));
}
/**
* Same as above, but allows to specify flags.
*/
- public Builder(@NonNull String reason, @OptimizeFlags int flags) {
+ public Builder(@NonNull String reason, @DexoptFlags int flags) {
mParams.mReason = reason;
setFlags(flags);
}
/** Replaces all flags with the given value. */
@NonNull
- public Builder setFlags(@OptimizeFlags int value) {
+ public Builder setFlags(@DexoptFlags int value) {
mParams.mFlags = value;
return this;
}
/** Replaces the flags specified by the mask with the given value. */
@NonNull
- public Builder setFlags(@OptimizeFlags int value, @OptimizeFlags int mask) {
+ public Builder setFlags(@DexoptFlags int value, @DexoptFlags int mask) {
mParams.mFlags = (mParams.mFlags & ~mask) | (value & mask);
return this;
}
@@ -101,7 +101,7 @@
}
/**
- * The name of the split to optimize, or null for the base split. This option is only
+ * The name of the split to dexopt, or null for the base split. This option is only
* available when {@link ArtFlags#FLAG_FOR_SINGLE_SPLIT} is set.
*/
@NonNull
@@ -116,7 +116,7 @@
* @throws IllegalArgumentException if the built options would be invalid
*/
@NonNull
- public OptimizeParams build() {
+ public DexoptParams build() {
if (mParams.mReason.isEmpty()) {
throw new IllegalArgumentException("Reason must not be empty");
}
@@ -137,7 +137,7 @@
if ((mParams.mFlags & (ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SECONDARY_DEX))
== 0) {
- throw new IllegalArgumentException("Nothing to optimize");
+ throw new IllegalArgumentException("Nothing to dexopt");
}
if ((mParams.mFlags & ArtFlags.FLAG_FOR_PRIMARY_DEX) == 0
@@ -177,16 +177,16 @@
*/
public static final String COMPILER_FILTER_NOOP = "skip";
- private @OptimizeFlags int mFlags = 0;
+ private @DexoptFlags int mFlags = 0;
private @NonNull String mCompilerFilter = "";
private @PriorityClassApi int mPriorityClass = ArtFlags.PRIORITY_NONE;
private @NonNull String mReason = "";
private @Nullable String mSplitName = null;
- private OptimizeParams() {}
+ private DexoptParams() {}
/** Returns all flags. */
- public @OptimizeFlags int getFlags() {
+ public @DexoptFlags int getFlags() {
return mFlags;
}
@@ -210,7 +210,7 @@
return mReason;
}
- /** The name of the split to optimize, or null for the base split. */
+ /** The name of the split to dexopt, or null for the base split. */
public @Nullable String getSplitName() {
return mSplitName;
}
diff --git a/libartservice/service/java/com/android/server/art/model/DexoptResult.java b/libartservice/service/java/com/android/server/art/model/DexoptResult.java
new file mode 100644
index 0000000..621582e
--- /dev/null
+++ b/libartservice/service/java/com/android/server/art/model/DexoptResult.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.art.model;
+
+import android.annotation.DurationMillisLong;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+
+import com.android.internal.annotations.Immutable;
+
+import com.google.auto.value.AutoValue;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+
+/** @hide */
+@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+@Immutable
+@AutoValue
+public abstract class DexoptResult {
+ // Possible values of {@link #DexoptResultStatus}.
+ // A larger number means a higher priority. If multiple dex container files are processed, the
+ // final status will be the one with the highest priority.
+ public static final int DEXOPT_SKIPPED = 10;
+ public static final int DEXOPT_PERFORMED = 20;
+ public static final int DEXOPT_FAILED = 30;
+ public static final int DEXOPT_CANCELLED = 40;
+
+ /** @hide */
+ // clang-format off
+ @IntDef(prefix = {"DEXOPT_"}, value = {
+ DEXOPT_SKIPPED,
+ DEXOPT_FAILED,
+ DEXOPT_PERFORMED,
+ DEXOPT_CANCELLED,
+ })
+ // clang-format on
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface DexoptResultStatus {}
+
+ /** @hide */
+ protected DexoptResult() {}
+
+ /** @hide */
+ public static @NonNull DexoptResult create(@NonNull String requestedCompilerFilter,
+ @NonNull String reason, @NonNull List<PackageDexoptResult> packageDexoptResult) {
+ return new AutoValue_DexoptResult(requestedCompilerFilter, reason, packageDexoptResult);
+ }
+
+ /**
+ * The requested compiler filter. Note that the compiler filter might be adjusted before the
+ * execution based on factors like whether the profile is available or whether the app is
+ * used by other apps.
+ *
+ * @see DexoptParams.Builder#setCompilerFilter(String)
+ * @see DexContainerFileDexoptResult#getActualCompilerFilter()
+ */
+ public abstract @NonNull String getRequestedCompilerFilter();
+
+ /** The compilation reason. */
+ public abstract @NonNull String getReason();
+
+ /**
+ * The result of each individual package.
+ *
+ * If the request is to dexopt a single package without dexopting dependencies, the only
+ * element is the result of the requested package.
+ *
+ * If the request is to dexopt a single package with {@link
+ * ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES} set, the first element is the result of the
+ * requested package, and the rest are the results of the dependency packages.
+ *
+ * If the request is to dexopt multiple packages, the list contains the results of all the
+ * requested packages. The results of their dependency packages are also included if {@link
+ * ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES} is set.
+ */
+ public abstract @NonNull List<PackageDexoptResult> getPackageDexoptResults();
+
+ /** The final status. */
+ public @DexoptResultStatus int getFinalStatus() {
+ return getPackageDexoptResults()
+ .stream()
+ .mapToInt(result -> result.getStatus())
+ .max()
+ .orElse(DEXOPT_SKIPPED);
+ }
+
+ /**
+ * Describes the result of a package.
+ *
+ * @hide
+ */
+ @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+ @Immutable
+ @AutoValue
+ public static abstract class PackageDexoptResult {
+ /** @hide */
+ protected PackageDexoptResult() {}
+
+ /** @hide */
+ public static @NonNull PackageDexoptResult create(@NonNull String packageName,
+ @NonNull List<DexContainerFileDexoptResult> dexContainerFileDexoptResults,
+ boolean isCanceled) {
+ return new AutoValue_DexoptResult_PackageDexoptResult(
+ packageName, dexContainerFileDexoptResults, isCanceled);
+ }
+
+ /** The package name. */
+ public abstract @NonNull String getPackageName();
+
+ /**
+ * The results of dexopting dex container files. Note that there can be multiple entries
+ * for the same dex container file, but for different ABIs.
+ */
+ public abstract @NonNull List<DexContainerFileDexoptResult>
+ getDexContainerFileDexoptResults();
+
+ /** @hide */
+ public abstract boolean isCanceled();
+
+ /** The overall status of the package. */
+ public @DexoptResultStatus int getStatus() {
+ return isCanceled() ? DEXOPT_CANCELLED
+ : getDexContainerFileDexoptResults()
+ .stream()
+ .mapToInt(result -> result.getStatus())
+ .max()
+ .orElse(DEXOPT_SKIPPED);
+ }
+
+ /** True if the package has any artifacts updated by this operation. */
+ public boolean hasUpdatedArtifacts() {
+ return getDexContainerFileDexoptResults().stream().anyMatch(
+ result -> result.getStatus() == DEXOPT_PERFORMED);
+ }
+ }
+
+ /**
+ * Describes the result of dexopting a dex container file.
+ *
+ * @hide
+ */
+ @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+ @Immutable
+ @AutoValue
+ public static abstract class DexContainerFileDexoptResult {
+ /** @hide */
+ protected DexContainerFileDexoptResult() {}
+
+ /** @hide */
+ public static @NonNull DexContainerFileDexoptResult create(@NonNull String dexContainerFile,
+ boolean isPrimaryAbi, @NonNull String abi, @NonNull String compilerFilter,
+ @DexoptResultStatus int status, long dex2oatWallTimeMillis,
+ long dex2oatCpuTimeMillis, long sizeBytes, long sizeBeforeBytes,
+ boolean isSkippedDueToStorageLow) {
+ return new AutoValue_DexoptResult_DexContainerFileDexoptResult(dexContainerFile,
+ isPrimaryAbi, abi, compilerFilter, status, dex2oatWallTimeMillis,
+ dex2oatCpuTimeMillis, sizeBytes, sizeBeforeBytes, isSkippedDueToStorageLow);
+ }
+
+ /** The absolute path to the dex container file. */
+ public abstract @NonNull String getDexContainerFile();
+
+ /**
+ * If true, the dexopt is for the primary ABI of the package (the ABI that the
+ * application is launched with). Otherwise, the dexopt is for an ABI that other
+ * applications might be launched with when using this application's code.
+ */
+ public abstract boolean isPrimaryAbi();
+
+ /**
+ * Returns the ABI that the dexopt is for. Possible values are documented at
+ * https://developer.android.com/ndk/guides/abis#sa.
+ */
+ public abstract @NonNull String getAbi();
+
+ /**
+ * The actual compiler filter.
+ *
+ * @see DexoptParams.Builder#setCompilerFilter(String)
+ */
+ public abstract @NonNull String getActualCompilerFilter();
+
+ /** The status of dexopting this dex container file. */
+ public abstract @DexoptResultStatus int getStatus();
+
+ /**
+ * The wall time of the dex2oat invocation, in milliseconds, if dex2oat succeeded or was
+ * cancelled. Returns 0 if dex2oat failed or was not run, or if failed to get the value.
+ */
+ public abstract @DurationMillisLong long getDex2oatWallTimeMillis();
+
+ /**
+ * The CPU time of the dex2oat invocation, in milliseconds, if dex2oat succeeded or was
+ * cancelled. Returns 0 if dex2oat failed or was not run, or if failed to get the value.
+ */
+ public abstract @DurationMillisLong long getDex2oatCpuTimeMillis();
+
+ /**
+ * The total size, in bytes, of the dexopt artifacts. Returns 0 if {@link #getStatus()}
+ * is not {@link #DEXOPT_PERFORMED}.
+ */
+ public abstract long getSizeBytes();
+
+ /**
+ * The total size, in bytes, of the previous dexopt artifacts that has been replaced.
+ * Returns 0 if there were no previous dexopt artifacts or {@link #getStatus()} is not
+ * {@link #DEXOPT_PERFORMED}.
+ */
+ public abstract long getSizeBeforeBytes();
+
+ /** @hide */
+ public abstract boolean isSkippedDueToStorageLow();
+ }
+}
diff --git a/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java b/libartservice/service/java/com/android/server/art/model/DexoptStatus.java
similarity index 66%
rename from libartservice/service/java/com/android/server/art/model/OptimizationStatus.java
rename to libartservice/service/java/com/android/server/art/model/DexoptStatus.java
index b8a4d53..40130ea 100644
--- a/libartservice/service/java/com/android/server/art/model/OptimizationStatus.java
+++ b/libartservice/service/java/com/android/server/art/model/DexoptStatus.java
@@ -26,51 +26,49 @@
import java.util.List;
/**
- * Describes the optimization status of a package.
+ * Describes the dexopt status of a package.
*
* @hide
*/
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@Immutable
@AutoValue
-public abstract class OptimizationStatus {
+public abstract class DexoptStatus {
/** @hide */
- protected OptimizationStatus() {}
+ protected DexoptStatus() {}
/** @hide */
- public static @NonNull OptimizationStatus
- create(@NonNull List<DexContainerFileOptimizationStatus> dexContainerFileOptimizationStatuses) {
- return new AutoValue_OptimizationStatus(dexContainerFileOptimizationStatuses);
+ public static @NonNull DexoptStatus create(
+ @NonNull List<DexContainerFileDexoptStatus> dexContainerFileDexoptStatuses) {
+ return new AutoValue_DexoptStatus(dexContainerFileDexoptStatuses);
}
/**
- * The statuses of the dex container file optimizations. Note that there can be multiple entries
+ * The statuses of the dex container file dexopts. Note that there can be multiple entries
* for the same dex container file, but for different ABIs.
*/
- @NonNull
- public abstract List<DexContainerFileOptimizationStatus>
- getDexContainerFileOptimizationStatuses();
+ @NonNull public abstract List<DexContainerFileDexoptStatus> getDexContainerFileDexoptStatuses();
/**
- * Describes the optimization status of a dex container file.
+ * Describes the dexopt status of a dex container file.
*
* @hide
*/
@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@Immutable
@AutoValue
- public abstract static class DexContainerFileOptimizationStatus {
+ public abstract static class DexContainerFileDexoptStatus {
/** @hide */
- protected DexContainerFileOptimizationStatus() {}
+ protected DexContainerFileDexoptStatus() {}
/** @hide */
- public static @NonNull DexContainerFileOptimizationStatus create(
- @NonNull String dexContainerFile, boolean isPrimaryDex, boolean isPrimaryAbi,
- @NonNull String abi, @NonNull String compilerFilter,
- @NonNull String compilationReason, @NonNull String locationDebugString) {
- return new AutoValue_OptimizationStatus_DexContainerFileOptimizationStatus(
- dexContainerFile, isPrimaryDex, isPrimaryAbi, abi, compilerFilter,
- compilationReason, locationDebugString);
+ public static @NonNull DexContainerFileDexoptStatus create(@NonNull String dexContainerFile,
+ boolean isPrimaryDex, boolean isPrimaryAbi, @NonNull String abi,
+ @NonNull String compilerFilter, @NonNull String compilationReason,
+ @NonNull String locationDebugString) {
+ return new AutoValue_DexoptStatus_DexContainerFileDexoptStatus(dexContainerFile,
+ isPrimaryDex, isPrimaryAbi, abi, compilerFilter, compilationReason,
+ locationDebugString);
}
/** The absolute path to the dex container file. */
@@ -84,14 +82,14 @@
public abstract boolean isPrimaryDex();
/**
- * 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
+ * If true, the dexopt is for the primary ABI of the package (the ABI that the
+ * application is launched with). Otherwise, the dexopt is for an ABI that other
* applications might be launched with when using this application's code.
*/
public abstract boolean isPrimaryAbi();
/**
- * Returns the ABI that the optimization is for. Possible values are documented at
+ * Returns the ABI that the dexopt is for. Possible values are documented at
* https://developer.android.com/ndk/guides/abis#sa.
*/
public abstract @NonNull String getAbi();
@@ -102,10 +100,10 @@
* Possible values are:
* <ul>
* <li>A valid value of the {@code --compiler-filer} option passed to {@code dex2oat}, if
- * the optimized artifacts are valid. See
+ * the dexopt artifacts are valid. See
* https://source.android.com/docs/core/dalvik/configure#compilation_options.
- * <li>{@code "run-from-apk"}, if the optimized artifacts do not exist.
- * <li>{@code "run-from-apk-fallback"}, if the optimized artifacts exist but are invalid
+ * <li>{@code "run-from-apk"}, if the dexopt artifacts do not exist.
+ * <li>{@code "run-from-apk-fallback"}, if the dexopt artifacts exist but are invalid
* because the dex container file has changed.
* <li>{@code "error"}, if an unexpected error occurs.
* </ul>
@@ -118,12 +116,12 @@
* Possible values are:
* <ul>
* <li>The compilation reason, in text format, passed to {@code dex2oat}.
- * <li>{@code "unknown"}: if the reason is empty or the optimized artifacts do not exist.
+ * <li>{@code "unknown"}: if the reason is empty or the dexopt artifacts do not exist.
* <li>{@code "error"}: if an unexpected error occurs.
* </ul>
*
* Note that this value can differ from the requested compilation reason passed to {@link
- * OptimizeParams.Builder}. Specifically, if the requested reason is for app install (e.g.,
+ * DexoptParams.Builder}. Specifically, if the requested reason is for app install (e.g.,
* "install"), and a DM file is passed to {@code dex2oat}, a "-dm" suffix will be appended
* to the actual reason (e.g., "install-dm"). Other compilation reasons remain unchanged
* even if a DM file is passed to {@code dex2oat}.
@@ -136,7 +134,7 @@
public abstract @NonNull String getCompilationReason();
/**
- * A human-readable string that describes the location of the optimized artifacts.
+ * A human-readable string that describes the location of the dexopt artifacts.
*
* 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.
diff --git a/libartservice/service/java/com/android/server/art/model/OperationProgress.java b/libartservice/service/java/com/android/server/art/model/OperationProgress.java
index 2e46f59..a47a556 100644
--- a/libartservice/service/java/com/android/server/art/model/OperationProgress.java
+++ b/libartservice/service/java/com/android/server/art/model/OperationProgress.java
@@ -44,7 +44,7 @@
/**
* The number of processed items. Can be 0, which means the operation was just started.
*
- * Currently, this is the number of packages, for which optimization has been done, regardless
+ * Currently, this is the number of packages, for which dexopt has been done, regardless
* of the results (performed, failed, skipped, etc.).
*
* @hide
@@ -54,7 +54,7 @@
/**
* The total number of items. Stays constant during the operation.
*
- * Currently, this is the total number of packages to optimize.
+ * Currently, this is the total number of packages to dexopt.
*
* @hide
*/
diff --git a/libartservice/service/java/com/android/server/art/model/OptimizeResult.java b/libartservice/service/java/com/android/server/art/model/OptimizeResult.java
deleted file mode 100644
index 5e9bed6..0000000
--- a/libartservice/service/java/com/android/server/art/model/OptimizeResult.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.art.model;
-
-import android.annotation.DurationMillisLong;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-
-import com.android.internal.annotations.Immutable;
-
-import com.google.auto.value.AutoValue;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-/** @hide */
-@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
-@Immutable
-@AutoValue
-public abstract class OptimizeResult {
- // Possible values of {@link #OptimizeStatus}.
- // A larger number means a higher priority. If multiple dex container files are processed, the
- // final status will be the one with the highest priority.
- public static final int OPTIMIZE_SKIPPED = 10;
- public static final int OPTIMIZE_PERFORMED = 20;
- public static final int OPTIMIZE_FAILED = 30;
- public static final int OPTIMIZE_CANCELLED = 40;
-
- /** @hide */
- // clang-format off
- @IntDef(prefix = {"OPTIMIZE_"}, value = {
- OPTIMIZE_SKIPPED,
- OPTIMIZE_FAILED,
- OPTIMIZE_PERFORMED,
- OPTIMIZE_CANCELLED,
- })
- // clang-format on
- @Retention(RetentionPolicy.SOURCE)
- public @interface OptimizeStatus {}
-
- /** @hide */
- protected OptimizeResult() {}
-
- /** @hide */
- public static @NonNull OptimizeResult create(@NonNull String requestedCompilerFilter,
- @NonNull String reason, @NonNull List<PackageOptimizeResult> packageOptimizeResult) {
- return new AutoValue_OptimizeResult(requestedCompilerFilter, reason, packageOptimizeResult);
- }
-
- /**
- * The requested compiler filter. Note that the compiler filter might be adjusted before the
- * execution based on factors like whether the profile is available or whether the app is
- * used by other apps.
- *
- * @see OptimizeParams.Builder#setCompilerFilter(String)
- * @see DexContainerFileOptimizeResult#getActualCompilerFilter()
- */
- public abstract @NonNull String getRequestedCompilerFilter();
-
- /** The compilation reason. */
- public abstract @NonNull String getReason();
-
- /**
- * The result of each individual package.
- *
- * If the request is to optimize a single package without optimizing dependencies, the only
- * element is the result of the requested package.
- *
- * If the request is to optimize a single package with {@link
- * ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES} set, the first element is the result of the
- * requested package, and the rest are the results of the dependency packages.
- *
- * If the request is to optimize multiple packages, the list contains the results of all the
- * requested packages. The results of their dependency packages are also included if {@link
- * ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES} is set.
- */
- public abstract @NonNull List<PackageOptimizeResult> getPackageOptimizeResults();
-
- /** The final status. */
- public @OptimizeStatus int getFinalStatus() {
- return getPackageOptimizeResults()
- .stream()
- .mapToInt(result -> result.getStatus())
- .max()
- .orElse(OPTIMIZE_SKIPPED);
- }
-
- /**
- * Describes the result of a package.
- *
- * @hide
- */
- @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- @Immutable
- @AutoValue
- public static abstract class PackageOptimizeResult {
- /** @hide */
- protected PackageOptimizeResult() {}
-
- /** @hide */
- public static @NonNull PackageOptimizeResult create(@NonNull String packageName,
- @NonNull List<DexContainerFileOptimizeResult> dexContainerFileOptimizeResults,
- boolean isCanceled) {
- return new AutoValue_OptimizeResult_PackageOptimizeResult(
- packageName, dexContainerFileOptimizeResults, isCanceled);
- }
-
- /** The package name. */
- public abstract @NonNull String getPackageName();
-
- /**
- * The results of optimizing dex container files. Note that there can be multiple entries
- * for the same dex container file, but for different ABIs.
- */
- public abstract @NonNull List<DexContainerFileOptimizeResult>
- getDexContainerFileOptimizeResults();
-
- /** @hide */
- public abstract boolean isCanceled();
-
- /** The overall status of the package. */
- public @OptimizeStatus int getStatus() {
- return isCanceled() ? OPTIMIZE_CANCELLED
- : getDexContainerFileOptimizeResults()
- .stream()
- .mapToInt(result -> result.getStatus())
- .max()
- .orElse(OPTIMIZE_SKIPPED);
- }
-
- /** True if the package has any artifacts updated by this operation. */
- public boolean hasUpdatedArtifacts() {
- return getDexContainerFileOptimizeResults().stream().anyMatch(
- result -> result.getStatus() == OPTIMIZE_PERFORMED);
- }
- }
-
- /**
- * Describes the result of optimizing a dex container file.
- *
- * @hide
- */
- @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- @Immutable
- @AutoValue
- public static abstract class DexContainerFileOptimizeResult {
- /** @hide */
- protected DexContainerFileOptimizeResult() {}
-
- /** @hide */
- public static @NonNull DexContainerFileOptimizeResult create(
- @NonNull String dexContainerFile, boolean isPrimaryAbi, @NonNull String abi,
- @NonNull String compilerFilter, @OptimizeStatus int status,
- long dex2oatWallTimeMillis, long dex2oatCpuTimeMillis, long sizeBytes,
- long sizeBeforeBytes, boolean isSkippedDueToStorageLow) {
- return new AutoValue_OptimizeResult_DexContainerFileOptimizeResult(dexContainerFile,
- isPrimaryAbi, abi, compilerFilter, status, dex2oatWallTimeMillis,
- dex2oatCpuTimeMillis, sizeBytes, sizeBeforeBytes, isSkippedDueToStorageLow);
- }
-
- /** The absolute path to the dex container file. */
- 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 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 abstract @NonNull String getAbi();
-
- /**
- * The actual compiler filter.
- *
- * @see OptimizeParams.Builder#setCompilerFilter(String)
- */
- public abstract @NonNull String getActualCompilerFilter();
-
- /** The status of optimizing this dex container file. */
- public abstract @OptimizeStatus int getStatus();
-
- /**
- * The wall time of the dex2oat invocation, in milliseconds, if dex2oat succeeded or was
- * cancelled. Returns 0 if dex2oat failed or was not run, or if failed to get the value.
- */
- public abstract @DurationMillisLong long getDex2oatWallTimeMillis();
-
- /**
- * The CPU time of the dex2oat invocation, in milliseconds, if dex2oat succeeded or was
- * cancelled. Returns 0 if dex2oat failed or was not run, or if failed to get the value.
- */
- public abstract @DurationMillisLong long getDex2oatCpuTimeMillis();
-
- /**
- * The total size, in bytes, of the optimized artifacts. Returns 0 if {@link #getStatus()}
- * is not {@link #OPTIMIZE_PERFORMED}.
- */
- public abstract long getSizeBytes();
-
- /**
- * The total size, in bytes, of the previous optimized artifacts that has been replaced.
- * Returns 0 if there were no previous optimized artifacts or {@link #getStatus()} is not
- * {@link #OPTIMIZE_PERFORMED}.
- */
- public abstract long getSizeBeforeBytes();
-
- /** @hide */
- public abstract boolean isSkippedDueToStorageLow();
- }
-}
diff --git a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
index 5ff36a9..51987c7 100644
--- a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
+++ b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
@@ -19,7 +19,7 @@
import static android.os.ParcelFileDescriptor.AutoCloseInputStream;
import static com.android.server.art.DexUseManagerLocal.SecondaryDexInfo;
-import static com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus;
+import static com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus;
import static com.android.server.art.testing.TestingUtils.deepEq;
import static com.android.server.art.testing.TestingUtils.inAnyOrder;
import static com.android.server.art.testing.TestingUtils.inAnyOrderDeepEquals;
@@ -58,9 +58,9 @@
import com.android.server.art.model.Config;
import com.android.server.art.model.DeleteResult;
-import com.android.server.art.model.OptimizationStatus;
-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.art.model.DexoptStatus;
import com.android.server.art.testing.StaticMockitoRule;
import com.android.server.art.testing.TestingUtils;
import com.android.server.pm.PackageManagerLocal;
@@ -111,7 +111,7 @@
@Mock private PackageManagerLocal mPackageManagerLocal;
@Mock private PackageManagerLocal.FilteredSnapshot mSnapshot;
@Mock private IArtd mArtd;
- @Mock private DexOptHelper mDexOptHelper;
+ @Mock private DexoptHelper mDexOptHelper;
@Mock private AppHibernationManager mAppHibernationManager;
@Mock private UserManager mUserManager;
@Mock private DexUseManagerLocal mDexUseManager;
@@ -215,10 +215,10 @@
}
@Test
- public void testDeleteOptimizedArtifacts() throws Exception {
+ public void testdeleteDexoptArtifacts() throws Exception {
when(mArtd.deleteArtifacts(any())).thenReturn(1l);
- DeleteResult result = mArtManagerLocal.deleteOptimizedArtifacts(mSnapshot, PKG_NAME);
+ DeleteResult result = mArtManagerLocal.deleteDexoptArtifacts(mSnapshot, PKG_NAME);
assertThat(result.getFreedBytes()).isEqualTo(5);
verify(mArtd).deleteArtifacts(deepEq(AidlUtils.buildArtifactsPath(
@@ -235,7 +235,7 @@
}
@Test
- public void testDeleteOptimizedArtifactsTranslatedIsas() throws Exception {
+ public void testdeleteDexoptArtifactsTranslatedIsas() throws Exception {
lenient().when(SystemProperties.get("ro.dalvik.vm.isa.arm64")).thenReturn("x86_64");
lenient().when(SystemProperties.get("ro.dalvik.vm.isa.arm")).thenReturn("x86");
lenient().when(Constants.getPreferredAbi()).thenReturn("x86_64");
@@ -244,7 +244,7 @@
when(mArtd.deleteArtifacts(any())).thenReturn(1l);
- DeleteResult result = mArtManagerLocal.deleteOptimizedArtifacts(mSnapshot, PKG_NAME);
+ DeleteResult result = mArtManagerLocal.deleteDexoptArtifacts(mSnapshot, PKG_NAME);
assertThat(result.getFreedBytes()).isEqualTo(5);
verify(mArtd).deleteArtifacts(deepEq(AidlUtils.buildArtifactsPath(
@@ -262,90 +262,88 @@
}
@Test(expected = IllegalArgumentException.class)
- public void testDeleteOptimizedArtifactsPackageNotFound() throws Exception {
+ public void testdeleteDexoptArtifactsPackageNotFound() throws Exception {
when(mSnapshot.getPackageState(anyString())).thenReturn(null);
- mArtManagerLocal.deleteOptimizedArtifacts(mSnapshot, PKG_NAME);
+ mArtManagerLocal.deleteDexoptArtifacts(mSnapshot, PKG_NAME);
}
@Test(expected = IllegalArgumentException.class)
- public void testDeleteOptimizedArtifactsNoPackage() throws Exception {
+ public void testdeleteDexoptArtifactsNoPackage() throws Exception {
when(mPkgState.getAndroidPackage()).thenReturn(null);
- mArtManagerLocal.deleteOptimizedArtifacts(mSnapshot, PKG_NAME);
+ mArtManagerLocal.deleteDexoptArtifacts(mSnapshot, PKG_NAME);
}
@Test
- public void testGetOptimizationStatus() throws Exception {
- doReturn(createGetOptimizationStatusResult(
+ public void testGetDexoptStatus() throws Exception {
+ doReturn(createGetDexoptStatusResult(
"speed", "compilation-reason-0", "location-debug-string-0"))
.when(mArtd)
- .getOptimizationStatus("/data/app/foo/base.apk", "arm64", "PCL[]");
- doReturn(createGetOptimizationStatusResult(
+ .getDexoptStatus("/data/app/foo/base.apk", "arm64", "PCL[]");
+ doReturn(createGetDexoptStatusResult(
"speed-profile", "compilation-reason-1", "location-debug-string-1"))
.when(mArtd)
- .getOptimizationStatus("/data/app/foo/base.apk", "arm", "PCL[]");
- doReturn(createGetOptimizationStatusResult(
+ .getDexoptStatus("/data/app/foo/base.apk", "arm", "PCL[]");
+ doReturn(createGetDexoptStatusResult(
"verify", "compilation-reason-2", "location-debug-string-2"))
.when(mArtd)
- .getOptimizationStatus("/data/app/foo/split_0.apk", "arm64", "PCL[base.apk]");
- doReturn(createGetOptimizationStatusResult(
+ .getDexoptStatus("/data/app/foo/split_0.apk", "arm64", "PCL[base.apk]");
+ doReturn(createGetDexoptStatusResult(
"extract", "compilation-reason-3", "location-debug-string-3"))
.when(mArtd)
- .getOptimizationStatus("/data/app/foo/split_0.apk", "arm", "PCL[base.apk]");
- doReturn(createGetOptimizationStatusResult("run-from-apk", "unknown", "unknown"))
+ .getDexoptStatus("/data/app/foo/split_0.apk", "arm", "PCL[base.apk]");
+ doReturn(createGetDexoptStatusResult("run-from-apk", "unknown", "unknown"))
.when(mArtd)
- .getOptimizationStatus("/data/user/0/foo/1.apk", "arm64", "CLC");
+ .getDexoptStatus("/data/user/0/foo/1.apk", "arm64", "CLC");
- OptimizationStatus result = mArtManagerLocal.getOptimizationStatus(mSnapshot, PKG_NAME);
+ DexoptStatus result = mArtManagerLocal.getDexoptStatus(mSnapshot, PKG_NAME);
- assertThat(result.getDexContainerFileOptimizationStatuses())
- .comparingElementsUsing(
- TestingUtils.<DexContainerFileOptimizationStatus>deepEquality())
+ assertThat(result.getDexContainerFileDexoptStatuses())
+ .comparingElementsUsing(TestingUtils.<DexContainerFileDexoptStatus>deepEquality())
.containsExactly(
- DexContainerFileOptimizationStatus.create("/data/app/foo/base.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/base.apk",
true /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"speed", "compilation-reason-0", "location-debug-string-0"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/base.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/base.apk",
true /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"speed-profile", "compilation-reason-1", "location-debug-string-1"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/split_0.apk",
true /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"verify", "compilation-reason-2", "location-debug-string-2"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/split_0.apk",
true /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"extract", "compilation-reason-3", "location-debug-string-3"),
- DexContainerFileOptimizationStatus.create("/data/user/0/foo/1.apk",
+ DexContainerFileDexoptStatus.create("/data/user/0/foo/1.apk",
false /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"run-from-apk", "unknown", "unknown"));
}
@Test(expected = IllegalArgumentException.class)
- public void testGetOptimizationStatusPackageNotFound() throws Exception {
+ public void testGetDexoptStatusPackageNotFound() throws Exception {
when(mSnapshot.getPackageState(anyString())).thenReturn(null);
- mArtManagerLocal.getOptimizationStatus(mSnapshot, PKG_NAME);
+ mArtManagerLocal.getDexoptStatus(mSnapshot, PKG_NAME);
}
@Test(expected = IllegalArgumentException.class)
- public void testGetOptimizationStatusNoPackage() throws Exception {
+ public void testGetDexoptStatusNoPackage() throws Exception {
when(mPkgState.getAndroidPackage()).thenReturn(null);
- mArtManagerLocal.getOptimizationStatus(mSnapshot, PKG_NAME);
+ mArtManagerLocal.getDexoptStatus(mSnapshot, PKG_NAME);
}
@Test
- public void testGetOptimizationStatusNonFatalError() throws Exception {
- when(mArtd.getOptimizationStatus(any(), any(), any()))
+ public void testGetDexoptStatusNonFatalError() throws Exception {
+ when(mArtd.getDexoptStatus(any(), any(), any()))
.thenThrow(new ServiceSpecificException(1 /* errorCode */, "some error message"));
- OptimizationStatus result = mArtManagerLocal.getOptimizationStatus(mSnapshot, PKG_NAME);
+ DexoptStatus result = mArtManagerLocal.getDexoptStatus(mSnapshot, PKG_NAME);
- List<DexContainerFileOptimizationStatus> statuses =
- result.getDexContainerFileOptimizationStatuses();
+ List<DexContainerFileDexoptStatus> statuses = result.getDexContainerFileDexoptStatuses();
assertThat(statuses.size()).isEqualTo(5);
- for (DexContainerFileOptimizationStatus status : statuses) {
+ for (DexContainerFileDexoptStatus status : statuses) {
assertThat(status.getCompilerFilter()).isEqualTo("error");
assertThat(status.getCompilationReason()).isEqualTo("error");
assertThat(status.getLocationDebugString()).isEqualTo("some error message");
@@ -384,31 +382,29 @@
}
@Test
- public void testOptimizePackage() throws Exception {
- var params = new OptimizeParams.Builder("install").build();
- var result = mock(OptimizeResult.class);
+ public void testDexoptPackage() throws Exception {
+ var params = new DexoptParams.Builder("install").build();
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
when(mDexOptHelper.dexopt(any(), deepEq(List.of(PKG_NAME)), same(params),
same(cancellationSignal), any()))
.thenReturn(result);
- assertThat(
- mArtManagerLocal.optimizePackage(mSnapshot, PKG_NAME, params, cancellationSignal))
+ assertThat(mArtManagerLocal.dexoptPackage(mSnapshot, PKG_NAME, params, cancellationSignal))
.isSameInstanceAs(result);
}
@Test
- public void testResetOptimizationStatus() throws Exception {
- var result = mock(OptimizeResult.class);
+ public void testResetDexoptStatus() throws Exception {
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
when(mDexOptHelper.dexopt(
any(), deepEq(List.of(PKG_NAME)), any(), same(cancellationSignal), any()))
.thenReturn(result);
- assertThat(
- mArtManagerLocal.resetOptimizationStatus(mSnapshot, PKG_NAME, cancellationSignal))
+ assertThat(mArtManagerLocal.resetDexoptStatus(mSnapshot, PKG_NAME, cancellationSignal))
.isSameInstanceAs(result);
verify(mArtd).deleteProfile(
@@ -437,23 +433,23 @@
}
@Test
- public void testOptimizePackages() throws Exception {
- var optimizeResult = mock(OptimizeResult.class);
+ public void testDexoptPackages() throws Exception {
+ var dexoptResult = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
when(mDexUseManager.getPackageLastUsedAtMs(PKG_NAME_SYS_UI)).thenReturn(CURRENT_TIME_MS);
when(mStorageManager.getAllocatableBytes(any())).thenReturn(999l);
// It should use the default package list and params. The list is sorted by last active
// time in descending order.
- doReturn(optimizeResult)
+ doReturn(dexoptResult)
.when(mDexOptHelper)
.dexopt(any(), deepEq(List.of(PKG_NAME_SYS_UI, PKG_NAME)),
argThat(params -> params.getReason().equals("bg-dexopt")),
same(cancellationSignal), any(), any(), any());
- assertThat(mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ assertThat(mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */))
- .isSameInstanceAs(optimizeResult);
+ .isSameInstanceAs(dexoptResult);
// Nothing to downgrade.
verify(mDexOptHelper, never())
@@ -462,24 +458,24 @@
}
@Test
- public void testOptimizePackagesRecentlyInstalled() throws Exception {
+ public void testDexoptPackagesRecentlyInstalled() throws Exception {
// The package is recently installed but hasn't been used.
PackageUserState userState = mPkgState.getStateForUser(UserHandle.of(1));
when(userState.getFirstInstallTimeMillis()).thenReturn(RECENT_TIME_MS);
when(mDexUseManager.getPackageLastUsedAtMs(PKG_NAME)).thenReturn(0l);
when(mStorageManager.getAllocatableBytes(any())).thenReturn(999l);
- var result = mock(OptimizeResult.class);
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
- // PKG_NAME should be optimized.
+ // PKG_NAME should be dexopted.
doReturn(result)
.when(mDexOptHelper)
.dexopt(any(), inAnyOrder(PKG_NAME, PKG_NAME_SYS_UI),
argThat(params -> params.getReason().equals("bg-dexopt")), any(), any(),
any(), any());
- mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */);
// PKG_NAME should not be downgraded.
@@ -489,17 +485,17 @@
}
@Test
- public void testOptimizePackagesInactive() throws Exception {
+ public void testDexoptPackagesInactive() throws Exception {
// PKG_NAME is neither recently installed nor recently used.
PackageUserState userState = mPkgState.getStateForUser(UserHandle.of(1));
when(userState.getFirstInstallTimeMillis()).thenReturn(NOT_RECENT_TIME_MS);
when(mDexUseManager.getPackageLastUsedAtMs(PKG_NAME)).thenReturn(NOT_RECENT_TIME_MS);
when(mStorageManager.getAllocatableBytes(any())).thenReturn(999l);
- var result = mock(OptimizeResult.class);
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
- // PKG_NAME should not be optimized.
+ // PKG_NAME should not be dexopted.
doReturn(result)
.when(mDexOptHelper)
.dexopt(any(), deepEq(List.of(PKG_NAME_SYS_UI)),
@@ -513,22 +509,22 @@
argThat(params -> params.getReason().equals("inactive")), any(), any(),
any(), any());
- mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */);
}
@Test
- public void testOptimizePackagesBootAfterMainlineUpdate() throws Exception {
- var result = mock(OptimizeResult.class);
+ public void testDexoptPackagesBootAfterMainlineUpdate() throws Exception {
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
lenient().when(mStorageManager.getAllocatableBytes(any())).thenReturn(999l);
- // It should only optimize system UI.
+ // It should only dexopt system UI.
when(mDexOptHelper.dexopt(
any(), deepEq(List.of(PKG_NAME_SYS_UI)), any(), any(), any(), any(), any()))
.thenReturn(result);
- assertThat(mArtManagerLocal.optimizePackages(mSnapshot, "boot-after-mainline-update",
+ assertThat(mArtManagerLocal.dexoptPackages(mSnapshot, "boot-after-mainline-update",
cancellationSignal, null /* processCallbackExecutor */,
null /* processCallback */))
.isSameInstanceAs(result);
@@ -540,23 +536,23 @@
}
@Test
- public void testOptimizePackagesOverride() throws Exception {
+ public void testDexoptPackagesOverride() throws Exception {
// PKG_NAME is neither recently installed nor recently used.
PackageUserState userState = mPkgState.getStateForUser(UserHandle.of(1));
when(userState.getFirstInstallTimeMillis()).thenReturn(NOT_RECENT_TIME_MS);
when(mDexUseManager.getPackageLastUsedAtMs(PKG_NAME)).thenReturn(NOT_RECENT_TIME_MS);
when(mStorageManager.getAllocatableBytes(any())).thenReturn(999l);
- var params = new OptimizeParams.Builder("bg-dexopt").build();
- var result = mock(OptimizeResult.class);
+ var params = new DexoptParams.Builder("bg-dexopt").build();
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
- mArtManagerLocal.setOptimizePackagesCallback(ForkJoinPool.commonPool(),
+ mArtManagerLocal.setBatchDexoptStartCallback(ForkJoinPool.commonPool(),
(snapshot, reason, defaultPackages, builder, passedSignal) -> {
assertThat(reason).isEqualTo("bg-dexopt");
assertThat(defaultPackages).containsExactly(PKG_NAME_SYS_UI);
assertThat(passedSignal).isSameInstanceAs(cancellationSignal);
- builder.setPackages(List.of(PKG_NAME)).setOptimizeParams(params);
+ builder.setPackages(List.of(PKG_NAME)).setDexoptParams(params);
});
// It should use the overridden package list and params.
@@ -564,7 +560,7 @@
.when(mDexOptHelper)
.dexopt(any(), deepEq(List.of(PKG_NAME)), same(params), any(), any(), any(), any());
- mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */);
// It should not downgrade PKG_NAME because it's in the overridden package list. It should
@@ -575,38 +571,38 @@
}
@Test
- public void testOptimizePackagesOverrideCleared() throws Exception {
- var params = new OptimizeParams.Builder("bg-dexopt").build();
- var result = mock(OptimizeResult.class);
+ public void testDexoptPackagesOverrideCleared() throws Exception {
+ var params = new DexoptParams.Builder("bg-dexopt").build();
+ var result = mock(DexoptResult.class);
var cancellationSignal = new CancellationSignal();
- mArtManagerLocal.setOptimizePackagesCallback(ForkJoinPool.commonPool(),
+ mArtManagerLocal.setBatchDexoptStartCallback(ForkJoinPool.commonPool(),
(snapshot, reason, defaultPackages, builder, passedSignal) -> {
- builder.setPackages(List.of(PKG_NAME)).setOptimizeParams(params);
+ builder.setPackages(List.of(PKG_NAME)).setDexoptParams(params);
});
- mArtManagerLocal.clearOptimizePackagesCallback();
+ mArtManagerLocal.clearBatchDexoptStartCallback();
// It should use the default package list and params.
when(mDexOptHelper.dexopt(any(), inAnyOrder(PKG_NAME, PKG_NAME_SYS_UI), not(same(params)),
same(cancellationSignal), any(), any(), any()))
.thenReturn(result);
- assertThat(mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ assertThat(mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */))
.isSameInstanceAs(result);
}
@Test(expected = IllegalStateException.class)
- public void testOptimizePackagesOverrideReasonChanged() throws Exception {
- var params = new OptimizeParams.Builder("first-boot").build();
+ public void testDexoptPackagesOverrideReasonChanged() throws Exception {
+ var params = new DexoptParams.Builder("first-boot").build();
var cancellationSignal = new CancellationSignal();
- mArtManagerLocal.setOptimizePackagesCallback(ForkJoinPool.commonPool(),
+ mArtManagerLocal.setBatchDexoptStartCallback(ForkJoinPool.commonPool(),
(snapshot, reason, defaultPackages, builder, passedSignal) -> {
- builder.setOptimizeParams(params);
+ builder.setDexoptParams(params);
});
- mArtManagerLocal.optimizePackages(mSnapshot, "bg-dexopt", cancellationSignal,
+ mArtManagerLocal.dexoptPackages(mSnapshot, "bg-dexopt", cancellationSignal,
null /* processCallbackExecutor */, null /* processCallback */);
}
@@ -842,7 +838,7 @@
PackageState sysUiPkgState = createPackageState(
PKG_NAME_SYS_UI, 1234 /* appId */, true /* hasPackage */, false /* multiSplit */);
- // This should not be optimized because it's hibernating. However, it should be included
+ // This should not be dexopted because it's hibernating. However, it should be included
// when snapshotting boot image profile.
PackageState pkgHibernatingState = createPackageState(PKG_NAME_HIBERNATING,
10002 /* appId */, true /* hasPackage */, false /* multiSplit */);
@@ -850,15 +846,15 @@
.when(mAppHibernationManager.isHibernatingGlobally(PKG_NAME_HIBERNATING))
.thenReturn(true);
- // This should not be optimized because it does't have AndroidPackage.
+ // This should not be dexopted because it does't have AndroidPackage.
PackageState nullPkgState = createPackageState("com.example.null", 10003 /* appId */,
false /* hasPackage */, false /* multiSplit */);
- // This should not be optimized because it has a negative app id.
+ // This should not be dexopted because it has a negative app id.
PackageState apexPkgState = createPackageState(
"com.android.art", -1 /* appId */, true /* hasPackage */, false /* multiSplit */);
- // This should not be optimized because it's "android".
+ // This should not be dexopted because it's "android".
PackageState platformPkgState = createPackageState(Utils.PLATFORM_PACKAGE_NAME,
1000 /* appId */, true /* hasPackage */, false /* multiSplit */);
@@ -866,13 +862,13 @@
platformPkgState);
}
- private GetOptimizationStatusResult createGetOptimizationStatusResult(
+ private GetDexoptStatusResult createGetDexoptStatusResult(
String compilerFilter, String compilationReason, String locationDebugString) {
- var getOptimizationStatusResult = new GetOptimizationStatusResult();
- getOptimizationStatusResult.compilerFilter = compilerFilter;
- getOptimizationStatusResult.compilationReason = compilationReason;
- getOptimizationStatusResult.locationDebugString = locationDebugString;
- return getOptimizationStatusResult;
+ var getDexoptStatusResult = new GetDexoptStatusResult();
+ getDexoptStatusResult.compilerFilter = compilerFilter;
+ getDexoptStatusResult.compilationReason = compilationReason;
+ getDexoptStatusResult.locationDebugString = locationDebugString;
+ return getDexoptStatusResult;
}
private List<? extends SecondaryDexInfo> createSecondaryDexInfo() throws Exception {
diff --git a/libartservice/service/javatests/com/android/server/art/BackgroundDexOptJobTest.java b/libartservice/service/javatests/com/android/server/art/BackgroundDexoptJobTest.java
similarity index 79%
rename from libartservice/service/javatests/com/android/server/art/BackgroundDexOptJobTest.java
rename to libartservice/service/javatests/com/android/server/art/BackgroundDexoptJobTest.java
index 31d0455..6f2e825 100644
--- a/libartservice/service/javatests/com/android/server/art/BackgroundDexOptJobTest.java
+++ b/libartservice/service/javatests/com/android/server/art/BackgroundDexoptJobTest.java
@@ -40,12 +40,12 @@
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
-import com.android.server.art.BackgroundDexOptJob.CompletedResult;
-import com.android.server.art.BackgroundDexOptJob.FatalErrorResult;
-import com.android.server.art.BackgroundDexOptJob.Result;
+import com.android.server.art.BackgroundDexoptJob.CompletedResult;
+import com.android.server.art.BackgroundDexoptJob.FatalErrorResult;
+import com.android.server.art.BackgroundDexoptJob.Result;
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.Config;
-import com.android.server.art.model.OptimizeResult;
+import com.android.server.art.model.DexoptResult;
import com.android.server.art.testing.StaticMockitoRule;
import com.android.server.pm.PackageManagerLocal;
@@ -62,23 +62,23 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-public class BackgroundDexOptJobTest {
+public class BackgroundDexoptJobTest {
private static final long TIMEOUT_SEC = 1;
@Rule
public StaticMockitoRule mockitoRule =
- new StaticMockitoRule(SystemProperties.class, BackgroundDexOptJobService.class);
+ new StaticMockitoRule(SystemProperties.class, BackgroundDexoptJobService.class);
- @Mock private BackgroundDexOptJob.Injector mInjector;
+ @Mock private BackgroundDexoptJob.Injector mInjector;
@Mock private ArtManagerLocal mArtManagerLocal;
@Mock private PackageManagerLocal mPackageManagerLocal;
@Mock private PackageManagerLocal.FilteredSnapshot mSnapshot;
@Mock private JobScheduler mJobScheduler;
- @Mock private OptimizeResult mOptimizeResult;
- @Mock private BackgroundDexOptJobService mJobService;
+ @Mock private DexoptResult mDexoptResult;
+ @Mock private BackgroundDexoptJobService mJobService;
@Mock private JobParameters mJobParameters;
private Config mConfig;
- private BackgroundDexOptJob mBackgroundDexOptJob;
+ private BackgroundDexoptJob mBackgroundDexOptJob;
private Semaphore mJobFinishedCalled = new Semaphore(0);
@Before
@@ -96,8 +96,8 @@
lenient().when(mInjector.getConfig()).thenReturn(mConfig);
lenient().when(mInjector.getJobScheduler()).thenReturn(mJobScheduler);
- mBackgroundDexOptJob = new BackgroundDexOptJob(mInjector);
- lenient().when(BackgroundDexOptJobService.getJob()).thenReturn(mBackgroundDexOptJob);
+ mBackgroundDexOptJob = new BackgroundDexoptJob(mInjector);
+ lenient().when(BackgroundDexoptJobService.getJob()).thenReturn(mBackgroundDexOptJob);
lenient()
.doAnswer(invocation -> {
@@ -114,38 +114,38 @@
@Test
public void testStart() {
- when(mArtManagerLocal.optimizePackages(
+ when(mArtManagerLocal.dexoptPackages(
same(mSnapshot), eq(ReasonMapping.REASON_BG_DEXOPT), any(), any(), any()))
- .thenReturn(mOptimizeResult);
+ .thenReturn(mDexoptResult);
Result result = Utils.getFuture(mBackgroundDexOptJob.start());
assertThat(result).isInstanceOf(CompletedResult.class);
- assertThat(((CompletedResult) result).dexoptResult()).isSameInstanceAs(mOptimizeResult);
+ assertThat(((CompletedResult) result).dexoptResult()).isSameInstanceAs(mDexoptResult);
}
@Test
public void testStartAlreadyRunning() {
- Semaphore optimizeDone = new Semaphore(0);
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
+ Semaphore dexoptDone = new Semaphore(0);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
.thenAnswer(invocation -> {
- assertThat(optimizeDone.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
- return mOptimizeResult;
+ assertThat(dexoptDone.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
+ return mDexoptResult;
});
Future<Result> future1 = mBackgroundDexOptJob.start();
Future<Result> future2 = mBackgroundDexOptJob.start();
assertThat(future1).isSameInstanceAs(future2);
- optimizeDone.release();
+ dexoptDone.release();
Utils.getFuture(future1);
- verify(mArtManagerLocal, times(1)).optimizePackages(any(), any(), any(), any(), any());
+ verify(mArtManagerLocal, times(1)).dexoptPackages(any(), any(), any(), any(), any());
}
@Test
public void testStartAnother() {
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
- .thenReturn(mOptimizeResult);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
+ .thenReturn(mDexoptResult);
Future<Result> future1 = mBackgroundDexOptJob.start();
Utils.getFuture(future1);
@@ -156,7 +156,7 @@
@Test
public void testStartFatalError() {
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
.thenThrow(IllegalStateException.class);
Result result = Utils.getFuture(mBackgroundDexOptJob.start());
@@ -169,8 +169,8 @@
.when(SystemProperties.getBoolean(eq("pm.dexopt.disable_bg_dexopt"), anyBoolean()))
.thenReturn(true);
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
- .thenReturn(mOptimizeResult);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
+ .thenReturn(mDexoptResult);
// The `start` method should ignore the system property. The system property is for
// `schedule`.
@@ -179,19 +179,18 @@
@Test
public void testCancel() {
- Semaphore optimizeCancelled = new Semaphore(0);
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
+ Semaphore dexoptCancelled = new Semaphore(0);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
.thenAnswer(invocation -> {
- assertThat(optimizeCancelled.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS))
- .isTrue();
+ assertThat(dexoptCancelled.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
var cancellationSignal = invocation.<CancellationSignal>getArgument(2);
assertThat(cancellationSignal.isCanceled()).isTrue();
- return mOptimizeResult;
+ return mDexoptResult;
});
Future<Result> future = mBackgroundDexOptJob.start();
mBackgroundDexOptJob.cancel();
- optimizeCancelled.release();
+ dexoptCancelled.release();
Utils.getFuture(future);
}
@@ -203,7 +202,7 @@
assertThat(mBackgroundDexOptJob.schedule()).isEqualTo(ArtFlags.SCHEDULE_SUCCESS);
JobInfo jobInfo = captor.getValue();
- assertThat(jobInfo.getIntervalMillis()).isEqualTo(BackgroundDexOptJob.JOB_INTERVAL_MS);
+ assertThat(jobInfo.getIntervalMillis()).isEqualTo(BackgroundDexoptJob.JOB_INTERVAL_MS);
assertThat(jobInfo.isRequireDeviceIdle()).isTrue();
assertThat(jobInfo.isRequireCharging()).isTrue();
assertThat(jobInfo.isRequireBatteryNotLow()).isTrue();
@@ -234,7 +233,7 @@
assertThat(mBackgroundDexOptJob.schedule()).isEqualTo(ArtFlags.SCHEDULE_SUCCESS);
JobInfo jobInfo = captor.getValue();
- assertThat(jobInfo.getIntervalMillis()).isEqualTo(BackgroundDexOptJob.JOB_INTERVAL_MS);
+ assertThat(jobInfo.getIntervalMillis()).isEqualTo(BackgroundDexoptJob.JOB_INTERVAL_MS);
assertThat(jobInfo.isRequireDeviceIdle()).isTrue();
assertThat(jobInfo.isRequireCharging()).isTrue();
assertThat(jobInfo.isRequireBatteryNotLow()).isFalse();
@@ -272,9 +271,9 @@
@Test
public void testWantsRescheduleFalsePerformed() throws Exception {
- when(mOptimizeResult.getFinalStatus()).thenReturn(OptimizeResult.OPTIMIZE_PERFORMED);
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
- .thenReturn(mOptimizeResult);
+ when(mDexoptResult.getFinalStatus()).thenReturn(DexoptResult.DEXOPT_PERFORMED);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
+ .thenReturn(mDexoptResult);
mBackgroundDexOptJob.onStartJob(mJobService, mJobParameters);
assertThat(mJobFinishedCalled.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
@@ -284,7 +283,7 @@
@Test
public void testWantsRescheduleFalseFatalError() throws Exception {
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
.thenThrow(RuntimeException.class);
mBackgroundDexOptJob.onStartJob(mJobService, mJobParameters);
@@ -295,9 +294,9 @@
@Test
public void testWantsRescheduleTrue() throws Exception {
- when(mOptimizeResult.getFinalStatus()).thenReturn(OptimizeResult.OPTIMIZE_CANCELLED);
- when(mArtManagerLocal.optimizePackages(any(), any(), any(), any(), any()))
- .thenReturn(mOptimizeResult);
+ when(mDexoptResult.getFinalStatus()).thenReturn(DexoptResult.DEXOPT_CANCELLED);
+ when(mArtManagerLocal.dexoptPackages(any(), any(), any(), any(), any()))
+ .thenReturn(mDexoptResult);
mBackgroundDexOptJob.onStartJob(mJobService, mJobParameters);
assertThat(mJobFinishedCalled.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
diff --git a/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java b/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
index 71735bb..8530828 100644
--- a/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
+++ b/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
@@ -16,10 +16,10 @@
package com.android.server.art;
-import static com.android.server.art.ArtManagerLocal.OptimizePackageDoneCallback;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
-import static com.android.server.art.model.OptimizeResult.OptimizeStatus;
-import static com.android.server.art.model.OptimizeResult.PackageOptimizeResult;
+import static com.android.server.art.ArtManagerLocal.DexoptDoneCallback;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
+import static com.android.server.art.model.DexoptResult.DexoptResultStatus;
+import static com.android.server.art.model.DexoptResult.PackageDexoptResult;
import static com.google.common.truth.Truth.assertThat;
@@ -46,9 +46,9 @@
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.Config;
+import com.android.server.art.model.DexoptParams;
+import com.android.server.art.model.DexoptResult;
import com.android.server.art.model.OperationProgress;
-import com.android.server.art.model.OptimizeParams;
-import com.android.server.art.model.OptimizeResult;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.AndroidPackageSplit;
@@ -82,7 +82,7 @@
private static final String PKG_NAME_LIB4 = "com.example.lib4";
private static final String PKG_NAME_LIBBAZ = "com.example.libbaz";
- @Mock private DexOptHelper.Injector mInjector;
+ @Mock private DexoptHelper.Injector mInjector;
@Mock private PrimaryDexOptimizer mPrimaryDexOptimizer;
@Mock private SecondaryDexOptimizer mSecondaryDexOptimizer;
@Mock private AppHibernationManager mAhm;
@@ -103,12 +103,12 @@
private AndroidPackage mPkgLibbaz;
private CancellationSignal mCancellationSignal;
private ExecutorService mExecutor;
- private List<DexContainerFileOptimizeResult> mPrimaryResults;
- private List<DexContainerFileOptimizeResult> mSecondaryResults;
+ private List<DexContainerFileDexoptResult> mPrimaryResults;
+ private List<DexContainerFileDexoptResult> mSecondaryResults;
private Config mConfig;
- private OptimizeParams mParams;
+ private DexoptParams mParams;
private List<String> mRequestedPackages;
- private DexOptHelper mDexOptHelper;
+ private DexoptHelper mDexOptHelper;
@Before
public void setUp() throws Exception {
@@ -125,12 +125,12 @@
preparePackagesAndLibraries();
- mPrimaryResults = createResults("/data/app/foo/base.apk",
- OptimizeResult.OPTIMIZE_PERFORMED /* status1 */,
- OptimizeResult.OPTIMIZE_PERFORMED /* status2 */);
+ mPrimaryResults =
+ createResults("/data/app/foo/base.apk", DexoptResult.DEXOPT_PERFORMED /* status1 */,
+ DexoptResult.DEXOPT_PERFORMED /* status2 */);
mSecondaryResults = createResults("/data/user_de/0/foo/foo.apk",
- OptimizeResult.OPTIMIZE_PERFORMED /* status1 */,
- OptimizeResult.OPTIMIZE_PERFORMED /* status2 */);
+ DexoptResult.DEXOPT_PERFORMED /* status1 */,
+ DexoptResult.DEXOPT_PERFORMED /* status2 */);
lenient()
.when(mInjector.getPrimaryDexOptimizer(any(), any(), any(), any()))
@@ -142,7 +142,7 @@
.thenReturn(mSecondaryDexOptimizer);
lenient().when(mSecondaryDexOptimizer.dexopt()).thenReturn(mSecondaryResults);
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_SECONDARY_DEX
| ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES,
@@ -154,7 +154,7 @@
lenient().when(mInjector.getPowerManager()).thenReturn(mPowerManager);
lenient().when(mInjector.getConfig()).thenReturn(mConfig);
- mDexOptHelper = new DexOptHelper(mInjector);
+ mDexOptHelper = new DexoptHelper(mInjector);
}
@After
@@ -166,33 +166,33 @@
public void testDexopt() throws Exception {
// Only package libbaz fails.
var failingPrimaryDexOptimizer = mock(PrimaryDexOptimizer.class);
- List<DexContainerFileOptimizeResult> partialFailureResults = createResults(
- "/data/app/foo/base.apk", OptimizeResult.OPTIMIZE_PERFORMED /* status1 */,
- OptimizeResult.OPTIMIZE_FAILED /* status2 */);
+ List<DexContainerFileDexoptResult> partialFailureResults =
+ createResults("/data/app/foo/base.apk", DexoptResult.DEXOPT_PERFORMED /* status1 */,
+ DexoptResult.DEXOPT_FAILED /* status2 */);
lenient().when(failingPrimaryDexOptimizer.dexopt()).thenReturn(partialFailureResults);
when(mInjector.getPrimaryDexOptimizer(same(mPkgStateLibbaz), any(), any(), any()))
.thenReturn(failingPrimaryDexOptimizer);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
assertThat(result.getRequestedCompilerFilter()).isEqualTo("speed-profile");
assertThat(result.getReason()).isEqualTo("install");
- assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_FAILED);
+ assertThat(result.getFinalStatus()).isEqualTo(DexoptResult.DEXOPT_FAILED);
// The requested packages must come first.
- assertThat(result.getPackageOptimizeResults()).hasSize(6);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getPackageDexoptResults()).hasSize(6);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, OptimizeResult.OPTIMIZE_FAILED,
+ checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_FAILED,
List.of(partialFailureResults, mSecondaryResults));
- checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
// The order matters. It should acquire the wake lock only once, at the beginning, and
@@ -235,51 +235,51 @@
@Test
public void testDexoptNoDependencies() throws Exception {
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_SECONDARY_DEX,
ArtFlags.FLAG_FOR_SECONDARY_DEX
| ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES)
.build();
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getPackageOptimizeResults()).hasSize(3);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getPackageDexoptResults()).hasSize(3);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ,
- OptimizeResult.OPTIMIZE_PERFORMED, List.of(mPrimaryResults, mSecondaryResults));
+ checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_PERFORMED,
+ List.of(mPrimaryResults, mSecondaryResults));
verifyNoMoreDexopt(3 /* expectedPrimaryTimes */, 3 /* expectedSecondaryTimes */);
}
@Test
public void testDexoptPrimaryOnly() throws Exception {
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES,
ArtFlags.FLAG_FOR_SECONDARY_DEX
| ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES)
.build();
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getPackageOptimizeResults()).hasSize(6);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getPackageDexoptResults()).hasSize(6);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ,
- OptimizeResult.OPTIMIZE_PERFORMED, List.of(mPrimaryResults));
- checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, DexoptResult.DEXOPT_PERFORMED,
+ List.of(mPrimaryResults));
+ checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
verifyNoMoreDexopt(6 /* expectedPrimaryTimes */, 0 /* expectedSecondaryTimes */);
@@ -287,23 +287,23 @@
@Test
public void testDexoptPrimaryOnlyNoDependencies() throws Exception {
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(0,
ArtFlags.FLAG_FOR_SECONDARY_DEX
| ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES)
.build();
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getPackageOptimizeResults()).hasSize(3);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getPackageDexoptResults()).hasSize(3);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults));
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ,
- OptimizeResult.OPTIMIZE_PERFORMED, List.of(mPrimaryResults));
+ checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_PERFORMED,
+ List.of(mPrimaryResults));
verifyNoMoreDexopt(3 /* expectedPrimaryTimes */, 0 /* expectedSecondaryTimes */);
}
@@ -315,24 +315,24 @@
return mPrimaryResults;
});
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_CANCELLED);
+ assertThat(result.getFinalStatus()).isEqualTo(DexoptResult.DEXOPT_CANCELLED);
- assertThat(result.getPackageOptimizeResults()).hasSize(6);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_CANCELLED,
+ assertThat(result.getPackageDexoptResults()).hasSize(6);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_CANCELLED,
List.of(mPrimaryResults));
checkPackageResult(
- result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_CANCELLED, List.of());
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ,
- OptimizeResult.OPTIMIZE_CANCELLED, List.of());
+ result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_CANCELLED, List.of());
checkPackageResult(
- result, 3 /* index */, PKG_NAME_LIB1, OptimizeResult.OPTIMIZE_CANCELLED, List.of());
+ result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_CANCELLED, List.of());
checkPackageResult(
- result, 4 /* index */, PKG_NAME_LIB2, OptimizeResult.OPTIMIZE_CANCELLED, List.of());
+ result, 3 /* index */, PKG_NAME_LIB1, DexoptResult.DEXOPT_CANCELLED, List.of());
checkPackageResult(
- result, 5 /* index */, PKG_NAME_LIB4, OptimizeResult.OPTIMIZE_CANCELLED, List.of());
+ result, 4 /* index */, PKG_NAME_LIB2, DexoptResult.DEXOPT_CANCELLED, List.of());
+ checkPackageResult(
+ result, 5 /* index */, PKG_NAME_LIB4, DexoptResult.DEXOPT_CANCELLED, List.of());
verify(mInjector).getPrimaryDexOptimizer(
same(mPkgStateFoo), same(mPkgFoo), same(mParams), same(mCancellationSignal));
@@ -345,13 +345,13 @@
when(mPkgFoo.getSplits().get(0).isHasCode()).thenReturn(false);
mRequestedPackages = List.of(PKG_NAME_FOO);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
- assertThat(result.getPackageOptimizeResults()).hasSize(1);
+ assertThat(result.getFinalStatus()).isEqualTo(DexoptResult.DEXOPT_SKIPPED);
+ assertThat(result.getPackageDexoptResults()).hasSize(1);
checkPackageResult(
- result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_SKIPPED, List.of());
+ result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_SKIPPED, List.of());
verifyNoDexopt();
}
@@ -361,12 +361,12 @@
when(mPkgLib1.getSplits().get(0).isHasCode()).thenReturn(false);
mRequestedPackages = List.of(PKG_NAME_FOO);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_PERFORMED);
- assertThat(result.getPackageOptimizeResults()).hasSize(1);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getFinalStatus()).isEqualTo(DexoptResult.DEXOPT_PERFORMED);
+ assertThat(result.getPackageDexoptResults()).hasSize(1);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
verifyNoMoreDexopt(1 /* expectedPrimaryTimes */, 1 /* expectedSecondaryTimes */);
@@ -377,12 +377,12 @@
lenient().when(mAhm.isHibernatingGlobally(PKG_NAME_FOO)).thenReturn(true);
mRequestedPackages = List.of(PKG_NAME_FOO);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
+ assertThat(result.getFinalStatus()).isEqualTo(DexoptResult.DEXOPT_SKIPPED);
checkPackageResult(
- result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_SKIPPED, List.of());
+ result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_SKIPPED, List.of());
verifyNoDexopt();
}
@@ -392,21 +392,21 @@
lenient().when(mAhm.isHibernatingGlobally(PKG_NAME_FOO)).thenReturn(true);
lenient().when(mAhm.isOatArtifactDeletionEnabled()).thenReturn(false);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
- assertThat(result.getPackageOptimizeResults()).hasSize(6);
- checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, OptimizeResult.OPTIMIZE_PERFORMED,
+ assertThat(result.getPackageDexoptResults()).hasSize(6);
+ checkPackageResult(result, 0 /* index */, PKG_NAME_FOO, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 1 /* index */, PKG_NAME_BAR, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ,
- OptimizeResult.OPTIMIZE_PERFORMED, List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 2 /* index */, PKG_NAME_LIBBAZ, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 3 /* index */, PKG_NAME_LIB1, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
- checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, OptimizeResult.OPTIMIZE_PERFORMED,
+ checkPackageResult(result, 4 /* index */, PKG_NAME_LIB2, DexoptResult.DEXOPT_PERFORMED,
+ List.of(mPrimaryResults, mSecondaryResults));
+ checkPackageResult(result, 5 /* index */, PKG_NAME_LIB4, DexoptResult.DEXOPT_PERFORMED,
List.of(mPrimaryResults, mSecondaryResults));
}
@@ -446,7 +446,7 @@
@Test
public void testDexoptSplit() throws Exception {
mRequestedPackages = List.of(PKG_NAME_FOO);
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
@@ -459,7 +459,7 @@
@Test
public void testDexoptSplitNotFound() throws Exception {
mRequestedPackages = List.of(PKG_NAME_FOO);
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_bogus")
@@ -473,15 +473,15 @@
@Test
public void testCallbacks() throws Exception {
- List<OptimizeResult> list1 = new ArrayList<>();
- mConfig.addOptimizePackageDoneCallback(
+ List<DexoptResult> list1 = new ArrayList<>();
+ mConfig.addDexoptDoneCallback(
false /* onlyIncludeUpdates */, Runnable::run, result -> list1.add(result));
- List<OptimizeResult> list2 = new ArrayList<>();
- mConfig.addOptimizePackageDoneCallback(
+ List<DexoptResult> list2 = new ArrayList<>();
+ mConfig.addDexoptDoneCallback(
false /* onlyIncludeUpdates */, Runnable::run, result -> list2.add(result));
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
assertThat(list1).containsExactly(result);
@@ -490,18 +490,17 @@
@Test
public void testCallbackRemoved() throws Exception {
- List<OptimizeResult> list1 = new ArrayList<>();
- OptimizePackageDoneCallback callback1 = result -> list1.add(result);
- mConfig.addOptimizePackageDoneCallback(
- false /* onlyIncludeUpdates */, Runnable::run, callback1);
+ List<DexoptResult> list1 = new ArrayList<>();
+ DexoptDoneCallback callback1 = result -> list1.add(result);
+ mConfig.addDexoptDoneCallback(false /* onlyIncludeUpdates */, Runnable::run, callback1);
- List<OptimizeResult> list2 = new ArrayList<>();
- mConfig.addOptimizePackageDoneCallback(
+ List<DexoptResult> list2 = new ArrayList<>();
+ mConfig.addDexoptDoneCallback(
false /* onlyIncludeUpdates */, Runnable::run, result -> list2.add(result));
- mConfig.removeOptimizePackageDoneCallback(callback1);
+ mConfig.removeDexoptDoneCallback(callback1);
- OptimizeResult result = mDexOptHelper.dexopt(
+ DexoptResult result = mDexOptHelper.dexopt(
mSnapshot, mRequestedPackages, mParams, mCancellationSignal, mExecutor);
assertThat(list1).isEmpty();
@@ -510,18 +509,16 @@
@Test(expected = IllegalStateException.class)
public void testCallbackAlreadyAdded() throws Exception {
- List<OptimizeResult> list = new ArrayList<>();
- OptimizePackageDoneCallback callback = result -> list.add(result);
- mConfig.addOptimizePackageDoneCallback(
- false /* onlyIncludeUpdates */, Runnable::run, callback);
- mConfig.addOptimizePackageDoneCallback(
- false /* onlyIncludeUpdates */, Runnable::run, callback);
+ List<DexoptResult> list = new ArrayList<>();
+ DexoptDoneCallback callback = result -> list.add(result);
+ mConfig.addDexoptDoneCallback(false /* onlyIncludeUpdates */, Runnable::run, callback);
+ mConfig.addDexoptDoneCallback(false /* onlyIncludeUpdates */, Runnable::run, callback);
}
- // Tests `addOptimizePackageDoneCallback` with `onlyIncludeUpdates` being true and false.
+ // Tests `addDexoptDoneCallback` with `onlyIncludeUpdates` being true and false.
@Test
public void testCallbackWithFailureResults() throws Exception {
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(0,
ArtFlags.FLAG_FOR_SECONDARY_DEX
@@ -529,52 +526,52 @@
.build();
// This list should collect all results.
- List<OptimizeResult> listAll = new ArrayList<>();
- mConfig.addOptimizePackageDoneCallback(
+ List<DexoptResult> listAll = new ArrayList<>();
+ mConfig.addDexoptDoneCallback(
false /* onlyIncludeUpdates */, Runnable::run, result -> listAll.add(result));
// This list should only collect results that have updates.
- List<OptimizeResult> listOnlyIncludeUpdates = new ArrayList<>();
- mConfig.addOptimizePackageDoneCallback(true /* onlyIncludeUpdates */, Runnable::run,
+ List<DexoptResult> listOnlyIncludeUpdates = new ArrayList<>();
+ mConfig.addDexoptDoneCallback(true /* onlyIncludeUpdates */, Runnable::run,
result -> listOnlyIncludeUpdates.add(result));
// Dexopt partially fails on package "foo".
- List<DexContainerFileOptimizeResult> partialFailureResults = createResults(
- "/data/app/foo/base.apk", OptimizeResult.OPTIMIZE_PERFORMED /* status1 */,
- OptimizeResult.OPTIMIZE_FAILED /* status2 */);
+ List<DexContainerFileDexoptResult> partialFailureResults =
+ createResults("/data/app/foo/base.apk", DexoptResult.DEXOPT_PERFORMED /* status1 */,
+ DexoptResult.DEXOPT_FAILED /* status2 */);
var fooPrimaryDexOptimizer = mock(PrimaryDexOptimizer.class);
when(mInjector.getPrimaryDexOptimizer(same(mPkgStateFoo), any(), any(), any()))
.thenReturn(fooPrimaryDexOptimizer);
when(fooPrimaryDexOptimizer.dexopt()).thenReturn(partialFailureResults);
// Dexopt totally fails on package "bar".
- List<DexContainerFileOptimizeResult> totalFailureResults = createResults(
- "/data/app/bar/base.apk", OptimizeResult.OPTIMIZE_FAILED /* status1 */,
- OptimizeResult.OPTIMIZE_FAILED /* status2 */);
+ List<DexContainerFileDexoptResult> totalFailureResults =
+ createResults("/data/app/bar/base.apk", DexoptResult.DEXOPT_FAILED /* status1 */,
+ DexoptResult.DEXOPT_FAILED /* status2 */);
var barPrimaryDexOptimizer = mock(PrimaryDexOptimizer.class);
when(mInjector.getPrimaryDexOptimizer(same(mPkgStateBar), any(), any(), any()))
.thenReturn(barPrimaryDexOptimizer);
when(barPrimaryDexOptimizer.dexopt()).thenReturn(totalFailureResults);
- OptimizeResult resultWithSomeUpdates = mDexOptHelper.dexopt(mSnapshot,
+ DexoptResult resultWithSomeUpdates = mDexOptHelper.dexopt(mSnapshot,
List.of(PKG_NAME_FOO, PKG_NAME_BAR), mParams, mCancellationSignal, mExecutor);
- OptimizeResult resultWithNoUpdates = mDexOptHelper.dexopt(
+ DexoptResult resultWithNoUpdates = mDexOptHelper.dexopt(
mSnapshot, List.of(PKG_NAME_BAR), mParams, mCancellationSignal, mExecutor);
assertThat(listAll).containsExactly(resultWithSomeUpdates, resultWithNoUpdates);
assertThat(listOnlyIncludeUpdates).hasSize(1);
assertThat(listOnlyIncludeUpdates.get(0)
- .getPackageOptimizeResults()
+ .getPackageDexoptResults()
.stream()
- .map(PackageOptimizeResult::getPackageName)
+ .map(PackageDexoptResult::getPackageName)
.collect(Collectors.toList()))
.containsExactly(PKG_NAME_FOO);
}
@Test
public void testProgressCallback() throws Exception {
- mParams = new OptimizeParams.Builder("install")
+ mParams = new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_SECONDARY_DEX,
ArtFlags.FLAG_FOR_SECONDARY_DEX
@@ -706,26 +703,26 @@
.getSecondaryDexOptimizer(any(), any(), any(), any());
}
- private List<DexContainerFileOptimizeResult> createResults(
- String dexPath, @OptimizeStatus int status1, @OptimizeStatus int status2) {
- return List.of(DexContainerFileOptimizeResult.create(dexPath, true /* isPrimaryAbi */,
+ private List<DexContainerFileDexoptResult> createResults(
+ String dexPath, @DexoptResultStatus int status1, @DexoptResultStatus int status2) {
+ return List.of(DexContainerFileDexoptResult.create(dexPath, true /* isPrimaryAbi */,
"arm64-v8a", "verify", status1, 100 /* dex2oatWallTimeMillis */,
400 /* dex2oatCpuTimeMillis */, 0 /* sizeBytes */,
0 /* sizeBeforeBytes */, false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create(dexPath, false /* isPrimaryAbi */,
+ DexContainerFileDexoptResult.create(dexPath, false /* isPrimaryAbi */,
"armeabi-v7a", "verify", status2, 100 /* dex2oatWallTimeMillis */,
400 /* dex2oatCpuTimeMillis */, 0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */));
}
- private void checkPackageResult(OptimizeResult result, int index, String packageName,
- @OptimizeResult.OptimizeStatus int status,
- List<List<DexContainerFileOptimizeResult>> dexContainerFileOptimizeResults) {
- PackageOptimizeResult packageResult = result.getPackageOptimizeResults().get(index);
+ private void checkPackageResult(DexoptResult result, int index, String packageName,
+ @DexoptResult.DexoptResultStatus int status,
+ List<List<DexContainerFileDexoptResult>> dexContainerFileDexoptResults) {
+ PackageDexoptResult packageResult = result.getPackageDexoptResults().get(index);
assertThat(packageResult.getPackageName()).isEqualTo(packageName);
assertThat(packageResult.getStatus()).isEqualTo(status);
- assertThat(packageResult.getDexContainerFileOptimizeResults())
- .containsExactlyElementsIn(dexContainerFileOptimizeResults.stream()
+ assertThat(packageResult.getDexContainerFileDexoptResults())
+ .containsExactlyElementsIn(dexContainerFileDexoptResults.stream()
.flatMap(r -> r.stream())
.collect(Collectors.toList()));
}
diff --git a/libartservice/service/javatests/com/android/server/art/DumpHelperTest.java b/libartservice/service/javatests/com/android/server/art/DumpHelperTest.java
index 23102a3..9a518ed 100644
--- a/libartservice/service/javatests/com/android/server/art/DumpHelperTest.java
+++ b/libartservice/service/javatests/com/android/server/art/DumpHelperTest.java
@@ -18,7 +18,7 @@
import static com.android.server.art.DexUseManagerLocal.DexLoader;
import static com.android.server.art.DexUseManagerLocal.SecondaryDexInfo;
-import static com.android.server.art.model.OptimizationStatus.DexContainerFileOptimizationStatus;
+import static com.android.server.art.model.DexoptStatus.DexContainerFileDexoptStatus;
import static com.google.common.truth.Truth.assertThat;
@@ -29,7 +29,7 @@
import androidx.test.filters.SmallTest;
-import com.android.server.art.model.OptimizationStatus;
+import com.android.server.art.model.DexoptStatus;
import com.android.server.pm.PackageManagerLocal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -131,31 +131,31 @@
private void setUpForFoo() {
// The order of the dex path and the ABI should be kept in the output.
- var status = OptimizationStatus.create(
- List.of(DexContainerFileOptimizationStatus.create("/data/app/foo/base.apk",
+ var status = DexoptStatus.create(
+ List.of(DexContainerFileDexoptStatus.create("/data/app/foo/base.apk",
true /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"speed-profile", "bg-dexopt", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/base.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/base.apk",
true /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"verify", "install", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/split_0.apk",
true /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"verify", "vdex", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptStatus.create("/data/app/foo/split_0.apk",
true /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"verify", "vdex", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/user_de/0/foo/1.apk",
+ DexContainerFileDexoptStatus.create("/data/user_de/0/foo/1.apk",
false /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"run-from-apk", "unknown", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/user_de/0/foo/2.apk",
+ DexContainerFileDexoptStatus.create("/data/user_de/0/foo/2.apk",
false /* isPrimaryDex */, true /* isPrimaryAbi */, "arm64-v8a",
"speed-profile", "bg-dexopt", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/user_de/0/foo/2.apk",
+ DexContainerFileDexoptStatus.create("/data/user_de/0/foo/2.apk",
false /* isPrimaryDex */, false /* isPrimaryAbi */, "armeabi-v7a",
"verify", "vdex", "location-ignored")));
lenient()
- .when(mArtManagerLocal.getOptimizationStatus(any(), eq(PKG_NAME_FOO)))
+ .when(mArtManagerLocal.getDexoptStatus(any(), eq(PKG_NAME_FOO)))
.thenReturn(status);
// The output should not show "used by other apps:".
@@ -200,16 +200,16 @@
// The order of the ABI should be kept in the output, despite that it's different from the
// order for package "foo".
// The output should not show "known secondary dex files:".
- var status = OptimizationStatus.create(
- List.of(DexContainerFileOptimizationStatus.create("/data/app/bar/base.apk",
+ var status = DexoptStatus.create(
+ List.of(DexContainerFileDexoptStatus.create("/data/app/bar/base.apk",
true /* isPrimaryDex */, true /* isPrimaryAbi */, "armeabi-v7a",
"verify", "install", "location-ignored"),
- DexContainerFileOptimizationStatus.create("/data/app/bar/base.apk",
+ DexContainerFileDexoptStatus.create("/data/app/bar/base.apk",
true /* isPrimaryDex */, false /* isPrimaryAbi */, "arm64-v8a",
"verify", "install", "location-ignored")));
lenient()
- .when(mArtManagerLocal.getOptimizationStatus(any(), eq(PKG_NAME_BAR)))
+ .when(mArtManagerLocal.getDexoptStatus(any(), eq(PKG_NAME_BAR)))
.thenReturn(status);
lenient()
diff --git a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerParameterizedTest.java b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerParameterizedTest.java
index 45a89d4..717a5d3 100644
--- a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerParameterizedTest.java
+++ b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerParameterizedTest.java
@@ -20,7 +20,7 @@
import static com.android.server.art.AidlUtils.buildOutputArtifacts;
import static com.android.server.art.AidlUtils.buildPermissionSettings;
import static com.android.server.art.OutputArtifacts.PermissionSettings;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import static com.android.server.art.testing.TestingUtils.deepEq;
import static com.google.common.truth.Truth.assertThat;
@@ -44,8 +44,8 @@
import androidx.test.filters.SmallTest;
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.art.testing.OnSuccessRule;
import com.android.server.art.testing.TestingUtils;
@@ -69,7 +69,7 @@
verifyNoMoreInteractions(mArtd);
});
- private OptimizeParams mOptimizeParams;
+ private DexoptParams mDexoptParams;
private PrimaryDexOptimizer mPrimaryDexOptimizer;
@@ -184,8 +184,8 @@
lenient().when(mPkgState.isSystem()).thenReturn(mParams.mIsSystem);
lenient().when(mPkgState.isUpdatedSystemApp()).thenReturn(mParams.mIsUpdatedSystemApp);
- mOptimizeParams =
- new OptimizeParams.Builder("install")
+ mDexoptParams =
+ new DexoptParams.Builder("install")
.setCompilerFilter(mParams.mRequestedCompilerFilter)
.setPriorityClass(ArtFlags.PRIORITY_INTERACTIVE)
.setFlags(mParams.mForce ? ArtFlags.FLAG_FORCE : 0, ArtFlags.FLAG_FORCE)
@@ -196,7 +196,7 @@
.build();
mPrimaryDexOptimizer = new PrimaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
}
@Test
@@ -222,7 +222,7 @@
.when(mArtd)
.getDexoptNeeded("/data/app/foo/base.apk", "arm64", "PCL[]",
mParams.mExpectedCompilerFilter, mParams.mExpectedDexoptTrigger);
- doReturn(createDexoptResult(false /* cancelled */, 100 /* wallTimeMs */,
+ doReturn(createArtdDexoptResult(false /* cancelled */, 100 /* wallTimeMs */,
400 /* cpuTimeMs */, 30000 /* sizeBytes */, 32000 /* sizeBeforeBytes */))
.when(mArtd)
.dexopt(deepEq(buildOutputArtifacts("/data/app/foo/base.apk", "arm64",
@@ -257,7 +257,7 @@
.when(mArtd)
.getDexoptNeeded("/data/app/foo/split_0.apk", "arm", "PCL[base.apk]",
mParams.mExpectedCompilerFilter, mParams.mExpectedDexoptTrigger);
- doReturn(createDexoptResult(false /* cancelled */, 200 /* wallTimeMs */,
+ doReturn(createArtdDexoptResult(false /* cancelled */, 200 /* wallTimeMs */,
200 /* cpuTimeMs */, 10000 /* sizeBytes */, 0 /* sizeBeforeBytes */))
.when(mArtd)
.dexopt(deepEq(buildOutputArtifacts("/data/app/foo/split_0.apk", "arm",
@@ -268,29 +268,29 @@
eq(PriorityClass.INTERACTIVE), deepEq(dexoptOptions), any());
assertThat(mPrimaryDexOptimizer.dexopt())
- .comparingElementsUsing(TestingUtils.<DexContainerFileOptimizeResult>deepEquality())
+ .comparingElementsUsing(TestingUtils.<DexContainerFileDexoptResult>deepEquality())
.containsExactly(
- DexContainerFileOptimizeResult.create("/data/app/foo/base.apk",
+ DexContainerFileDexoptResult.create("/data/app/foo/base.apk",
true /* isPrimaryAbi */, "arm64-v8a",
- mParams.mExpectedCompilerFilter, OptimizeResult.OPTIMIZE_PERFORMED,
+ mParams.mExpectedCompilerFilter, DexoptResult.DEXOPT_PERFORMED,
100 /* dex2oatWallTimeMillis */, 400 /* dex2oatCpuTimeMillis */,
30000 /* sizeBytes */, 32000 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create("/data/app/foo/base.apk",
+ DexContainerFileDexoptResult.create("/data/app/foo/base.apk",
false /* isPrimaryAbi */, "armeabi-v7a",
- mParams.mExpectedCompilerFilter, OptimizeResult.OPTIMIZE_FAILED,
+ mParams.mExpectedCompilerFilter, DexoptResult.DEXOPT_FAILED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptResult.create("/data/app/foo/split_0.apk",
true /* isPrimaryAbi */, "arm64-v8a",
- mParams.mExpectedCompilerFilter, OptimizeResult.OPTIMIZE_SKIPPED,
+ mParams.mExpectedCompilerFilter, DexoptResult.DEXOPT_SKIPPED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create("/data/app/foo/split_0.apk",
+ DexContainerFileDexoptResult.create("/data/app/foo/split_0.apk",
false /* isPrimaryAbi */, "armeabi-v7a",
- mParams.mExpectedCompilerFilter, OptimizeResult.OPTIMIZE_PERFORMED,
+ mParams.mExpectedCompilerFilter, DexoptResult.DEXOPT_PERFORMED,
200 /* dex2oatWallTimeMillis */, 200 /* dex2oatCpuTimeMillis */,
10000 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */));
diff --git a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
index 1d9fdf7..6c5f1af 100644
--- a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
+++ b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
@@ -17,7 +17,7 @@
package com.android.server.art;
import static com.android.server.art.GetDexoptNeededResult.ArtifactsLocation;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import static com.android.server.art.testing.TestingUtils.deepEq;
import static com.google.common.truth.Truth.assertThat;
@@ -46,8 +46,8 @@
import androidx.test.runner.AndroidJUnit4;
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.art.testing.TestingUtils;
import org.junit.Before;
@@ -92,10 +92,11 @@
private final MergeProfileOptions mMergeProfileOptions = new MergeProfileOptions();
- private final DexoptResult mDexoptResult = createDexoptResult(false /* cancelled */);
+ private final ArtdDexoptResult mArtdDexoptResult =
+ createArtdDexoptResult(false /* cancelled */);
- private OptimizeParams mOptimizeParams =
- new OptimizeParams.Builder("install").setCompilerFilter("speed-profile").build();
+ private DexoptParams mDexoptParams =
+ new DexoptParams.Builder("install").setCompilerFilter("speed-profile").build();
private PrimaryDexOptimizer mPrimaryDexOptimizer;
@@ -119,14 +120,14 @@
lenient()
.when(mArtd.dexopt(any(), any(), any(), any(), any(), any(), any(), any(), anyInt(),
any(), any()))
- .thenReturn(mDexoptResult);
+ .thenReturn(mArtdDexoptResult);
lenient()
.when(mArtd.createCancellationSignal())
.thenReturn(mock(IArtdCancellationSignal.class));
mPrimaryDexOptimizer = new PrimaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
mUsedProfiles = new ArrayList<>();
}
@@ -137,7 +138,7 @@
doReturn(dexoptIsNeeded(ArtifactsLocation.NONE_OR_ERROR))
.when(mArtd)
.getDexoptNeeded(eq(mDexPath), eq("arm64"), any(), any(), anyInt());
- doReturn(mDexoptResult)
+ doReturn(mArtdDexoptResult)
.when(mArtd)
.dexopt(any(), eq(mDexPath), eq("arm64"), any(), any(), any(), isNull(), any(),
anyInt(), any(), any());
@@ -146,7 +147,7 @@
doReturn(dexoptIsNeeded(ArtifactsLocation.DALVIK_CACHE))
.when(mArtd)
.getDexoptNeeded(eq(mDexPath), eq("arm"), any(), any(), anyInt());
- doReturn(mDexoptResult)
+ doReturn(mArtdDexoptResult)
.when(mArtd)
.dexopt(any(), eq(mDexPath), eq("arm"), any(), any(), any(),
deepEq(VdexPath.artifactsPath(AidlUtils.buildArtifactsPath(
@@ -157,7 +158,7 @@
doReturn(dexoptIsNeeded(ArtifactsLocation.NEXT_TO_DEX))
.when(mArtd)
.getDexoptNeeded(eq(mSplit0DexPath), eq("arm64"), any(), any(), anyInt());
- doReturn(mDexoptResult)
+ doReturn(mArtdDexoptResult)
.when(mArtd)
.dexopt(any(), eq(mSplit0DexPath), eq("arm64"), any(), any(), any(),
deepEq(VdexPath.artifactsPath(AidlUtils.buildArtifactsPath(
@@ -168,7 +169,7 @@
doReturn(dexoptIsNeeded(ArtifactsLocation.DM))
.when(mArtd)
.getDexoptNeeded(eq(mSplit0DexPath), eq("arm"), any(), any(), anyInt());
- doReturn(mDexoptResult)
+ doReturn(mArtdDexoptResult)
.when(mArtd)
.dexopt(any(), eq(mSplit0DexPath), eq("arm"), any(), any(), any(), isNull(), any(),
anyInt(), any(), any());
@@ -486,19 +487,19 @@
doAnswer(invocation -> {
verify(artdCancellationSignal).cancel();
- return createDexoptResult(true /* cancelled */);
+ return createArtdDexoptResult(true /* cancelled */);
})
.when(mArtd)
.dexopt(any(), any(), any(), any(), any(), any(), any(), any(), anyInt(), any(),
same(artdCancellationSignal));
// The result should only contain one element: the result of the first file with
- // OPTIMIZE_CANCELLED.
+ // DEXOPT_CANCELLED.
assertThat(mPrimaryDexOptimizer.dexopt()
.stream()
- .map(DexContainerFileOptimizeResult::getStatus)
+ .map(DexContainerFileDexoptResult::getStatus)
.collect(Collectors.toList()))
- .containsExactly(OptimizeResult.OPTIMIZE_CANCELLED);
+ .containsExactly(DexoptResult.DEXOPT_CANCELLED);
// It shouldn't continue after being cancelled on the first file.
verify(mArtd, times(1)).createCancellationSignal();
@@ -519,7 +520,7 @@
doAnswer(invocation -> {
dexoptStarted.release();
assertThat(dexoptCancelled.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
- return createDexoptResult(true /* cancelled */);
+ return createArtdDexoptResult(true /* cancelled */);
})
.when(mArtd)
.dexopt(any(), any(), any(), any(), any(), any(), any(), any(), anyInt(), any(),
@@ -531,7 +532,7 @@
.when(artdCancellationSignal)
.cancel();
- Future<List<DexContainerFileOptimizeResult>> results =
+ Future<List<DexContainerFileDexoptResult>> results =
ForkJoinPool.commonPool().submit(() -> { return mPrimaryDexOptimizer.dexopt(); });
assertThat(dexoptStarted.tryAcquire(TIMEOUT_SEC, TimeUnit.SECONDS)).isTrue();
@@ -540,9 +541,9 @@
assertThat(results.get()
.stream()
- .map(DexContainerFileOptimizeResult::getStatus)
+ .map(DexContainerFileDexoptResult::getStatus)
.collect(Collectors.toList()))
- .containsExactly(OptimizeResult.OPTIMIZE_CANCELLED);
+ .containsExactly(DexoptResult.DEXOPT_CANCELLED);
// It shouldn't continue after being cancelled on the first file.
verify(mArtd, times(1)).createCancellationSignal();
@@ -553,14 +554,14 @@
@Test
public void testDexoptBaseApk() throws Exception {
- mOptimizeParams =
- new OptimizeParams.Builder("install")
+ mDexoptParams =
+ new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName(null)
.build();
mPrimaryDexOptimizer = new PrimaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
mPrimaryDexOptimizer.dexopt();
@@ -574,14 +575,14 @@
@Test
public void testDexoptSplitApk() throws Exception {
- mOptimizeParams =
- new OptimizeParams.Builder("install")
+ mDexoptParams =
+ new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
.build();
mPrimaryDexOptimizer = new PrimaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
mPrimaryDexOptimizer.dexopt();
@@ -597,22 +598,22 @@
public void testDexoptStorageLow() throws Exception {
when(mStorageManager.getAllocatableBytes(any())).thenReturn(1l, 0l, 0l, 1l);
- mOptimizeParams =
- new OptimizeParams.Builder("install")
+ mDexoptParams =
+ new DexoptParams.Builder("install")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_SKIP_IF_STORAGE_LOW)
.build();
mPrimaryDexOptimizer = new PrimaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
- List<DexContainerFileOptimizeResult> results = mPrimaryDexOptimizer.dexopt();
- assertThat(results.get(0).getStatus()).isEqualTo(OptimizeResult.OPTIMIZE_PERFORMED);
+ List<DexContainerFileDexoptResult> results = mPrimaryDexOptimizer.dexopt();
+ assertThat(results.get(0).getStatus()).isEqualTo(DexoptResult.DEXOPT_PERFORMED);
assertThat(results.get(0).isSkippedDueToStorageLow()).isFalse();
- assertThat(results.get(1).getStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
+ assertThat(results.get(1).getStatus()).isEqualTo(DexoptResult.DEXOPT_SKIPPED);
assertThat(results.get(1).isSkippedDueToStorageLow()).isTrue();
- assertThat(results.get(2).getStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
+ assertThat(results.get(2).getStatus()).isEqualTo(DexoptResult.DEXOPT_SKIPPED);
assertThat(results.get(2).isSkippedDueToStorageLow()).isTrue();
- assertThat(results.get(3).getStatus()).isEqualTo(OptimizeResult.OPTIMIZE_PERFORMED);
+ assertThat(results.get(3).getStatus()).isEqualTo(DexoptResult.DEXOPT_PERFORMED);
assertThat(results.get(3).isSkippedDueToStorageLow()).isFalse();
verify(mArtd, times(2))
diff --git a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
index c5261da..d068c65 100644
--- a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
+++ b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
@@ -183,9 +183,9 @@
return result;
}
- protected DexoptResult createDexoptResult(boolean cancelled, long wallTimeMs, long cpuTimeMs,
- long sizeBytes, long sizeBeforeBytes) {
- var result = new DexoptResult();
+ protected ArtdDexoptResult createArtdDexoptResult(boolean cancelled, long wallTimeMs,
+ long cpuTimeMs, long sizeBytes, long sizeBeforeBytes) {
+ var result = new ArtdDexoptResult();
result.cancelled = cancelled;
result.wallTimeMs = wallTimeMs;
result.cpuTimeMs = cpuTimeMs;
@@ -194,8 +194,8 @@
return result;
}
- protected DexoptResult createDexoptResult(boolean cancelled) {
- return createDexoptResult(cancelled, 0 /* wallTimeMs */, 0 /* cpuTimeMs */,
+ protected ArtdDexoptResult createArtdDexoptResult(boolean cancelled) {
+ return createArtdDexoptResult(cancelled, 0 /* wallTimeMs */, 0 /* cpuTimeMs */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */);
}
}
diff --git a/libartservice/service/javatests/com/android/server/art/SecondaryDexOptimizerTest.java b/libartservice/service/javatests/com/android/server/art/SecondaryDexOptimizerTest.java
index f4c9ee4..f72b6ce 100644
--- a/libartservice/service/javatests/com/android/server/art/SecondaryDexOptimizerTest.java
+++ b/libartservice/service/javatests/com/android/server/art/SecondaryDexOptimizerTest.java
@@ -19,7 +19,7 @@
import static com.android.server.art.DexUseManagerLocal.DetailedSecondaryDexInfo;
import static com.android.server.art.GetDexoptNeededResult.ArtifactsLocation;
import static com.android.server.art.OutputArtifacts.PermissionSettings;
-import static com.android.server.art.model.OptimizeResult.DexContainerFileOptimizeResult;
+import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import static com.android.server.art.testing.TestingUtils.deepEq;
import static com.google.common.truth.Truth.assertThat;
@@ -44,8 +44,8 @@
import androidx.test.runner.AndroidJUnit4;
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.art.testing.StaticMockitoRule;
import com.android.server.art.testing.TestingUtils;
import com.android.server.pm.PackageSetting;
@@ -75,8 +75,8 @@
private static final String DEX_2 = APP_DATA_DIR + "/2.apk";
private static final String DEX_3 = APP_DATA_DIR + "/3.apk";
- private final OptimizeParams mOptimizeParams =
- new OptimizeParams.Builder("bg-dexopt")
+ private final DexoptParams mDexoptParams =
+ new DexoptParams.Builder("bg-dexopt")
.setCompilerFilter("speed-profile")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SECONDARY_DEX)
.build();
@@ -148,38 +148,38 @@
lenient()
.when(mArtd.dexopt(any(), any(), any(), any(), any(), any(), any(), any(), anyInt(),
any(), any()))
- .thenReturn(createDexoptResult());
+ .thenReturn(createArtdDexoptResult());
lenient()
.when(mArtd.createCancellationSignal())
.thenReturn(mock(IArtdCancellationSignal.class));
mSecondaryDexOptimizer = new SecondaryDexOptimizer(
- mInjector, mPkgState, mPkg, mOptimizeParams, mCancellationSignal);
+ mInjector, mPkgState, mPkg, mDexoptParams, mCancellationSignal);
}
@Test
public void testDexopt() throws Exception {
assertThat(mSecondaryDexOptimizer.dexopt())
- .comparingElementsUsing(TestingUtils.<DexContainerFileOptimizeResult>deepEquality())
+ .comparingElementsUsing(TestingUtils.<DexContainerFileDexoptResult>deepEquality())
.containsExactly(
- DexContainerFileOptimizeResult.create(DEX_1, true /* isPrimaryAbi */,
- "arm64-v8a", "speed-profile", OptimizeResult.OPTIMIZE_PERFORMED,
+ DexContainerFileDexoptResult.create(DEX_1, true /* isPrimaryAbi */,
+ "arm64-v8a", "speed-profile", DexoptResult.DEXOPT_PERFORMED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create(DEX_2, true /* isPrimaryAbi */,
- "arm64-v8a", "speed", OptimizeResult.OPTIMIZE_PERFORMED,
+ DexContainerFileDexoptResult.create(DEX_2, true /* isPrimaryAbi */,
+ "arm64-v8a", "speed", DexoptResult.DEXOPT_PERFORMED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create(DEX_2, false /* isPrimaryAbi */,
- "armeabi-v7a", "speed", OptimizeResult.OPTIMIZE_PERFORMED,
+ DexContainerFileDexoptResult.create(DEX_2, false /* isPrimaryAbi */,
+ "armeabi-v7a", "speed", DexoptResult.DEXOPT_PERFORMED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */),
- DexContainerFileOptimizeResult.create(DEX_3, true /* isPrimaryAbi */,
- "arm64-v8a", "verify", OptimizeResult.OPTIMIZE_PERFORMED,
+ DexContainerFileDexoptResult.create(DEX_3, true /* isPrimaryAbi */,
+ "arm64-v8a", "verify", DexoptResult.DEXOPT_PERFORMED,
0 /* dex2oatWallTimeMillis */, 0 /* dex2oatCpuTimeMillis */,
0 /* sizeBytes */, 0 /* sizeBeforeBytes */,
false /* isSkippedDueToStorageLow */));
@@ -306,8 +306,8 @@
return result;
}
- private DexoptResult createDexoptResult() {
- var result = new DexoptResult();
+ private ArtdDexoptResult createArtdDexoptResult() {
+ var result = new ArtdDexoptResult();
result.cancelled = false;
result.wallTimeMs = 0;
result.cpuTimeMs = 0;
diff --git a/libartservice/service/javatests/com/android/server/art/model/OptimizeParamsTest.java b/libartservice/service/javatests/com/android/server/art/model/DexoptParamsTest.java
similarity index 76%
rename from libartservice/service/javatests/com/android/server/art/model/OptimizeParamsTest.java
rename to libartservice/service/javatests/com/android/server/art/model/DexoptParamsTest.java
index 1578241..aeff58c 100644
--- a/libartservice/service/javatests/com/android/server/art/model/OptimizeParamsTest.java
+++ b/libartservice/service/javatests/com/android/server/art/model/DexoptParamsTest.java
@@ -24,50 +24,45 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-public class OptimizeParamsTest {
+public class DexoptParamsTest {
@Test
public void testBuild() {
- new OptimizeParams.Builder("install").build();
+ new DexoptParams.Builder("install").build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuildEmptyReason() {
- new OptimizeParams.Builder("").build();
+ new DexoptParams.Builder("").build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuildInvalidCompilerFilter() {
- new OptimizeParams.Builder("install").setCompilerFilter("invalid").build();
+ new DexoptParams.Builder("install").setCompilerFilter("invalid").build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuildInvalidPriorityClass() {
- new OptimizeParams.Builder("install").setPriorityClass(101).build();
+ new DexoptParams.Builder("install").setPriorityClass(101).build();
}
@Test
public void testBuildCustomReason() {
- new OptimizeParams.Builder("custom")
- .setCompilerFilter("speed")
- .setPriorityClass(90)
- .build();
+ new DexoptParams.Builder("custom").setCompilerFilter("speed").setPriorityClass(90).build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuildCustomReasonEmptyCompilerFilter() {
- new OptimizeParams.Builder("custom")
- .setPriorityClass(ArtFlags.PRIORITY_INTERACTIVE)
- .build();
+ new DexoptParams.Builder("custom").setPriorityClass(ArtFlags.PRIORITY_INTERACTIVE).build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuildCustomReasonEmptyPriorityClass() {
- new OptimizeParams.Builder("custom").setCompilerFilter("speed").build();
+ new DexoptParams.Builder("custom").setCompilerFilter("speed").build();
}
@Test
public void testSingleSplit() {
- new OptimizeParams.Builder("install")
+ new DexoptParams.Builder("install")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
.build();
@@ -75,7 +70,7 @@
@Test(expected = IllegalArgumentException.class)
public void testSingleSplitNoPrimaryFlag() {
- new OptimizeParams.Builder("install")
+ new DexoptParams.Builder("install")
.setFlags(ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
.build();
@@ -83,7 +78,7 @@
@Test(expected = IllegalArgumentException.class)
public void testSingleSplitSecondaryFlag() {
- new OptimizeParams.Builder("install")
+ new DexoptParams.Builder("install")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_FOR_SECONDARY_DEX
| ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
@@ -92,7 +87,7 @@
@Test(expected = IllegalArgumentException.class)
public void testSingleSplitDependenciesFlag() {
- new OptimizeParams.Builder("install")
+ new DexoptParams.Builder("install")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX | ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES
| ArtFlags.FLAG_FOR_SINGLE_SPLIT)
.setSplitName("split_0")
@@ -101,7 +96,7 @@
@Test(expected = IllegalArgumentException.class)
public void testSplitNameNoSingleSplitFlag() {
- new OptimizeParams.Builder("install")
+ new DexoptParams.Builder("install")
.setFlags(ArtFlags.FLAG_FOR_PRIMARY_DEX)
.setSplitName("split_0")
.build();