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