Refactor interactive microbenchmarks

Replaces the SystemServer Benchmark activity with one that has
several sets of benchmarks grouped into categories. This will make it
easier to add more benchmarks that do not logically fit with the
categories we already have.

This does not remove any of the other benchmark activities, but in a
follow up CL, we should remove those since they are covered by the
Interactive Microbenchmarks activity.

This also does not adjust the non-interactive mode, which should also
happen in a followup.

Change-Id: I1d079362df0d32642525ede5b41779d76a5735ec
diff --git a/startop/apps/test/Android.bp b/startop/apps/test/Android.bp
index 3f20273..c7c70db 100644
--- a/startop/apps/test/Android.bp
+++ b/startop/apps/test/Android.bp
@@ -25,8 +25,8 @@
         "src/InitCheckOverheadBenchmarkActivity.java",
         "src/InitCheckOverheadBenchmarks.java",
         "src/LayoutInflationActivity.java",
-        "src/NonInteractiveSystemServerBenchmarkActivity.java",
-        "src/SystemServerBenchmarkActivity.java",
+        "src/NonInteractiveMicrobenchmarkActivity.java",
+        "src/InteractiveMicrobenchmarkActivity.java",
         "src/SystemServerBenchmarks.java",
         "src/TextViewInflationActivity.java",
     ],
diff --git a/startop/apps/test/AndroidManifest.xml b/startop/apps/test/AndroidManifest.xml
index 235aa0d..adaab61 100644
--- a/startop/apps/test/AndroidManifest.xml
+++ b/startop/apps/test/AndroidManifest.xml
@@ -97,8 +97,8 @@
         </activity>
 
         <activity
-            android:label="SystemServer Benchmark"
-            android:name=".SystemServerBenchmarkActivity"
+            android:label="Interactive Microbenchmarks"
+            android:name=".InteractiveMicrobenchmarkActivity"
             android:exported="true" >
 
             <intent-filter>
@@ -109,8 +109,8 @@
         </activity>
 
         <activity
-            android:label="Non-interactive SystemServer Benchmark"
-            android:name=".NonInteractiveSystemServerBenchmarkActivity"
+            android:label="Non-interactive Microbenchmarks"
+            android:name=".NonInteractiveMicrobenchmarkActivity"
             android:exported="true" />
 
     </application>
diff --git a/startop/apps/test/src/CPUIntensiveBenchmarkActivity.java b/startop/apps/test/src/CPUIntensiveBenchmarkActivity.java
index 2ec5308..db3234a 100644
--- a/startop/apps/test/src/CPUIntensiveBenchmarkActivity.java
+++ b/startop/apps/test/src/CPUIntensiveBenchmarkActivity.java
@@ -18,7 +18,7 @@
 
 import android.os.Bundle;
 
-public class CPUIntensiveBenchmarkActivity extends SystemServerBenchmarkActivity {
+public class CPUIntensiveBenchmarkActivity extends InteractiveMicrobenchmarkActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.system_server_benchmark_page);
diff --git a/startop/apps/test/src/InitCheckOverheadBenchmarkActivity.java b/startop/apps/test/src/InitCheckOverheadBenchmarkActivity.java
index 3e0e3b1..92d8638 100644
--- a/startop/apps/test/src/InitCheckOverheadBenchmarkActivity.java
+++ b/startop/apps/test/src/InitCheckOverheadBenchmarkActivity.java
@@ -18,7 +18,7 @@
 
 import android.os.Bundle;
 
