diff options
author | Jiakai Zhang <jiakaiz@google.com> | 2023-12-01 14:29:04 +0000 |
---|---|---|
committer | Cherrypicker Worker <android-build-cherrypicker-worker@google.com> | 2023-12-01 16:46:36 +0000 |
commit | 3414d01c7f3606bd700a9bff22df47d6d53c8b6a (patch) | |
tree | 867d105bc89f8822eb12dfa12b327b71edf7645a | |
parent | e5c1ac8b6aea9ebc606d80853662e32963e5f88a (diff) | |
download | art-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.java | 2 | ||||
-rw-r--r-- | libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java | 26 |
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")) |