summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2023-12-01 14:29:04 +0000
committer Jiakai Zhang <jiakaiz@google.com> 2023-12-01 16:43:02 +0000
commitf51e433b5d32cb83eb2ee302544ecf67a10525b9 (patch)
treefa7805622038a6d27e199154b75aa383fe81a5ae
parent87f2fc441d91315de50d4cbab4452c3b51020402 (diff)
Fix NullPointerException in ArtManagerLocal.onBoot.
Map.of doesn't allow null values. Bug: 314092832 Bug: 242170869 Test: atest ArtServiceTests 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 aa9511b274..da081df258 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -890,7 +890,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 dba51366e8..425aed4aa9 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;
@@ -997,6 +998,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, but not runtime images.
doReturn(createGetDexoptStatusResult("speed-profile", "bg-dexopt", "location"))