Measure Terminal boot time

Bug: 375051310
Test: atest TerminalAppTests. It shows avf_perf/terminal/boot_* metrics
Change-Id: I81e3a40e6eed8c2719624fd59ad2e1c6d0ea65f1
diff --git a/tests/Terminal/Android.bp b/tests/Terminal/Android.bp
index 745a47c..2a52068 100644
--- a/tests/Terminal/Android.bp
+++ b/tests/Terminal/Android.bp
@@ -15,6 +15,7 @@
         "androidx.test.core",
         "androidx.test.ext.junit",
         "junit",
+        "MicrodroidTestHelper",
     ],
     platform_apis: true,
     test_suites: ["device-tests"],
diff --git a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
index 64ef79f..6400438 100644
--- a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
+++ b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
@@ -21,10 +21,12 @@
 import android.app.Instrumentation;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Bundle;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.microdroid.test.common.MetricsProcessor;
 import com.android.virtualization.vmlauncher.InstallUtils;
 
 import org.junit.After;
@@ -32,10 +34,15 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 @RunWith(AndroidJUnit4.class)
 public class TerminalAppTest {
     private Instrumentation mInstr;
     private Context mTargetContext;
+    private final MetricsProcessor mMetricsProc = new MetricsProcessor("avf_perf/terminal/");
 
     @Before
     public void setup() {
@@ -65,9 +72,21 @@
         Intent intent = new Intent(mTargetContext, MainActivity.class);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
+        long start = System.currentTimeMillis();
         if (mInstr.startActivitySync(intent) instanceof MainActivity activity) {
             assertTrue("Failed to boot in 30s", activity.waitForBootCompleted(BOOT_TIMEOUT_MILLIS));
         }
+        long delay = System.currentTimeMillis() - start;
+
+        // TODO: measure multiple times?
+        List<Long> measurements = new ArrayList<>();
+        measurements.add(delay);
+        Map<String, Double> stats = mMetricsProc.computeStats(measurements, "boot", "ms");
+        Bundle bundle = new Bundle();
+        for (Map.Entry<String, Double> entry : stats.entrySet()) {
+            bundle.putDouble(entry.getKey(), entry.getValue());
+        }
+        mInstr.sendStatus(0, bundle);
     }
 
     @After