summaryrefslogtreecommitdiff
path: root/libartservice/service/java/com/android/server/art/Dexopter.java
diff options
context:
space:
mode:
Diffstat (limited to 'libartservice/service/java/com/android/server/art/Dexopter.java')
-rw-r--r--libartservice/service/java/com/android/server/art/Dexopter.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/libartservice/service/java/com/android/server/art/Dexopter.java b/libartservice/service/java/com/android/server/art/Dexopter.java
index fff39351c0..8713ff19bb 100644
--- a/libartservice/service/java/com/android/server/art/Dexopter.java
+++ b/libartservice/service/java/com/android/server/art/Dexopter.java
@@ -16,11 +16,13 @@
package com.android.server.art;
+import static com.android.server.art.ArtManagerLocal.AdjustCompilerFilterCallback;
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.Utils.InitProfileResult;
import static com.android.server.art.model.ArtFlags.DexoptFlags;
+import static com.android.server.art.model.Config.Callback;
import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import android.R;
@@ -45,6 +47,7 @@ import androidx.annotation.RequiresApi;
import com.android.internal.annotations.VisibleForTesting;
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.DetailedDexInfo;
import com.android.server.art.model.DexoptParams;
import com.android.server.art.model.DexoptResult;
@@ -300,6 +303,8 @@ public abstract class Dexopter<DexInfoType extends DetailedDexInfo> {
return results;
}
+ // The javadoc on `AdjustCompilerFilterCallback.onAdjustCompilerFilter` may need updating when
+ // this method is changed.
@NonNull
private String adjustCompilerFilter(
@NonNull String targetCompilerFilter, @NonNull DexInfoType dexInfo) {
@@ -312,6 +317,17 @@ public abstract class Dexopter<DexInfoType extends DetailedDexInfo> {
targetCompilerFilter = "speed-profile";
}
+ Callback<AdjustCompilerFilterCallback, Void> callback =
+ mInjector.getConfig().getAdjustCompilerFilterCallback();
+ if (callback != null) {
+ // Local variables passed to the lambda must be final or effectively final.
+ final String originalCompilerFilter = targetCompilerFilter;
+ targetCompilerFilter = Utils.executeAndWait(callback.executor(), () -> {
+ return callback.get().onAdjustCompilerFilter(
+ mPkgState.getPackageName(), originalCompilerFilter, mParams.getReason());
+ });
+ }
+
// Code below should only downgrade the compiler filter. Don't upgrade the compiler filter
// beyond this point!
@@ -688,9 +704,11 @@ public abstract class Dexopter<DexInfoType extends DetailedDexInfo> {
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED)
public static class Injector {
@NonNull private final Context mContext;
+ @NonNull private final Config mConfig;
- public Injector(@NonNull Context context) {
+ public Injector(@NonNull Context context, @NonNull Config config) {
mContext = context;
+ mConfig = config;
// Call the getters for various dependencies, to ensure correct initialization order.
getUserManager();
@@ -747,5 +765,10 @@ public abstract class Dexopter<DexInfoType extends DetailedDexInfo> {
}
return -1;
}
+
+ @NonNull
+ public Config getConfig() {
+ return mConfig;
+ }
}
}