diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-09-10 23:11:33 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-09-10 23:11:33 +0000 |
commit | 9c06a0f55a946a1a908a117942122394e4acd9eb (patch) | |
tree | 0979f673db229e0d9f2f16f32fff1aeffb51a071 /startop | |
parent | a34d0b7831509b89fc9c3b3a27ef4fd47eb94431 (diff) | |
parent | aec05a2cdd9e8863f48ecdc0733b0dc2bd414883 (diff) |
Merge "Initial system server benchmark activity"
Diffstat (limited to 'startop')
-rw-r--r-- | startop/apps/test/Android.bp | 1 | ||||
-rw-r--r-- | startop/apps/test/AndroidManifest.xml | 13 | ||||
-rw-r--r-- | startop/apps/test/res/layout/system_server_benchmark_page.xml | 19 | ||||
-rw-r--r-- | startop/apps/test/src/SystemServerBenchmarkActivity.java | 112 |
4 files changed, 145 insertions, 0 deletions
diff --git a/startop/apps/test/Android.bp b/startop/apps/test/Android.bp index a4906d7b4cd3..13b7b5ca01c8 100644 --- a/startop/apps/test/Android.bp +++ b/startop/apps/test/Android.bp @@ -21,6 +21,7 @@ android_app { "src/LayoutInflationActivity.java", "src/ComplexLayoutInflationActivity.java", "src/FrameLayoutInflationActivity.java", + "src/SystemServerBenchmarkActivity.java", "src/TextViewInflationActivity.java", ], platform_apis: true, diff --git a/startop/apps/test/AndroidManifest.xml b/startop/apps/test/AndroidManifest.xml index 467d8f72e468..15785d4d44b9 100644 --- a/startop/apps/test/AndroidManifest.xml +++ b/startop/apps/test/AndroidManifest.xml @@ -71,6 +71,19 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + + <activity + android:label="SystemServer Benchmark" + android:name=".SystemServerBenchmarkActivity" + android:exported="true" > + + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> </manifest> diff --git a/startop/apps/test/res/layout/system_server_benchmark_page.xml b/startop/apps/test/res/layout/system_server_benchmark_page.xml new file mode 100644 index 000000000000..337fe65ff9e2 --- /dev/null +++ b/startop/apps/test/res/layout/system_server_benchmark_page.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <GridLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:columnCount="3" + android:id="@+id/benchmark_list"> + + <TextView android:text="Benchmark"/> + <TextView android:text="Mean (ms)"/> + <TextView android:text="Stdev (ms)"/> + + </GridLayout> +</ScrollView> diff --git a/startop/apps/test/src/SystemServerBenchmarkActivity.java b/startop/apps/test/src/SystemServerBenchmarkActivity.java new file mode 100644 index 000000000000..59a30a540d99 --- /dev/null +++ b/startop/apps/test/src/SystemServerBenchmarkActivity.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.startop.test; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Trace; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.GridLayout; +import android.widget.TextView; + +import java.util.Arrays; + +class Benchmark { + public static final int NUM_ITERATIONS = 1000; + + public Benchmark(ViewGroup parent, CharSequence name, Runnable thunk) { + Context context = parent.getContext(); + Button button = new Button(context); + TextView mean = new TextView(context); + TextView stdev = new TextView(context); + + button.setText(name); + mean.setText(""); + stdev.setText(""); + + button.setOnClickListener((_button) -> { + mean.setText("Running..."); + stdev.setText(""); + + new AsyncTask() { + double resultMean = 0; + double resultStdev = 0; + + @Override + protected Object doInBackground(Object... _args) { + long[] results = new long[NUM_ITERATIONS]; + + // Run benchmark + for (int i = 0; i < results.length; i++) { + results[i] = -System.nanoTime(); + thunk.run(); + results[i] += System.nanoTime(); + } + + // 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); + + 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", () -> { + }); + + PackageManager pm = getPackageManager(); + new Benchmark(benchmarkList, "getInstalledApplications", () -> { + pm.getInstalledApplications(PackageManager.MATCH_SYSTEM_ONLY); + }); + } +} |