Merge changes I3e6b6b44,I467e4264
* changes:
Run system_server benchmarks for 5 seconds
Add additional system_server benchmarks
diff --git a/startop/apps/test/src/SystemServerBenchmarkActivity.java b/startop/apps/test/src/SystemServerBenchmarkActivity.java
index 59a30a5..61d4322 100644
--- a/startop/apps/test/src/SystemServerBenchmarkActivity.java
+++ b/startop/apps/test/src/SystemServerBenchmarkActivity.java
@@ -17,8 +17,11 @@
package com.android.startop.test;
import android.app.Activity;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Trace;
@@ -32,7 +35,8 @@
import java.util.Arrays;
class Benchmark {
- public static final int NUM_ITERATIONS = 1000;
+ // Time limit to run benchmarks in seconds
+ public static final int TIME_LIMIT = 5;
public Benchmark(ViewGroup parent, CharSequence name, Runnable thunk) {
Context context = parent.getContext();
@@ -54,28 +58,25 @@
@Override
protected Object doInBackground(Object... _args) {
- long[] results = new long[NUM_ITERATIONS];
+ long startTime = System.nanoTime();
+ int count = 0;
// Run benchmark
- for (int i = 0; i < results.length; i++) {
- results[i] = -System.nanoTime();
+ while (true) {
+ long elapsed = -System.nanoTime();
thunk.run();
- results[i] += System.nanoTime();
+ elapsed += System.nanoTime();
+
+ count++;
+ double elapsedVariance = (double) elapsed - resultMean;
+ resultMean += elapsedVariance / count;
+ resultStdev += elapsedVariance * ((double) elapsed - resultMean);
+
+ if (System.nanoTime() - startTime > TIME_LIMIT * 1e9) {
+ break;
+ }
}
-
- // Compute mean
- long sum = Arrays.stream(results).sum();
- resultMean = (double) sum / results.length;
-
- // Compute standard deviation
- double variance = 0;
- for (long i : results) {
- double t = (double) i - resultMean;
- variance += t * t;
- }
- variance /= results.length - 1;
-
- resultStdev = Math.sqrt(variance);
+ resultStdev = Math.sqrt(resultStdev / (count - 1));
return null;
}
@@ -108,5 +109,48 @@
new Benchmark(benchmarkList, "getInstalledApplications", () -> {
pm.getInstalledApplications(PackageManager.MATCH_SYSTEM_ONLY);
});
+
+ new Benchmark(benchmarkList, "getInstalledPackages", () -> {
+ pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
+ });
+
+ new Benchmark(benchmarkList, "getPackageInfo", () -> {
+ try {
+ pm.getPackageInfo("com.android.startop.test", 0);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ new Benchmark(benchmarkList, "getApplicationInfo", () -> {
+ try {
+ pm.getApplicationInfo("com.android.startop.test", 0);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ try {
+ ApplicationInfo app = pm.getApplicationInfo("com.android.startop.test", 0);
+ new Benchmark(benchmarkList, "getResourcesForApplication", () -> {
+ try {
+ pm.getResourcesForApplication(app);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ ComponentName component = new ComponentName(this, this.getClass());
+ new Benchmark(benchmarkList, "getActivityInfo", () -> {
+ try {
+ pm.getActivityInfo(component, PackageManager.GET_META_DATA);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ });
+
}
}