Loading startop/apps/test/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ android_app { "src/LayoutInflationActivity.java", "src/ComplexLayoutInflationActivity.java", "src/FrameLayoutInflationActivity.java", "src/SystemServerBenchmarkActivity.java", "src/TextViewInflationActivity.java", ], platform_apis: true, Loading startop/apps/test/AndroidManifest.xml +13 −0 Original line number Diff line number Diff line Loading @@ -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> startop/apps/test/res/layout/system_server_benchmark_page.xml 0 → 100644 +19 −0 Original line number Diff line number Diff line <?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> startop/apps/test/src/SystemServerBenchmarkActivity.java 0 → 100644 +112 −0 Original line number Diff line number Diff line /* * 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); }); } } Loading
startop/apps/test/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ android_app { "src/LayoutInflationActivity.java", "src/ComplexLayoutInflationActivity.java", "src/FrameLayoutInflationActivity.java", "src/SystemServerBenchmarkActivity.java", "src/TextViewInflationActivity.java", ], platform_apis: true, Loading
startop/apps/test/AndroidManifest.xml +13 −0 Original line number Diff line number Diff line Loading @@ -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>
startop/apps/test/res/layout/system_server_benchmark_page.xml 0 → 100644 +19 −0 Original line number Diff line number Diff line <?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>
startop/apps/test/src/SystemServerBenchmarkActivity.java 0 → 100644 +112 −0 Original line number Diff line number Diff line /* * 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); }); } }