diff options
| -rw-r--r-- | apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java b/apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java new file mode 100644 index 000000000000..b29614817ee2 --- /dev/null +++ b/apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java @@ -0,0 +1,397 @@ +/* + * Copyright (C) 2022 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.opengl.perftests; + +import android.opengl.Matrix; +import android.perftests.utils.BenchmarkState; +import android.perftests.utils.PerfStatusReporter; + +import androidx.test.filters.LargeTest; + +import org.junit.Rule; +import org.junit.Test; + +import java.util.Random; + +@LargeTest +public class MatrixPerfTest { + @Rule + public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); + + @Rule + public float[] array = new float[48]; + + @Rule + public float[] bigArray = new float[16 * 1024 * 1024]; + + + @Test + public void testMultiplyMM() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(array, 32, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMMLeftOverlapResult() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(array, 16, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMMRightOverlapResult() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(array, 0, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMMAllOverlap() { + Random rng = new Random(); + for (int i = 0; i < 16; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(array, 0, array, 0, array, 0); + } + } + + @Test + public void testMultiplyMMOutputBigArray() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(bigArray, 1024, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMMAllBigArray() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + bigArray[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMM(bigArray, 1024, bigArray, 16, bigArray, 0); + } + } + + @Test + public void testMultiplyMV() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(array, 20, array, 4, array, 0); + } + } + + @Test + public void testMultiplyMVLeftOverlapResult() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(array, 4, array, 4, array, 0); + } + } + + @Test + public void testMultiplyMVRightOverlapResult() { + Random rng = new Random(); + for (int i = 0; i < 32; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(array, 0, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMVAllOverlap() { + Random rng = new Random(); + for (int i = 0; i < 16; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(array, 0, array, 0, array, 0); + } + } + + @Test + public void testMultiplyMVOutputBigArray() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(bigArray, 1024, array, 16, array, 0); + } + } + + @Test + public void testMultiplyMVAllBigArray() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + bigArray[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.multiplyMV(bigArray, 1024, bigArray, 16, bigArray, 0); + } + } + + @Test + public void testTransposeM() { + Random rng = new Random(); + for (int i = 0; i < 16; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.transposeM(array, 16, array, 0); + } + } + + @Test + public void testInvertM() { + // non-singular matrix + array[ 0] = 0.814f; + array[ 1] = 4.976f; + array[ 2] = -3.858f; + array[ 3] = 7.206f; + array[ 4] = 5.112f; + array[ 5] = -2.420f; + array[ 6] = 8.791f; + array[ 7] = 6.426f; + array[ 8] = 2.945f; + array[ 9] = 1.801f; + array[10] = -2.594f; + array[11] = 2.663f; + array[12] = -5.003f; + array[13] = -4.188f; + array[14] = 3.340f; + array[15] = -1.235f; + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.invertM(array, 16, array, 0); + } + } + + @Test + public void testOrthoM() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.orthoM(array, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); + } + } + + @Test + public void testFrustumM() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.frustumM(array, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); + } + } + + @Test + public void testPerspectiveM() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.perspectiveM(array, 0, 45.0f, 1.0f, 1.0f, 100.0f); + } + } + + @Test + public void testLength() { + Random rng = new Random(); + for (int i = 0; i < 3; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.length(array[0], array[1], array[2]); + } + } + + @Test + public void testSetIdentityM() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.setIdentityM(array, 0); + } + } + + @Test + public void testScaleM() { + Random rng = new Random(); + for (int i = 0; i < 19; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.scaleM(array, 19, array, 0, array[16], array[17], array[18]); + } + } + + @Test + public void testScaleMInPlace() { + Random rng = new Random(); + for (int i = 0; i < 19; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.scaleM(array, 0, array[16], array[17], array[18]); + } + } + + @Test + public void testTranslateM() { + Random rng = new Random(); + for (int i = 0; i < 19; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.translateM(array, 19, array, 0, array[16], array[17], array[18]); + } + } + + @Test + public void testTranslateMInPlace() { + Random rng = new Random(); + for (int i = 0; i < 19; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.translateM(array, 0, array[16], array[17], array[18]); + } + } + + @Test + public void testRotateM() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.rotateM(array, 20, array, 0, array[16], array[17], array[18], array[19]); + } + } + + @Test + public void testRotateMInPlace() { + Random rng = new Random(); + for (int i = 0; i < 20; i++) { + array[i] = rng.nextFloat(); + } + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.rotateM(array, 0, array[16], array[17], array[18], array[19]); + } + } + + @Test + public void testSetRotateM() { + Random rng = new Random(); + array[0] = rng.nextFloat() * 90.0f; + array[1] = rng.nextFloat() + 0.5f; + array[2] = rng.nextFloat() + 0.5f; + array[3] = rng.nextFloat() + 0.5f; + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.setRotateM(array, 4, array[0], array[1], array[2], array[3]); + } + } + + @Test + public void testSetRotateEulerM() { + Random rng = new Random(); + array[0] = rng.nextFloat() * 90.0f; + array[1] = rng.nextFloat() * 90.0f; + array[2] = rng.nextFloat() * 90.0f; + + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.setRotateEulerM(array, 3, array[0], array[1], array[2]); + } + } + + @Test + public void testSetLookAtM() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + while (state.keepRunning()) { + Matrix.setLookAtM(array, 9, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f); + } + } +} |