| /* |
| * Copyright (C) 2008 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. |
| */ |
| |
| import java.util.ArrayList; |
| |
| /** |
| * The matrix of tests includes the A-E axis for loop body contents and |
| * the 0-5 axis for iterator style. |
| * |
| * <ul> |
| * <li>A: empty body</li> |
| * <li>B: array element access and update</li> |
| * <li>C: instance field access and update</li> |
| * <li>D: method call to empty method</li> |
| * <li>E: synch and then method call to empty method</li> |
| * <li>F: 5 method calls to empty method</li> |
| * <li>G: one small object allocation (empty constructor)</li> |
| * <li>H: copy 8k of bytes from one array to another</li> |
| * </ul> |
| * |
| * <ul> |
| * <li>0: for() loop backward to 0</li> |
| * <li>1: for() loop forward to local variable</li> |
| * <li>2: for() loop forward to array length</li> |
| * <li>3: for(:) loop over array</li> |
| * <li>4: for() loop forward to instance variable</li> |
| * <li>5: for() loop forward to trivial method call</li> |
| * <li>6: for(:) loop over ArrayList</li> |
| * </ul> |
| */ |
| public class Main { |
| static public final int BODIES = 8; |
| static public final int LOOPS = 7; |
| |
| static public void main(String[] args) throws Exception { |
| boolean timing = (args.length >= 1) && args[0].equals("--timing"); |
| |
| int iters = 100; |
| double probeSec; |
| |
| for (;;) { |
| long t0 = System.nanoTime(); |
| runAllTests(iters, false); |
| long t1 = System.nanoTime(); |
| |
| probeSec = (t1 - t0) / 1000000000.0; |
| if (probeSec > 0.25) { |
| break; |
| } |
| |
| iters *= 2; |
| } |
| |
| // Attempt to arrange for the real test to take 20 seconds. |
| iters = (int) ((iters / probeSec) * 20); |
| |
| if (timing) { |
| System.out.println("iters = " + iters); |
| } |
| |
| run(timing, iters); |
| } |
| |
| static private enum Normalization { |
| NONE, PER_COLUMN, TOP_LEFT; |
| } |
| |
| static public void printTimings(double[][] timings, Normalization norm) { |
| System.out.println(); |
| System.out.printf("%-7s A B C D E" + |
| " F G H\n", |
| (norm == Normalization.NONE) ? "(usec)" : "(ratio)"); |
| System.out.println(" -------- -------- -------- -------- " + |
| "-------- -------- -------- --------"); |
| |
| double bases[] = new double[BODIES]; |
| for (int i = 0; i < BODIES; i++) { |
| double n; |
| switch (norm) { |
| case PER_COLUMN: n = timings[i][0]; break; |
| case TOP_LEFT: n = timings[0][0]; break; |
| default /*NONE*/: n = 1.0; break; |
| } |
| bases[i] = n; |
| } |
| |
| for (int i = 0; i < LOOPS; i++) { |
| System.out.printf("%4d: %8.3g %8.3g %8.3g %8.3g %8.3g %8.3g " + |
| "%8.3g %8.3g\n", |
| i, |
| timings[0][i] / bases[0], |
| timings[1][i] / bases[1], |
| timings[2][i] / bases[2], |
| timings[3][i] / bases[3], |
| timings[4][i] / bases[4], |
| timings[5][i] / bases[5], |
| timings[6][i] / bases[6], |
| timings[7][i] / bases[7]); |
| } |
| } |
| |
| static public void run(boolean timing, int iters) { |
| double[][] timings = null; // assign to avoid apparent javac bug |
| |
| // Try up to 5 times to get good times. |
| for (int i = 0; i < 5; i++) { |
| double[][] newTimings = runAllTests(iters, timing || (i == 0)); |
| |
| if (timings == null) { |
| timings = newTimings; |
| } else { |
| combineTimings(timings, newTimings, i); |
| } |
| |
| if (checkTimes(timings, timing)) { |
| break; |
| } |
| } |
| |
| System.out.println("Done with runs."); |
| |
| boolean goodTimes = checkTimes(timings, true); |
| |
| if (! goodTimes) { |
| timing = true; |
| } |
| |
| if (timing) { |
| printTimings(timings, Normalization.NONE); |
| printTimings(timings, Normalization.TOP_LEFT); |
| printTimings(timings, Normalization.PER_COLUMN); |
| } else { |
| System.out.println("\nAll times are within the expected ranges."); |
| } |
| } |
| |
| static public void combineTimings(double[][] target, double[][] newTimes, |
| int oldWeight) { |
| for (int i = 0; i < target.length; i++) { |
| for (int j = 0; j < target[i].length; j++) { |
| target[i][j] = |
| ((target[i][j] * oldWeight) + newTimes[i][j]) |
| / (oldWeight + 1); |
| } |
| } |
| } |
| |
| static public boolean checkTimes(double[][] timings, boolean print) { |
| // expected increase over A1 |
| double[][] expected = { |
| { 1.0, 2.3, 2.4, 3.3, 6.5, 12.0, 57.0, 94.0 }, |
| { 1.2, 2.4, 2.5, 3.4, 6.6, 12.2, 60.0, 95.0 }, |
| { 1.5, 2.6, 2.9, 3.5, 6.7, 12.4, 63.0, 96.0 }, |
| { 1.6, 2.8, 2.9, 3.6, 6.8, 12.6, 63.5, 97.0 }, |
| { 1.7, 3.0, 2.9, 3.7, 6.9, 12.8, 64.0, 98.0 }, |
| { 6.0, 6.0, 6.0, 7.0, 10.0, 15.0, 64.5, 105.0 }, |
| { 31.0, 31.2, 31.5, 34.0, 41.0, 43.0, 91.0, 135.0 }, |
| }; |
| |
| boolean good = true; |
| |
| for (int x = 0; x < BODIES; x++) { |
| for (int y = 0; y < LOOPS; y++) { |
| double ratio = timings[x][y] / timings[0][0]; |
| if (ratio > expected[y][x]) { |
| if (print) { |
| System.out.printf("%c%d is too slow: %.3g vs. %.3g\n", |
| (char) (x + 'A'), y, ratio, expected[y][x]); |
| } |
| good = false; |
| } |
| } |
| } |
| |
| return good; |
| } |
| |
| static public double[][] runAllTests(int iters, boolean print) { |
| // diters is used to get usec, not nanosec; hence the extra 1000. |
| double diters = (double) iters * INNER_COUNT * 1000; |
| |
| double[][] timings = new double[BODIES][LOOPS]; |
| long t0, t1, t2, t3, t4, t5, t6, t7; |
| |
| // Column A |
| |
| if (print) { |
| System.out.println("Running A..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testA0(iters); |
| t1 = System.nanoTime(); |
| testA1(iters); |
| t2 = System.nanoTime(); |
| testA2(iters); |
| t3 = System.nanoTime(); |
| testA3(iters); |
| t4 = System.nanoTime(); |
| testA4(iters); |
| t5 = System.nanoTime(); |
| testA5(iters); |
| t6 = System.nanoTime(); |
| testA6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[0][0] = (t1 - t0) / diters; |
| timings[0][1] = (t2 - t1) / diters; |
| timings[0][2] = (t3 - t2) / diters; |
| timings[0][3] = (t4 - t3) / diters; |
| timings[0][4] = (t5 - t4) / diters; |
| timings[0][5] = (t6 - t5) / diters; |
| timings[0][6] = (t7 - t6) / diters; |
| |
| // Column B |
| |
| if (print) { |
| System.out.println("Running B..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testB0(iters); |
| t1 = System.nanoTime(); |
| testB1(iters); |
| t2 = System.nanoTime(); |
| testB2(iters); |
| t3 = System.nanoTime(); |
| testB3(iters); |
| t4 = System.nanoTime(); |
| testB4(iters); |
| t5 = System.nanoTime(); |
| testB5(iters); |
| t6 = System.nanoTime(); |
| testB6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[1][0] = (t1 - t0) / diters; |
| timings[1][1] = (t2 - t1) / diters; |
| timings[1][2] = (t3 - t2) / diters; |
| timings[1][3] = (t4 - t3) / diters; |
| timings[1][4] = (t5 - t4) / diters; |
| timings[1][5] = (t6 - t5) / diters; |
| timings[1][6] = (t7 - t6) / diters; |
| |
| // Column C |
| |
| if (print) { |
| System.out.println("Running C..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testC0(iters); |
| t1 = System.nanoTime(); |
| testC1(iters); |
| t2 = System.nanoTime(); |
| testC2(iters); |
| t3 = System.nanoTime(); |
| testC3(iters); |
| t4 = System.nanoTime(); |
| testC4(iters); |
| t5 = System.nanoTime(); |
| testC5(iters); |
| t6 = System.nanoTime(); |
| testC6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[2][0] = (t1 - t0) / diters; |
| timings[2][1] = (t2 - t1) / diters; |
| timings[2][2] = (t3 - t2) / diters; |
| timings[2][3] = (t4 - t3) / diters; |
| timings[2][4] = (t5 - t4) / diters; |
| timings[2][5] = (t6 - t5) / diters; |
| timings[2][6] = (t7 - t6) / diters; |
| |
| // Column D |
| |
| if (print) { |
| System.out.println("Running D..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testD0(iters); |
| t1 = System.nanoTime(); |
| testD1(iters); |
| t2 = System.nanoTime(); |
| testD2(iters); |
| t3 = System.nanoTime(); |
| testD3(iters); |
| t4 = System.nanoTime(); |
| testD4(iters); |
| t5 = System.nanoTime(); |
| testD5(iters); |
| t6 = System.nanoTime(); |
| testD6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[3][0] = (t1 - t0) / diters; |
| timings[3][1] = (t2 - t1) / diters; |
| timings[3][2] = (t3 - t2) / diters; |
| timings[3][3] = (t4 - t3) / diters; |
| timings[3][4] = (t5 - t4) / diters; |
| timings[3][5] = (t6 - t5) / diters; |
| timings[3][6] = (t7 - t6) / diters; |
| |
| // Column E |
| |
| if (print) { |
| System.out.println("Running E..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testE0(iters); |
| t1 = System.nanoTime(); |
| testE1(iters); |
| t2 = System.nanoTime(); |
| testE2(iters); |
| t3 = System.nanoTime(); |
| testE3(iters); |
| t4 = System.nanoTime(); |
| testE4(iters); |
| t5 = System.nanoTime(); |
| testE5(iters); |
| t6 = System.nanoTime(); |
| testE6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[4][0] = (t1 - t0) / diters; |
| timings[4][1] = (t2 - t1) / diters; |
| timings[4][2] = (t3 - t2) / diters; |
| timings[4][3] = (t4 - t3) / diters; |
| timings[4][4] = (t5 - t4) / diters; |
| timings[4][5] = (t6 - t5) / diters; |
| timings[4][6] = (t7 - t6) / diters; |
| |
| // Column F |
| |
| if (print) { |
| System.out.println("Running F..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testF0(iters); |
| t1 = System.nanoTime(); |
| testF1(iters); |
| t2 = System.nanoTime(); |
| testF2(iters); |
| t3 = System.nanoTime(); |
| testF3(iters); |
| t4 = System.nanoTime(); |
| testF4(iters); |
| t5 = System.nanoTime(); |
| testF5(iters); |
| t6 = System.nanoTime(); |
| testF6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[5][0] = (t1 - t0) / diters; |
| timings[5][1] = (t2 - t1) / diters; |
| timings[5][2] = (t3 - t2) / diters; |
| timings[5][3] = (t4 - t3) / diters; |
| timings[5][4] = (t5 - t4) / diters; |
| timings[5][5] = (t6 - t5) / diters; |
| timings[5][6] = (t7 - t6) / diters; |
| |
| // Reduce the iters for the last two, since they're much slower. |
| |
| iters /= 5; |
| diters /= 5; |
| |
| // Column G |
| |
| if (print) { |
| System.out.println("Running G..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testG0(iters); |
| t1 = System.nanoTime(); |
| testG1(iters); |
| t2 = System.nanoTime(); |
| testG2(iters); |
| t3 = System.nanoTime(); |
| testG3(iters); |
| t4 = System.nanoTime(); |
| testG4(iters); |
| t5 = System.nanoTime(); |
| testG5(iters); |
| t6 = System.nanoTime(); |
| testG6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[6][0] = (t1 - t0) / diters; |
| timings[6][1] = (t2 - t1) / diters; |
| timings[6][2] = (t3 - t2) / diters; |
| timings[6][3] = (t4 - t3) / diters; |
| timings[6][4] = (t5 - t4) / diters; |
| timings[6][5] = (t6 - t5) / diters; |
| timings[6][6] = (t7 - t6) / diters; |
| |
| // Column H |
| |
| if (print) { |
| System.out.println("Running H..."); |
| } |
| |
| t0 = System.nanoTime(); |
| testH0(iters); |
| t1 = System.nanoTime(); |
| testH1(iters); |
| t2 = System.nanoTime(); |
| testH2(iters); |
| t3 = System.nanoTime(); |
| testH3(iters); |
| t4 = System.nanoTime(); |
| testH4(iters); |
| t5 = System.nanoTime(); |
| testH5(iters); |
| t6 = System.nanoTime(); |
| testH6(iters); |
| t7 = System.nanoTime(); |
| |
| timings[7][0] = (t1 - t0) / diters; |
| timings[7][1] = (t2 - t1) / diters; |
| timings[7][2] = (t3 - t2) / diters; |
| timings[7][3] = (t4 - t3) / diters; |
| timings[7][4] = (t5 - t4) / diters; |
| timings[7][5] = (t6 - t5) / diters; |
| timings[7][6] = (t7 - t6) / diters; |
| |
| return timings; |
| } |
| |
| // Helper bits and pieces |
| |
| static private final int INNER_COUNT = 100; |
| static private final int[] INNER_ARRAY = new int[INNER_COUNT]; |
| static private final ArrayList<Object> INNER_LIST = |
| new ArrayList<Object>(INNER_COUNT); |
| static private final Target TARGET = new Target(); |
| static private final int ARRAY_BYTES = 8192; |
| static private final byte[] BYTES_1 = new byte[ARRAY_BYTES]; |
| static private final byte[] BYTES_2 = new byte[ARRAY_BYTES]; |
| |
| static { |
| for (int i = 0; i < INNER_COUNT; i++) { |
| INNER_LIST.add(null); |
| } |
| } |
| |
| public static class Target { |
| public int value; |
| public int size = INNER_COUNT; |
| |
| public void simple() { |
| // empty |
| } |
| |
| public int size() { |
| return size; |
| } |
| } |
| |
| // The tests themselves |
| |
| static public void testA0(int iters) { |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA1(int iters) { |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA2(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA3(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testA6(int iters) { |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| // empty |
| } |
| } |
| } |
| |
| static public void testB0(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB1(int iters) { |
| Target target = TARGET; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB2(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB3(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testB6(int iters) { |
| Target target = TARGET; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| target.value++; |
| } |
| } |
| } |
| |
| static public void testC0(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT - 1; i >= 0; i--) { |
| array[i]++; |
| } |
| } |
| } |
| |
| static public void testC1(int iters) { |
| int[] array = INNER_ARRAY; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| array[i]++; |
| } |
| } |
| } |
| |
| static public void testC2(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| array[i]++; |
| } |
| } |
| } |
| |
| static public void testC3(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| array[0] = i + 1; |
| } |
| } |
| } |
| |
| static public void testC4(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| array[i]++; |
| } |
| } |
| } |
| |
| static public void testC5(int iters) { |
| int[] array = INNER_ARRAY; |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| array[i]++; |
| } |
| } |
| } |
| |
| static public void testC6(int iters) { |
| int[] array = INNER_ARRAY; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| array[0]++; |
| } |
| } |
| } |
| |
| static public void testD0(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD1(int iters) { |
| Target target = TARGET; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD2(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD3(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testD6(int iters) { |
| Target target = TARGET; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testE0(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE1(int iters) { |
| Target target = TARGET; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE2(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE3(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testE6(int iters) { |
| Target target = TARGET; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| synchronized (target) { |
| target.simple(); |
| } |
| } |
| } |
| } |
| |
| static public void testF0(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF1(int iters) { |
| Target target = TARGET; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF2(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF3(int iters) { |
| Target target = TARGET; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testF6(int iters) { |
| Target target = TARGET; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| target.simple(); |
| } |
| } |
| } |
| |
| static public void testG0(int iters) { |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG1(int iters) { |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG2(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG3(int iters) { |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG4(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG5(int iters) { |
| Target target = TARGET; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testG6(int iters) { |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| new Target(); |
| } |
| } |
| } |
| |
| static public void testH0(int iters) { |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = INNER_COUNT; i > 0; i--) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH1(int iters) { |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| int count = INNER_COUNT; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < count; i++) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH2(int iters) { |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < array.length; i++) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH3(int iters) { |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| int[] array = INNER_ARRAY; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i : array) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH4(int iters) { |
| Target target = TARGET; |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size; i++) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH5(int iters) { |
| Target target = TARGET; |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (int i = 0; i < target.size(); i++) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| |
| static public void testH6(int iters) { |
| byte[] b1 = BYTES_1; |
| byte[] b2 = BYTES_2; |
| ArrayList<Object> list = INNER_LIST; |
| |
| for (int outer = iters; outer > 0; outer--) { |
| for (Object o : list) { |
| System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES); |
| } |
| } |
| } |
| } |