Factor out statistics codes
Test: atest MicrodroidBenchmarks
Change-Id: I22651063393f62f41acdf87d83323644ad861fc0
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 7ee2d39..beccc1a 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
@@ -122,10 +122,8 @@
final int trialCount = 10;
- double sum = 0;
- double squareSum = 0;
- double min = Double.MAX_VALUE;
- double max = Double.MIN_VALUE;
+ List<Double> bootTimeMetrics = new ArrayList<>();
+
for (int i = 0; i < trialCount; i++) {
VirtualMachineConfig.Builder builder =
mInner.newVmConfigBuilder("assets/vm_config.json");
@@ -136,23 +134,11 @@
BootResult result = tryBootVm(TAG, "test_vm_boot_time");
assertThat(result.payloadStarted).isTrue();
- double elapsedMilliseconds = result.elapsedNanoTime / 1000000.0;
-
- sum += elapsedMilliseconds;
- squareSum += elapsedMilliseconds * elapsedMilliseconds;
- if (min > elapsedMilliseconds) min = elapsedMilliseconds;
- if (max < elapsedMilliseconds) max = elapsedMilliseconds;
+ final Double nanoToMilli = 1000000.0;
+ bootTimeMetrics.add(result.elapsedNanoTime / nanoToMilli);
}
- Bundle bundle = new Bundle();
- double average = sum / trialCount;
- double variance = squareSum / trialCount - average * average;
- double stdev = Math.sqrt(variance);
- bundle.putDouble("avf_perf/microdroid/boot_time_average_ms", average);
- bundle.putDouble("avf_perf/microdroid/boot_time_min_ms", min);
- bundle.putDouble("avf_perf/microdroid/boot_time_max_ms", max);
- bundle.putDouble("avf_perf/microdroid/boot_time_stdev_ms", stdev);
- mInstrumentation.sendStatus(0, bundle);
+ reportMetrics(bootTimeMetrics, "avf_perf/microdroid/boot_time_", "_ms");
}
@Test
@@ -199,30 +185,36 @@
VirtioBlkVmEventListener listener = new VirtioBlkVmEventListener(readRates, isRand);
listener.runToFinish(TAG, vm);
}
- reportMetrics(readRates, isRand);
- }
- private void reportMetrics(List<Double> readRates, boolean isRand) {
- double sum = 0;
- for (double rate : readRates) {
- sum += rate;
- }
- double mean = sum / readRates.size();
- double sqSum = 0;
- for (double rate : readRates) {
- sqSum += (rate - mean) * (rate - mean);
- }
- double stdDev = Math.sqrt(sqSum / (readRates.size() - 1));
-
- Bundle bundle = new Bundle();
String metricNamePrefix =
"avf_perf/virtio-blk/"
+ (mProtectedVm ? "protected-vm/" : "unprotected-vm/")
+ (isRand ? "rand_read_" : "seq_read_");
String unit = "_mb_per_sec";
+ reportMetrics(readRates, metricNamePrefix, unit);
+ }
- bundle.putDouble(metricNamePrefix + "mean" + unit, mean);
- bundle.putDouble(metricNamePrefix + "std" + unit, stdDev);
+ private void reportMetrics(List<Double> data, String prefix, String suffix) {
+ double sum = 0;
+ double min = Double.MAX_VALUE;
+ double max = Double.MIN_VALUE;
+ for (double d : data) {
+ sum += d;
+ if (min > d) min = d;
+ if (max < d) max = d;
+ }
+ double avg = sum / data.size();
+ double sqSum = 0;
+ for (double d : data) {
+ sqSum += (d - avg) * (d - avg);
+ }
+ double stdDev = Math.sqrt(sqSum / (data.size() - 1));
+
+ Bundle bundle = new Bundle();
+ bundle.putDouble(prefix + "min" + suffix, min);
+ bundle.putDouble(prefix + "max" + suffix, max);
+ bundle.putDouble(prefix + "average" + suffix, avg);
+ bundle.putDouble(prefix + "stdev" + suffix, stdDev);
mInstrumentation.sendStatus(0, bundle);
}