Use Application#onTrimMemory in memory reclaim test.

Application#onTrimMemory calls the onTrimMemory for all the
ComponentCallbacks2 registered in the application. This approach proves
to be more stable than the previous `adb shell am send-trim-memory` one.

Bug: 350643742
Test: atest MicrodroidTests
Change-Id: I28ca247e1c2c0a3fa46e1b9a948cfc02336f52f3
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
index b646ea1..ec1a553 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
@@ -27,12 +27,14 @@
 import static com.google.common.truth.Truth.assertWithMessage;
 import static com.google.common.truth.TruthJUnit.assume;
 
+import android.app.Application;
 import android.app.Instrumentation;
+import android.content.ComponentCallbacks2;
+import android.content.Context;
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.ParcelFileDescriptor.AutoCloseInputStream;
 import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
-import android.os.Process;
 import android.os.RemoteException;
 import android.system.Os;
 import android.system.virtualmachine.VirtualMachine;
@@ -619,7 +621,8 @@
                         .setMemoryBytes(256 * ONE_MEBI)
                         .build();
         VirtualMachine vm = forceCreateNewVirtualMachine(vmName, config);
-        MemoryReclaimListener listener = new MemoryReclaimListener(this::executeCommand);
+        MemoryReclaimListener listener =
+                new MemoryReclaimListener(this::executeCommand, getContext());
         BenchmarkVmListener.create(listener).runToFinish(TAG, vm);
         assertWithMessage("VM failed to start").that(listener.mPreCrosvm).isNotNull();
         assertWithMessage("Post trim stats not available").that(listener.mPostCrosvm).isNotNull();
@@ -654,11 +657,13 @@
     }
 
     private static class MemoryReclaimListener implements BenchmarkVmListener.InnerListener {
-        MemoryReclaimListener(Function<String, String> shellExecutor) {
+        MemoryReclaimListener(Function<String, String> shellExecutor, Context applicationCtx) {
             mShellExecutor = shellExecutor;
+            mApplication = (Application) applicationCtx;
         }
 
         public final Function<String, String> mShellExecutor;
+        private final Application mApplication;
 
         public CrosvmStats mPreCrosvm;
         public CrosvmStats mPostCrosvm;
@@ -674,7 +679,7 @@
             service.allocAnonMemory(256);
             mPreCrosvm = new CrosvmStats(vmPid, mShellExecutor);
             // Send a memory trim hint to cause memory reclaim.
-            mShellExecutor.apply("am send-trim-memory " + Process.myPid() + " RUNNING_CRITICAL");
+            mApplication.onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL);
             // Give time for the memory reclaim to do its work.
             try {
                 Thread.sleep(isCuttlefish() ? 10000 : 5000);