-public class InitCheckOverheadBenchmarkActivity extends SystemServerBenchmarkActivity {
+public class InitCheckOverheadBenchmarkActivity extends InteractiveMicrobenchmarkActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.system_server_benchmark_page);
diff --git a/startop/apps/test/src/SystemServerBenchmarkActivity.java b/startop/apps/test/src/InteractiveMicrobenchmarkActivity.java
similarity index 68%
rename from startop/apps/test/src/SystemServerBenchmarkActivity.java
rename to startop/apps/test/src/InteractiveMicrobenchmarkActivity.java
index 6be8df3..8ed7f6a 100644
--- a/startop/apps/test/src/SystemServerBenchmarkActivity.java
+++ b/startop/apps/test/src/InteractiveMicrobenchmarkActivity.java
@@ -18,12 +18,13 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.graphics.Typeface;
 import android.os.Bundle;
 import android.widget.Button;
 import android.widget.GridLayout;
 import android.widget.TextView;
 
-public class SystemServerBenchmarkActivity extends Activity implements BenchmarkRunner {
+public class InteractiveMicrobenchmarkActivity extends Activity implements BenchmarkRunner {
     protected GridLayout mBenchmarkList;
 
     protected void onCreate(Bundle savedInstanceState) {
@@ -32,10 +33,32 @@
 
         mBenchmarkList = findViewById(R.id.benchmark_list);
 
+        addBenchmark("Empty", () -> {
+        });
+        addHeader("Application Benchmarks");
+        CPUIntensiveBenchmarks.initializeBenchmarks(this, this);
+        addHeader("Init Check Overhead Benchmarks");
+        InitCheckOverheadBenchmarks.initializeBenchmarks(this, this);
+        addHeader("System Server Benchmarks");
         SystemServerBenchmarks.initializeBenchmarks(this, this);
     }
 
     /**
+     * Add a heading for a group of related benchmarks
+     *
+     * @param name The name of this group of benchmarks
+     */
+    public void addHeader(CharSequence name) {
+        Context context = mBenchmarkList.getContext();
+        TextView header = new TextView(context);
+        header.setText(name);
+        header.setTypeface(header.getTypeface(), Typeface.BOLD);
+        GridLayout.LayoutParams params = new GridLayout.LayoutParams();
+        params.columnSpec = GridLayout.spec(0, 3);
+        mBenchmarkList.addView(header, params);
+    }
+
+    /**
      * Adds a benchmark to the set to run.
      *
      * @param name A short name that shows up in the UI or benchmark results
diff --git a/startop/apps/test/src/NonInteractiveSystemServerBenchmarkActivity.java b/startop/apps/test/src/NonInteractiveMicrobenchmarkActivity.java
similarity index 96%
rename from startop/apps/test/src/NonInteractiveSystemServerBenchmarkActivity.java
rename to startop/apps/test/src/NonInteractiveMicrobenchmarkActivity.java
index a2dc2cf..0162ac6 100644
--- a/startop/apps/test/src/NonInteractiveSystemServerBenchmarkActivity.java
+++ b/startop/apps/test/src/NonInteractiveMicrobenchmarkActivity.java
@@ -36,7 +36,7 @@
 import android.widget.GridLayout;
 import android.widget.TextView;
 
-public class NonInteractiveSystemServerBenchmarkActivity extends Activity {
+public class NonInteractiveMicrobenchmarkActivity extends Activity {
     ArrayList<CharSequence> benchmarkNames = new ArrayList();
     ArrayList<Runnable> benchmarkThunks = new ArrayList();
 
diff --git a/startop/apps/test/src/SystemServerBenchmarks.java b/startop/apps/test/src/SystemServerBenchmarks.java
index 25b43f4..8114bc2 100644
--- a/startop/apps/test/src/SystemServerBenchmarks.java
+++ b/startop/apps/test/src/SystemServerBenchmarks.java
@@ -57,9 +57,6 @@
     static void initializeBenchmarks(Activity parent, BenchmarkRunner benchmarks) {
         final String packageName = parent.getPackageName();
 
-        benchmarks.addBenchmark("Empty", () -> {
-        });
-
         PackageManager pm = parent.getPackageManager();
         benchmarks.addBenchmark("getInstalledApplications", () -> {
             pm.getInstalledApplications(PackageManager.MATCH_SYSTEM_ONLY);