diff options
Diffstat (limited to 'startop/apps/test/src/SystemServerBenchmarkActivity.java')
-rw-r--r-- | startop/apps/test/src/SystemServerBenchmarkActivity.java | 193 |
1 files changed, 23 insertions, 170 deletions
diff --git a/startop/apps/test/src/SystemServerBenchmarkActivity.java b/startop/apps/test/src/SystemServerBenchmarkActivity.java index c8d9fde0bdaf..6be8df3728af 100644 --- a/startop/apps/test/src/SystemServerBenchmarkActivity.java +++ b/startop/apps/test/src/SystemServerBenchmarkActivity.java @@ -17,27 +17,31 @@ package com.android.startop.test; import android.app.Activity; -import android.app.ActivityManager; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; -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.view.ViewGroup; import android.widget.Button; import android.widget.GridLayout; import android.widget.TextView; +public class SystemServerBenchmarkActivity extends Activity implements BenchmarkRunner { + protected GridLayout mBenchmarkList; -class Benchmark { - // Time limit to run benchmarks in seconds - public static final int TIME_LIMIT = 5; + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.system_server_benchmark_page); + + mBenchmarkList = findViewById(R.id.benchmark_list); - public Benchmark(ViewGroup parent, CharSequence name, Runnable thunk) { - Context context = parent.getContext(); + SystemServerBenchmarks.initializeBenchmarks(this, this); + } + + /** + * Adds a benchmark to the set to run. + * + * @param name A short name that shows up in the UI or benchmark results + */ + public void addBenchmark(CharSequence name, Runnable thunk) { + Context context = mBenchmarkList.getContext(); Button button = new Button(context); TextView mean = new TextView(context); TextView stdev = new TextView(context); @@ -50,165 +54,14 @@ class Benchmark { mean.setText("Running..."); stdev.setText(""); - new AsyncTask() { - double resultMean = 0; - double resultStdev = 0; - - @Override - protected Object doInBackground(Object... _args) { - long startTime = System.nanoTime(); - int count = 0; - - // Run benchmark - while (true) { - long elapsed = -System.nanoTime(); - thunk.run(); - 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; - } - } - resultStdev = Math.sqrt(resultStdev / (count - 1)); - - return null; - } - - @Override - protected void onPostExecute(Object _result) { - mean.setText(String.format("%.3f", resultMean / 1e6)); - stdev.setText(String.format("%.3f", resultStdev / 1e6)); - } - }.execute(new Object()); - }); - - parent.addView(button); - parent.addView(mean); - parent.addView(stdev); - } -} - -public class SystemServerBenchmarkActivity extends Activity { - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.system_server_benchmark_page); - - GridLayout benchmarkList = findViewById(R.id.benchmark_list); - - new Benchmark(benchmarkList, "Empty", () -> { - }); - - new Benchmark(benchmarkList, "CPU Intensive (1 thread)", () -> { - CPUIntensive.doSomeWork(1); - }); - - new Benchmark(benchmarkList, "CPU Intensive (2 thread)", () -> { - CPUIntensive.doSomeWork(2); - }); - - new Benchmark(benchmarkList, "CPU Intensive (4 thread)", () -> { - CPUIntensive.doSomeWork(4); - }); - - new Benchmark(benchmarkList, "CPU Intensive (8 thread)", () -> { - CPUIntensive.doSomeWork(8); - }); - - PackageManager pm = getPackageManager(); - 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); - } - }); - - new Benchmark(benchmarkList, "getPackagesForUid", () -> { - pm.getPackagesForUid(app.uid); + SystemServerBenchmarks.runBenchmarkInBackground(thunk, (resultMean, resultStdev) -> { + mean.setText(String.format("%.3f", resultMean / 1e6)); + stdev.setText(String.format("%.3f", resultStdev / 1e6)); }); - } 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); - } - }); - - new Benchmark(benchmarkList, "getLaunchIntentForPackage", () -> { - pm.getLaunchIntentForPackage("com.android.startop.test"); - }); - - new Benchmark(benchmarkList, "getPackageUid", () -> { - try { - pm.getPackageUid("com.android.startop.test", 0); - } catch (NameNotFoundException e) { - throw new RuntimeException(e); - } - }); - - new Benchmark(benchmarkList, "checkPermission", () -> { - // Check for the first permission I could find. - pm.checkPermission("android.permission.SEND_SMS", "com.android.startop.test"); - }); - - new Benchmark(benchmarkList, "checkSignatures", () -> { - // Compare with settings, since settings is on both AOSP and Master builds - pm.checkSignatures("com.android.settings", "com.android.startop.test"); - }); - - Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED); - new Benchmark(benchmarkList, "queryBroadcastReceivers", () -> { - pm.queryBroadcastReceivers(intent, 0); - }); - - new Benchmark(benchmarkList, "hasSystemFeature", () -> { - pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); - }); - - new Benchmark(benchmarkList, "resolveService", () -> { - pm.resolveService(intent, 0); - }); - - ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); - new Benchmark(benchmarkList, "getRunningAppProcesses", () -> { - am.getRunningAppProcesses(); }); + mBenchmarkList.addView(button); + mBenchmarkList.addView(mean); + mBenchmarkList.addView(stdev); } } |