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

Commit c7fda7b5 authored by Miguel Aranda's avatar Miguel Aranda Committed by Automerger Merge Worker
Browse files

Merge "Add first set of libcore benchmarks to the System Health CB framework." am: e01a01ca

parents 6a47166d e01a01ca
Loading
Loading
Loading
Loading
+115 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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 android.libcore;

import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.test.suitebuilder.annotation.LargeTest;

import androidx.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * What do various kinds of addition cost?
 */
@RunWith(AndroidJUnit4.class)
@LargeTest
public class AdditionPerfTest {

    @Rule
    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();

    @Test
    public int timeAddConstantToLocalInt() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        int result = 0;
        while (state.keepRunning()) {
            result += 123;
        }
        return result;
    }
    @Test
    public int timeAddTwoLocalInts() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        int result = 0;
        int constant = 123;
        while (state.keepRunning()) {
            result += constant;
        }
        return result;
    }
    @Test
    public long timeAddConstantToLocalLong() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        long result = 0;
        while (state.keepRunning()) {
            result += 123L;
        }
        return result;
    }
    @Test
    public long timeAddTwoLocalLongs() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        long result = 0;
        long constant = 123L;
        while (state.keepRunning()) {
            result += constant;
        }
        return result;
    }
    @Test
    public float timeAddConstantToLocalFloat() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        float result = 0.0f;
        while (state.keepRunning()) {
            result += 123.0f;
        }
        return result;
    }
    @Test
    public float timeAddTwoLocalFloats() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        float result = 0.0f;
        float constant = 123.0f;
        while (state.keepRunning()) {
            result += constant;
        }
        return result;
    }
    @Test
    public double timeAddConstantToLocalDouble() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        double result = 0.0;
        while (state.keepRunning()) {
            result += 123.0;
        }
        return result;
    }
    @Test
    public double timeAddTwoLocalDoubles() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        double result = 0.0;
        double constant = 123.0;
        while (state.keepRunning()) {
            result += constant;
        }
        return result;
    }
}
+77 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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 android.libcore;

import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.test.suitebuilder.annotation.LargeTest;

import androidx.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Arrays;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ArrayCopyPerfTest {

    @Rule
    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();

    @Test
    public void timeManualArrayCopy() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        char[] src = new char[8192];
        while (state.keepRunning()) {
            char[] dst = new char[8192];
            for (int i = 0; i < 8192; ++i) {
                dst[i] = src[i];
            }
        }
    }

    @Test
    public void time_System_arrayCopy() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        char[] src = new char[8192];
        while (state.keepRunning()) {
            char[] dst = new char[8192];
            System.arraycopy(src, 0, dst, 0, 8192);
        }
    }

    @Test
    public void time_Arrays_copyOf() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        char[] src = new char[8192];
        while (state.keepRunning()) {
            char[] dst = Arrays.copyOf(src, 8192);
        }
    }

    @Test
    public void time_Arrays_copyOfRange() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        char[] src = new char[8192];
        while (state.keepRunning()) {
            char[] dst = Arrays.copyOfRange(src, 0, 8192);
        }
    }
}
+80 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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 android.libcore;

import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.test.suitebuilder.annotation.LargeTest;

import androidx.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * How do various ways of iterating through an array compare?
 */
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ArrayIterationPerfTest {

    public class Foo {
        int mSplat;
    }

    @Rule
    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();

    Foo[] mArray = new Foo[27];
    {
        for (int i = 0; i < mArray.length; ++i) mArray[i] = new Foo();
    }
    @Test
    public void timeArrayIteration() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            int sum = 0;
            for (int i = 0; i < mArray.length; i++) {
                sum += mArray[i].mSplat;
            }
        }
    }
    @Test
    public void timeArrayIterationCached() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            int sum = 0;
            Foo[] localArray = mArray;
            int len = localArray.length;

            for (int i = 0; i < len; i++) {
                sum += localArray[i].mSplat;
            }
        }
    }
    @Test
    public void timeArrayIterationForEach() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            int sum = 0;
            for (Foo a: mArray) {
                sum += a.mSplat;
            }
        }
    }
}
+70 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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 android.libcore;

import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.test.suitebuilder.annotation.LargeTest;

import androidx.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.ArrayList;

/**
 * Is a hand-coded counted loop through an ArrayList cheaper than enhanced for?
 */
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ArrayListIterationPerfTest {

    public class Foo {
        int mSplat;
    }
    @Rule
    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();

    ArrayList<Foo> mList = new ArrayList<Foo>();
    {
        for (int i = 0; i < 27; ++i) mList.add(new Foo());
    }
    @Test
    public void timeArrayListIterationIndexed() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            int sum = 0;
            ArrayList<Foo> list = mList;
            int len = list.size();
            for (int i = 0; i < len; ++i) {
                sum += list.get(i).mSplat;
            }
        }
    }
    @Test
    public void timeArrayListIterationForEach() {
        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
            int sum = 0;
            for (Foo a : mList) {
                sum += a.mSplat;
            }
        }
    }
}