summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiakai Zhang <jiakaiz@google.com>2023-12-01 14:29:04 +0000
committerCherrypicker Worker <android-build-cherrypicker-worker@google.com>2023-12-01 16:46:36 +0000
commit3414d01c7f3606bd700a9bff22df47d6d53c8b6a (patch)
tree867d105bc89f8822eb12dfa12b327b71edf7645a
parente5c1ac8b6aea9ebc606d80853662e32963e5f88a (diff)
downloadart-3414d01c7f3606bd700a9bff22df47d6d53c8b6a.tar.gz
Fix NullPointerException in ArtManagerLocal.onBoot.
Map.of doesn't allow null values. Bug: 314092832 Bug: 242170869 Test: atest ArtServiceTests (cherry picked from https://android-review.googlesource.com/q/commit:f51e433b5d32cb83eb2ee302544ecf67a10525b9) Merged-In: I1b0aba676078effadc3ba44e0837121f46881ee0 Change-Id: I1b0aba676078effadc3ba44e0837121f46881ee0
-rw-r--r--libartservice/service/java/com/android/server/art/ArtManagerLocal.java2
-rw-r--r--libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java26
2 files changed, 27 insertions, 1 deletions
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index bbc3f6330f..f8d6b5643e 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -883,7 +883,7 @@ public final class ArtManagerLocal {
@Nullable Consumer<OperationProgress> progressCallback) {
try (var snapshot = mInjector.getPackageManagerLocal().withFilteredSnapshot()) {
dexoptPackages(snapshot, bootReason, new CancellationSignal(), progressCallbackExecutor,
- Map.of(ArtFlags.PASS_MAIN, progressCallback));
+ progressCallback != null ? Map.of(ArtFlags.PASS_MAIN, progressCallback) : null);
}
}
diff --git a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
index 6b46318718..5e3e7b9cd7 100644
--- a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
+++ b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
@@ -93,6 +93,7 @@ import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.Executor;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
@@ -954,6 +955,31 @@ public class ArtManagerLocalTest {
}
@Test
+ public void testOnBoot() throws Exception {
+ var progressCallbackExecutor = mock(Executor.class);
+ var progressCallback = mock(Consumer.class);
+
+ when(mDexoptHelper.dexopt(any(), any(),
+ argThat(params -> params.getReason().equals(ReasonMapping.REASON_FIRST_BOOT)),
+ any(), any(), same(progressCallbackExecutor), same(progressCallback)))
+ .thenReturn(DexoptResult.create());
+
+ mArtManagerLocal.onBoot(
+ ReasonMapping.REASON_FIRST_BOOT, progressCallbackExecutor, progressCallback);
+ }
+
+ @Test
+ public void testOnBootNoProgressCallback() throws Exception {
+ when(mDexoptHelper.dexopt(any(), any(),
+ argThat(params -> params.getReason().equals(ReasonMapping.REASON_FIRST_BOOT)),
+ any(), any(), isNull(), isNull()))
+ .thenReturn(DexoptResult.create());
+
+ mArtManagerLocal.onBoot(ReasonMapping.REASON_FIRST_BOOT,
+ null /* progressCallbackExecutor */, null /* progressCallback */);
+ }
+
+ @Test
public void testCleanup() throws Exception {
// It should keep all artifacts.
doReturn(createGetDexoptStatusResult("speed-profile", "bg-dexopt", "location"))