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) {
}