Loading apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java 0 → 100644 +397 −0 Original line number Diff line number Diff line /* * 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); } } } Loading
apct-tests/perftests/core/src/android/opengl/perftests/MatrixPerfTest.java 0 → 100644 +397 −0 Original line number Diff line number Diff line /* * 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); } } }