Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c693d93 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add non-interactive system server benchmarks"

parents 7c1c0f8b c62b083f
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -17,11 +17,12 @@
android_app {
    name: "startop_test_app",
    srcs: [
        "src/ComplexLayoutInflationActivity.java",
        "src/CPUIntensive.java",
        "src/EmptyActivity.java",
        "src/LayoutInflationActivity.java",
        "src/ComplexLayoutInflationActivity.java",
        "src/FrameLayoutInflationActivity.java",
        "src/LayoutInflationActivity.java",
        "src/NonInteractiveSystemServerBenchmarkActivity.java",
        "src/SystemServerBenchmarkActivity.java",
        "src/SystemServerBenchmarks.java",
        "src/TextViewInflationActivity.java",
+5 −0
Original line number Diff line number Diff line
@@ -84,6 +84,11 @@
            </intent-filter>
        </activity>

        <activity
            android:label="Non-interactive SystemServer Benchmark"
            android:name=".NonInteractiveSystemServerBenchmarkActivity"
            android:exported="true" />

    </application>

</manifest>
+11 −0
Original line number Diff line number Diff line
@@ -24,3 +24,14 @@ spent in view inflation to make it easier to focus on the time spent in view
inflation.

    adb shell am start -n com.android.startop.test/.ComplexLayoutInflationActivity

## NonInteractiveSystemServerBenchmark

This activity is for running microbenchmarks from the command line. Run as follows:

   adb shell am start -W -n com.android.startop.test .NonInteractiveSystemServerBenchmarkActivity

It takes awhile (and there's currently no automated way to make sure it's done),
but when it finishes, you can get the results like this:

    adb shell cat /sdcard/Android/data/com.android.startop.test/files/benchmark.csv
+71 −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 java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.ArrayList;

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 NonInteractiveSystemServerBenchmarkActivity extends Activity {
    ArrayList<CharSequence> benchmarkNames = new ArrayList();
    ArrayList<Runnable> benchmarkThunks = new ArrayList();

    PrintStream out;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SystemServerBenchmarks.initializeBenchmarks(this, (name, thunk) -> {
            benchmarkNames.add(name);
            benchmarkThunks.add(thunk);
        });

        try {
            out = new PrintStream(new File(getExternalFilesDir(null), "benchmark.csv"));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        out.println("Name,Mean,Stdev");
        runBenchmarks(0);
    }

    void runBenchmarks(int i) {
        if (i < benchmarkNames.size()) {
            SystemServerBenchmarks.runBenchmarkInBackground(benchmarkThunks.get(i),
                    (mean, stdev) -> {
                        out.printf("%s,%.0f,%.0f\n", benchmarkNames.get(i), mean, stdev);
                        runBenchmarks(i + 1);
                    });
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ class SystemServerBenchmarks {
    // Time limit to run benchmarks in seconds
    public static final int TIME_LIMIT = 5;

    static void initializeBenchmarks(BenchmarkRunner benchmarks, Activity parent) {
    static void initializeBenchmarks(Activity parent, BenchmarkRunner benchmarks) {
        benchmarks.addBenchmark("Empty", () -> {
        });