ART Services: Implement cancellation.

Bug: 244412198
Test: atest ArtServiceTests
Test: manual -
  1. adb shell pm art optimize-package -m speed -f \
        com.google.android.youtube
  2. adb shell pm art cancel <job-id>
Ignore-AOSP-First: ART Services.
Change-Id: I3ae3e5e65d1f2bfc7961d2df541e98a3c2e8a2d6
diff --git a/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java b/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
index fed5cfa..5e2314e 100644
--- a/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
+++ b/libartservice/service/javatests/com/android/server/art/DexOptHelperTest.java
@@ -33,6 +33,7 @@
 import static org.mockito.Mockito.when;
 
 import android.apphibernation.AppHibernationManager;
+import android.os.CancellationSignal;
 import android.os.PowerManager;
 
 import androidx.test.filters.SmallTest;
@@ -66,6 +67,7 @@
     @Mock private PowerManager.WakeLock mWakeLock;
     private PackageState mPkgState;
     private AndroidPackageApi mPkg;
+    private CancellationSignal mCancellationSignal;
 
     @Rule
     public OnSuccessRule onSuccessRule = new OnSuccessRule(() -> {
@@ -100,17 +102,19 @@
 
         mPkgState = createPackageState();
         mPkg = mPkgState.getAndroidPackage();
+        mCancellationSignal = new CancellationSignal();
 
         mDexOptHelper = new DexOptHelper(mInjector);
     }
 
     @Test
     public void testDexopt() throws Exception {
-        when(mPrimaryDexOptimizer.dexopt(same(mPkgState), same(mPkg), same(mParams)))
+        when(mPrimaryDexOptimizer.dexopt(
+                     same(mPkgState), same(mPkg), same(mParams), same(mCancellationSignal)))
                 .thenReturn(mPrimaryResults);
 
-        OptimizeResult result =
-                mDexOptHelper.dexopt(mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams);
+        OptimizeResult result = mDexOptHelper.dexopt(
+                mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams, mCancellationSignal);
 
         assertThat(result.getRequestedCompilerFilter()).isEqualTo("speed-profile");
         assertThat(result.getReason()).isEqualTo("install");
@@ -124,7 +128,7 @@
 
         InOrder inOrder = inOrder(mPrimaryDexOptimizer, mWakeLock);
         inOrder.verify(mWakeLock).acquire(anyLong());
-        inOrder.verify(mPrimaryDexOptimizer).dexopt(any(), any(), any());
+        inOrder.verify(mPrimaryDexOptimizer).dexopt(any(), any(), any(), any());
         inOrder.verify(mWakeLock).release();
     }
 
@@ -132,8 +136,8 @@
     public void testDexoptNoCode() throws Exception {
         when(mPkg.isHasCode()).thenReturn(false);
 
-        OptimizeResult result =
-                mDexOptHelper.dexopt(mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams);
+        OptimizeResult result = mDexOptHelper.dexopt(
+                mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams, mCancellationSignal);
 
         assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
         assertThat(result.getPackageOptimizeResults().get(0).getDexFileOptimizeResults()).isEmpty();
@@ -143,8 +147,8 @@
     public void testDexoptIsHibernating() throws Exception {
         lenient().when(mAhm.isHibernatingGlobally(PKG_NAME)).thenReturn(true);
 
-        OptimizeResult result =
-                mDexOptHelper.dexopt(mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams);
+        OptimizeResult result = mDexOptHelper.dexopt(
+                mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams, mCancellationSignal);
 
         assertThat(result.getFinalStatus()).isEqualTo(OptimizeResult.OPTIMIZE_SKIPPED);
         assertThat(result.getPackageOptimizeResults().get(0).getDexFileOptimizeResults()).isEmpty();
@@ -155,11 +159,12 @@
         lenient().when(mAhm.isHibernatingGlobally(PKG_NAME)).thenReturn(true);
         lenient().when(mAhm.isOatArtifactDeletionEnabled()).thenReturn(false);
 
-        when(mPrimaryDexOptimizer.dexopt(same(mPkgState), same(mPkg), same(mParams)))
+        when(mPrimaryDexOptimizer.dexopt(
+                     same(mPkgState), same(mPkg), same(mParams), same(mCancellationSignal)))
                 .thenReturn(mPrimaryResults);
 
-        OptimizeResult result =
-                mDexOptHelper.dexopt(mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams);
+        OptimizeResult result = mDexOptHelper.dexopt(
+                mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams, mCancellationSignal);
 
         assertThat(result.getPackageOptimizeResults().get(0).getDexFileOptimizeResults())
                 .containsExactlyElementsIn(mPrimaryResults);
@@ -167,12 +172,13 @@
 
     @Test
     public void testDexoptAlwaysReleasesWakeLock() throws Exception {
-        when(mPrimaryDexOptimizer.dexopt(same(mPkgState), same(mPkg), same(mParams)))
+        when(mPrimaryDexOptimizer.dexopt(
+                     same(mPkgState), same(mPkg), same(mParams), same(mCancellationSignal)))
                 .thenThrow(IllegalStateException.class);
 
         try {
-            OptimizeResult result =
-                    mDexOptHelper.dexopt(mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams);
+            OptimizeResult result = mDexOptHelper.dexopt(
+                    mock(PackageDataSnapshot.class), mPkgState, mPkg, mParams, mCancellationSignal);
         } catch (Exception e) {
         }