| /* |
| * Copyright (C) 2007 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.core; |
| |
| import org.apache.harmony.dalvik.NativeTestTarget; |
| |
| import android.test.PerformanceTestBase; |
| import android.test.PerformanceTestCase; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.concurrent.atomic.AtomicInteger; |
| |
| import junit.framework.Assert; |
| |
| public class PerformanceTests { |
| public static String[] children() { |
| return new String[] { |
| //StringEquals2.class.getName(), |
| //StringEquals10.class.getName(), |
| //StringEquals20.class.getName(), |
| //StringEquals200.class.getName(), |
| //StringEquals200U.class.getName(), |
| //StringCompareTo10.class.getName(), |
| //StringCompareTo200.class.getName(), |
| StringLength.class.getName(), |
| StringCrawl.class.getName(), |
| Ackermann.class.getName(), |
| AddTest.class.getName(), |
| // AddMemberVariableTest.class.getName(), |
| ArrayListIterator.class.getName(), |
| BoundsCheckTest.class.getName(), |
| // EmptyClassBaseTest.class.getName(), |
| EmptyJniStaticMethod0.class.getName(), |
| EmptyJniStaticMethod6.class.getName(), |
| EmptyJniStaticMethod6L.class.getName(), |
| FibonacciFast.class.getName(), |
| FibonacciSlow.class.getName(), |
| // LoopTests.class.getName(), |
| // HashMapTest.class.getName(), |
| // InterfaceTests.class.getName(), |
| LocalVariableAccess.class.getName(), |
| MemeberVariableAccess.class.getName(), |
| NestedLoop.class.getName(), |
| // StringConcatenationTests.class.getName(), |
| // ArrayListBase.class.getName(), |
| SynchronizedGetAndSetInt.class.getName(), |
| |
| /* this will not work on JamVM -- lacks atomic ops */ |
| AtomicGetAndSetInt.class.getName(), |
| }; |
| } |
| |
| public static class SizeTest { |
| private int mSize; |
| |
| public SizeTest(int size) { |
| mSize = size; |
| } |
| |
| public int size() { |
| return mSize; |
| } |
| } |
| |
| public static class LocalVariableAccess extends PerformanceTestBase { |
| private static final int ITERATIONS = 100000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 20); |
| return 0; |
| } |
| |
| public void testRun() { |
| boolean variable = false; |
| boolean local = true; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; // 5 |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; // 10 |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; // 15 |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; |
| local = variable; // 20 |
| } |
| } |
| } |
| |
| /* This test is intentionally misspelled. Please do not rename it. Thanks! */ |
| public static class MemeberVariableAccess extends PerformanceTestBase { |
| private static final int ITERATIONS = 100000; |
| |
| public volatile boolean mMember = false; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 20); |
| return 0; |
| } |
| |
| public void testRun() { |
| boolean local = true; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; // 5 |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; // 10 |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; // 15 |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; |
| local = mMember; // 20 |
| } |
| } |
| } |
| |
| public static class ArrayListIterator extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private ArrayList mList; |
| private String[] mKeys; |
| private Iterator mIterator; |
| |
| public void setUp() throws Exception { |
| super.setUp(); |
| mList = new ArrayList(); |
| mKeys = new String[ITERATIONS]; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| mKeys[i] = Integer.toString(i, 16); |
| mList.add(mKeys[i]); |
| } |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testRun() { |
| mIterator = mList.iterator(); |
| while (mIterator.hasNext()) { |
| mIterator.next(); |
| } |
| } |
| } |
| |
| public static class Ackermann extends PerformanceTestBase { |
| public static final int ITERATIONS = 100; |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testRun() { |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| ackermann(3, 13); |
| } |
| } |
| |
| private int ackermann(int m, int n) { |
| if (m == 0) |
| return n + 1; |
| if (n == 0) |
| return ackermann(m - 1, 1); |
| return ackermann(m, n - 1); |
| } |
| } |
| |
| public static class FibonacciSlow extends PerformanceTestBase { |
| public void setUp() throws Exception { |
| super.setUp(); |
| Assert.assertEquals(0, fibonacci(0)); |
| Assert.assertEquals(1, fibonacci(1)); |
| Assert.assertEquals(1, fibonacci(2)); |
| Assert.assertEquals(2, fibonacci(3)); |
| Assert.assertEquals(6765, fibonacci(20)); |
| } |
| |
| public void tearDown() { |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| return 0; |
| } |
| |
| public void testRun() { |
| fibonacci(20); |
| } |
| |
| private long fibonacci(long n) { |
| if (n == 0) |
| return 0; |
| if (n == 1) |
| return 1; |
| return fibonacci(n - 2) + fibonacci(n - 1); |
| } |
| } |
| |
| public static class FibonacciFast extends PerformanceTestBase { |
| public void setUp() throws Exception { |
| super.setUp(); |
| Assert.assertEquals(0, fibonacci(0)); |
| Assert.assertEquals(1, fibonacci(1)); |
| Assert.assertEquals(1, fibonacci(2)); |
| Assert.assertEquals(2, fibonacci(3)); |
| Assert.assertEquals(6765, fibonacci(20)); |
| } |
| |
| public void tearDown() { |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| return 0; |
| } |
| |
| public void testRun() { |
| fibonacci(5000); |
| } |
| |
| private long fibonacci(long n) { |
| if (n == 0) |
| return 0; |
| if (n == 1) |
| return 1; |
| |
| int x = 0; |
| int y = 1; |
| for (int i = 0; i < n - 1; i++) { |
| y = y + x; |
| x = y - x; |
| } |
| |
| return y; |
| } |
| } |
| |
| public static class HashMapTest extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private HashMap mMap; |
| private String[] mKeys; |
| |
| public void setUp() throws Exception { |
| super.setUp(); |
| mMap = new HashMap(); |
| mKeys = new String[ITERATIONS]; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| mKeys[i] = Integer.toString(i, 16); |
| mMap.put(mKeys[i], i); |
| } |
| } |
| |
| public void tearDown() { |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testHashMapContainsKey() { |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| mMap.containsKey(mKeys[i]); |
| } |
| } |
| |
| public void testHashMapIterator() { |
| Iterator iterator; |
| |
| iterator = mMap.entrySet().iterator(); |
| while (iterator.hasNext()) { |
| iterator.next(); |
| } |
| } |
| |
| public void testHashMapPut() { |
| HashMap map = new HashMap(); |
| String[] keys = mKeys; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| map.put(keys[i], i); |
| } |
| } |
| } |
| |
| interface IA { |
| void funcA0(); |
| void funcA1(); |
| void funcA2(); |
| void funcA3(); |
| } |
| interface IAB extends IA { |
| void funcAB0(); |
| void funcAB1(); |
| void funcAB2(); |
| void funcAB3(); |
| } |
| interface IABC extends IAB { |
| void funcABC0(); |
| void funcABC1(); |
| void funcABC2(); |
| void funcABC3(); |
| } |
| interface IB { |
| void funcB0(); |
| void funcB1(); |
| void funcB2(); |
| void funcB3(); |
| } |
| interface IC { |
| void funcC0(); |
| void funcC1(); |
| void funcC2(); |
| void funcC3(); |
| } |
| |
| static class Alphabet implements Cloneable, IB, IABC, IC, Runnable { |
| public void funcA0() { |
| } |
| public void funcA1() { |
| } |
| public void funcA2() { |
| } |
| public void funcA3() { |
| } |
| public void funcAB0() { |
| } |
| public void funcAB1() { |
| } |
| public void funcAB2() { |
| } |
| public void funcAB3() { |
| } |
| public void funcABC0() { |
| } |
| public void funcABC1() { |
| } |
| public void funcABC2() { |
| } |
| public void funcABC3() { |
| } |
| public void funcB0() { |
| } |
| public void funcB1() { |
| } |
| public void funcB2() { |
| } |
| public void funcB3() { |
| } |
| public void funcC0() { |
| } |
| public void funcC1() { |
| } |
| public void funcC2() { |
| } |
| public void funcC3() { |
| } |
| public void run() { |
| } |
| }; |
| |
| public static class InterfaceTests extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| /* call method directly */ |
| public void testInterfaceCalls0() { |
| Alphabet alpha = new Alphabet(); |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| alpha.funcABC1(); |
| } |
| } |
| |
| /* call method through interface reference */ |
| public void testInterfaceCalls1() { |
| Alphabet alpha = new Alphabet(); |
| IABC iabc = alpha; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| iabc.funcABC1(); |
| } |
| } |
| |
| public void testInstanceOfTrivial() { |
| Alphabet alpha = new Alphabet(); |
| IABC iabc = alpha; |
| boolean val; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| val = iabc instanceof Alphabet; |
| } |
| } |
| |
| public void testInstanceOfInterface() { |
| Alphabet alpha = new Alphabet(); |
| IABC iabc = alpha; |
| boolean val; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| val = iabc instanceof IA; |
| } |
| } |
| |
| public void testInstanceOfNot() { |
| Alphabet alpha = new Alphabet(); |
| IABC iabc = alpha; |
| boolean val; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| val = iabc instanceof EmptyInterface; |
| } |
| } |
| } |
| |
| public static class NestedLoop extends PerformanceTestBase { |
| private static final int ITERATIONS = 10; |
| private static final int LOOPS = 5; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * LOOPS); |
| return 0; |
| } |
| |
| public void testRun() { |
| int x = 0; |
| for (int a = 0; a < ITERATIONS; a++) { |
| for (int b = 0; b < ITERATIONS; b++) { |
| for (int c = 0; c < ITERATIONS; c++) { |
| for (int d = 0; d < ITERATIONS; d++) { |
| for (int e = 0; e < ITERATIONS; e++) { |
| x++; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| public static class StringConcatenationTests extends PerformanceTestBase { |
| private static final int ITERATIONS = 1000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testStringConcatenation1() { |
| StringBuffer buffer = new StringBuffer(); |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| buffer.append("Hello World!\n"); |
| } |
| buffer = null; |
| } |
| |
| public void testStringConcatenation2() { |
| String string = ""; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| string += "Hello World!\n"; |
| } |
| string = null; |
| } |
| } |
| |
| public static class StringLength extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private static final String TEST_STRING = "This is the string we use for testing..."; // 40 chars |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| String testStr = TEST_STRING; |
| int length; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| length = testStr.length(); |
| } |
| } |
| } |
| |
| public static class EmptyJniStaticMethod0 extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| int a, b, c, d, e, f; |
| |
| a = b = c = d = e = f = 0; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| } |
| } |
| } |
| public static class EmptyJniStaticMethod6 extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| int a, b, c, d, e, f; |
| |
| a = b = c = d = e = f = 0; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| } |
| } |
| } |
| public static class EmptyJniStaticMethod6L extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| String a = null; |
| String[] b = null; |
| int[][] c = null; |
| Object d = null; |
| Object[] e = null; |
| Object[][][][] f = null; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6L(a, b, c, d, e, f); |
| } |
| } |
| } |
| |
| public static class StringCrawl extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private static final String TEST_STRING = "This is the string we use for testing..."; // 40 chars |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * TEST_STRING.length()); |
| return 0; |
| } |
| |
| public void testRun() { |
| String testStr = TEST_STRING; |
| char ch; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| /* this is the wrong way to walk through a string */ |
| for (int j = 0; j < testStr.length(); j++) { |
| ch = testStr.charAt(j); |
| } |
| } |
| } |
| } |
| |
| public static class AddTest extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 20); |
| return 0; |
| } |
| |
| public void testRun() { |
| int j = 0; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| } |
| } |
| } |
| |
| public static class AddMemberVariableTest extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private int j; |
| |
| public void setUp() throws Exception { |
| super.setUp(); |
| j = 0; |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testAddMemberVariableTest() { |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| j++; |
| } |
| } |
| |
| public void testAddMemberVariableInMethodTest() { |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| add(); |
| } |
| } |
| |
| public void add() { |
| j++; |
| } |
| } |
| |
| private interface EmptyInterface { |
| public void emptyVirtual(); |
| |
| } |
| |
| private static class EmptyClass implements EmptyInterface { |
| public void emptyVirtual() { |
| } |
| |
| public static void emptyStatic() { |
| } |
| } |
| |
| public static class EmptyClassBaseTest extends PerformanceTestBase { |
| protected EmptyInterface mEmptyInterface; |
| protected EmptyClass mEmptyClass; |
| |
| public void setUp() throws Exception { |
| super.setUp(); |
| mEmptyClass = new EmptyClass(); |
| mEmptyInterface = mEmptyClass; |
| } |
| private static final int ITERATIONS = 10000; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testEmptyVirtualMethod() { |
| //EmptyClass emtpyClass = mEmptyClass; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| mEmptyClass.emptyVirtual(); |
| } |
| } |
| |
| public void testEmptyVirtualMethodTestInLocal() { |
| EmptyClass empty = mEmptyClass; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| empty.emptyVirtual(); |
| } |
| } |
| |
| public void testEmptyStaticMethod () { |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| EmptyClass.emptyStatic(); |
| } |
| } |
| |
| public void testEmptyJniStaticMethod0() { |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| NativeTestTarget.emptyJniStaticMethod0(); |
| } |
| } |
| |
| public void testEmptyJniStaticMethod6() { |
| int a, b, c, d, e, f; |
| |
| a = b = c = d = e = f = 0; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| NativeTestTarget.emptyJniStaticMethod6(a, b, c, d, e, f); |
| } |
| } |
| |
| public void testEmptyInternalStaticMethod() { |
| /* |
| * The method called is a VM-internal method with no extra |
| * wrapping. |
| */ |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| NativeTestTarget.emptyInternalStaticMethod(); |
| } |
| } |
| |
| public void testEmptyInlineStaticMethod() { |
| /* |
| * The method called is a VM-internal method that gets |
| * specially "inlined" in a bytecode transformation. |
| */ |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| NativeTestTarget.emptyInlineMethod(); |
| } |
| } |
| |
| public void testEmptyInterfaceMethodTest() { |
| EmptyInterface emptyInterface = mEmptyInterface; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| emptyInterface.emptyVirtual(); |
| } |
| } |
| } |
| |
| public static class LoopTests extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| private SizeTest mSizeTest = new SizeTest(ITERATIONS); |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testForLoopTest() { |
| int i = 0; |
| for (; i < 10000; i++) { |
| } |
| } |
| |
| public void testWhileLoopTest() { |
| int i = 0; |
| |
| while (i < 10000) { |
| i++; |
| } |
| } |
| |
| public void testForLoopSizeCalledInside() { |
| for (int i = 0; i < mSizeTest.size(); i++) { |
| } |
| } |
| |
| public void testForLoopSizeCalledOutside() { |
| final int size = mSizeTest.size(); |
| for (int i = 0; i < size; i++) { |
| } |
| } |
| } |
| |
| public static class BoundsCheckTest extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| int[] data = new int[1]; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| data[0] = i; |
| } |
| } |
| } |
| |
| public static class ArrayListBase extends PerformanceTestBase { |
| public void setUp() throws Exception { |
| super.setUp(); |
| mList = new ArrayList(); |
| mList.add(0); |
| mList.add(1); |
| mList.add(2); |
| mList.add(3); |
| mList.add(4); |
| mList.add(5); |
| mList.add(6); |
| mList.add(7); |
| mList.add(8); |
| mList.add(9); |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(100); |
| return 0; |
| } |
| |
| ArrayList<Integer> mList; |
| |
| public void testForArrayList() { |
| int i = 0; |
| int res = 0; |
| for (; i < 100; i++) { |
| for (int j = 0; j < mList.size(); j++) { |
| res += mList.get(j); |
| } |
| } |
| } |
| |
| public void testForLocalArrayList() { |
| int i = 0; |
| int res = 0; |
| for (; i < 100; i++) { |
| final List<Integer> list = mList; |
| final int N = list.size(); |
| for (int j = 0; j < N; j++) { |
| res += list.get(j); |
| } |
| } |
| } |
| |
| public void testForEachArrayList() { |
| int i = 0; |
| int res = 0; |
| for (; i < 100; i++) { |
| for (Integer v : mList) { |
| res += v; |
| } |
| } |
| } |
| } |
| |
| public static class SynchronizedGetAndSetInt extends PerformanceTestBase { |
| private static final int ITERATIONS = 100000; |
| |
| public int mMember = 0; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testRun() { |
| int result = 0; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| synchronized (this) { |
| result = mMember; |
| mMember = i; |
| } |
| } |
| } |
| } |
| |
| public static class AtomicGetAndSetInt extends PerformanceTestBase { |
| private static final int ITERATIONS = 100000; |
| |
| public AtomicInteger mMember = new AtomicInteger(0); |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS); |
| return 0; |
| } |
| |
| public void testRun() { |
| int result = 0; |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| result = mMember.getAndSet(i); |
| } |
| } |
| } |
| |
| public static abstract class StringEquals extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| protected String mString1, mString2; |
| public void setUp() throws Exception { |
| super.setUp(); |
| } |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| String string1 = mString1; |
| String string2 = mString2; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| string1.equals(string2); |
| } |
| } |
| } |
| |
| public static class StringEquals2 extends StringEquals { |
| public void setUp() throws Exception { |
| mString1 = "01"; |
| mString2 = "0x"; |
| } |
| } |
| public static class StringEquals10 extends StringEquals { |
| public void setUp() throws Exception { |
| mString1 = "0123456789"; |
| mString2 = "012345678x"; |
| } |
| } |
| public static class StringEquals20 extends StringEquals { |
| public void setUp() throws Exception { |
| mString1 = "01234567890123456789"; |
| mString2 = "0123456789012345678x"; |
| } |
| } |
| |
| public static class StringEquals200 extends StringEquals { |
| public void setUp() throws Exception { |
| mString1 = "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789"; |
| mString2 = "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "012345678901234567890123456789012345678x"; |
| } |
| } |
| public static class StringEquals200U extends StringEquals { |
| /* make one of the strings non-word aligned (bad memcmp case) */ |
| public void setUp() throws Exception { |
| String tmpStr; |
| mString1 = "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789"; |
| tmpStr = "z0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "012345678901234567890123456789012345678x"; |
| mString2 = tmpStr.substring(1); |
| } |
| } |
| |
| public static abstract class StringCompareTo extends PerformanceTestBase { |
| private static final int ITERATIONS = 10000; |
| |
| protected String mString1, mString2; |
| |
| public int startPerformance(PerformanceTestCase.Intermediates intermediates) { |
| intermediates.setInternalIterations(ITERATIONS * 10); |
| return 0; |
| } |
| |
| public void testRun() { |
| String string1 = mString1; |
| String string2 = mString2; |
| |
| for (int i = ITERATIONS - 1; i >= 0; i--) { |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| string1.compareTo(string2); |
| } |
| } |
| } |
| public static class StringCompareTo10 extends StringCompareTo { |
| public void setUp() throws Exception { |
| mString1 = "0123456789"; |
| mString2 = "012345678x"; |
| } |
| } |
| public static class StringCompareTo200 extends StringCompareTo { |
| public void setUp() throws Exception { |
| mString1 = "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789"; |
| mString2 = "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "0123456789012345678901234567890123456789" |
| + "012345678901234567890123456789012345678x"; |
| } |
| } |
| } |
| |