• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 import java.util.ArrayList;
18 
19 /**
20  * The matrix of tests includes the A-E axis for loop body contents and
21  * the 0-5 axis for iterator style.
22  *
23  * <ul>
24  * <li>A: empty body</li>
25  * <li>B: array element access and update</li>
26  * <li>C: instance field access and update</li>
27  * <li>D: method call to empty method</li>
28  * <li>E: synch and then method call to empty method</li>
29  * <li>F: 5 method calls to empty method</li>
30  * <li>G: one small object allocation (empty constructor)</li>
31  * <li>H: copy 8k of bytes from one array to another</li>
32  * </ul>
33  *
34  * <ul>
35  * <li>0: for() loop backward to 0</li>
36  * <li>1: for() loop forward to local variable</li>
37  * <li>2: for() loop forward to array length</li>
38  * <li>3: for(:) loop over array</li>
39  * <li>4: for() loop forward to instance variable</li>
40  * <li>5: for() loop forward to trivial method call</li>
41  * <li>6: for(:) loop over ArrayList</li>
42  * </ul>
43  */
44 public class Main {
45     static public final int BODIES = 8;
46     static public final int LOOPS = 7;
47 
main(String[] args)48     static public void main(String[] args) throws Exception {
49         boolean timing = (args.length >= 1) && args[0].equals("--timing");
50 
51         int iters = 100;
52         double probeSec;
53 
54         for (;;) {
55             long t0 = System.nanoTime();
56             runAllTests(iters, false);
57             long t1 = System.nanoTime();
58 
59             probeSec = (t1 - t0) / 1000000000.0;
60             if (probeSec > 0.25) {
61                 break;
62             }
63 
64             iters *= 2;
65         }
66 
67         // Attempt to arrange for the real test to take 20 seconds.
68         iters = (int) ((iters / probeSec) * 20);
69 
70         if (timing) {
71             System.out.println("iters = " + iters);
72         }
73 
74         run(timing, iters);
75     }
76 
77     static private enum Normalization {
78         NONE, PER_COLUMN, TOP_LEFT;
79     }
80 
printTimings(double[][] timings, Normalization norm)81     static public void printTimings(double[][] timings, Normalization norm) {
82         System.out.println();
83         System.out.printf("%-7s   A        B        C        D        E" +
84                 "        F        G        H\n",
85                 (norm == Normalization.NONE) ? "(usec)" : "(ratio)");
86         System.out.println("      -------- -------- -------- -------- " +
87                 "-------- -------- -------- --------");
88 
89         double bases[] = new double[BODIES];
90         for (int i = 0; i < BODIES; i++) {
91             double n;
92             switch (norm) {
93                 case PER_COLUMN:  n = timings[i][0]; break;
94                 case TOP_LEFT:    n = timings[0][0]; break;
95                 default /*NONE*/: n = 1.0;           break;
96             }
97             bases[i] = n;
98         }
99 
100         for (int i = 0; i < LOOPS; i++) {
101             System.out.printf("%4d: %8.3g %8.3g %8.3g %8.3g %8.3g %8.3g " +
102                     "%8.3g %8.3g\n",
103                     i,
104                     timings[0][i] / bases[0],
105                     timings[1][i] / bases[1],
106                     timings[2][i] / bases[2],
107                     timings[3][i] / bases[3],
108                     timings[4][i] / bases[4],
109                     timings[5][i] / bases[5],
110                     timings[6][i] / bases[6],
111                     timings[7][i] / bases[7]);
112         }
113     }
114 
run(boolean timing, int iters)115     static public void run(boolean timing, int iters) {
116         double[][] timings = null; // assign to avoid apparent javac bug
117 
118         // Try up to 5 times to get good times.
119         for (int i = 0; i < 5; i++) {
120             double[][] newTimings = runAllTests(iters, timing || (i == 0));
121 
122             if (timings == null) {
123                 timings = newTimings;
124             } else {
125                 combineTimings(timings, newTimings, i);
126             }
127 
128             if (checkTimes(timings, timing)) {
129                 break;
130             }
131         }
132 
133         System.out.println("Done with runs.");
134 
135         boolean goodTimes = checkTimes(timings, true);
136 
137         if (! goodTimes) {
138             timing = true;
139         }
140 
141         if (timing) {
142             printTimings(timings, Normalization.NONE);
143             printTimings(timings, Normalization.TOP_LEFT);
144             printTimings(timings, Normalization.PER_COLUMN);
145         } else {
146             System.out.println("\nAll times are within the expected ranges.");
147         }
148     }
149 
combineTimings(double[][] target, double[][] newTimes, int oldWeight)150     static public void combineTimings(double[][] target, double[][] newTimes,
151             int oldWeight) {
152         for (int i = 0; i < target.length; i++) {
153             for (int j = 0; j < target[i].length; j++) {
154                 target[i][j] =
155                     ((target[i][j] * oldWeight) + newTimes[i][j])
156                     / (oldWeight + 1);
157             }
158         }
159     }
160 
checkTimes(double[][] timings, boolean print)161     static public boolean checkTimes(double[][] timings, boolean print) {
162         // expected increase over A1
163         double[][] expected = {
164             {  1.0,  2.3,  2.4,  3.3,  6.5, 12.0, 57.0,  94.0 },
165             {  1.2,  2.4,  2.5,  3.4,  6.6, 12.2, 60.0,  95.0 },
166             {  1.5,  2.6,  2.9,  3.5,  6.7, 12.4, 63.0,  96.0 },
167             {  1.6,  2.8,  2.9,  3.6,  6.8, 12.6, 63.5,  97.0 },
168             {  1.7,  3.0,  2.9,  3.7,  6.9, 12.8, 64.0,  98.0 },
169             {  6.0,  6.0,  6.0,  7.0, 10.0, 15.0, 64.5, 105.0 },
170             { 31.0, 31.2, 31.5, 34.0, 41.0, 43.0, 91.0, 135.0 },
171         };
172 
173         boolean good = true;
174 
175         for (int x = 0; x < BODIES; x++) {
176             for (int y = 0; y < LOOPS; y++) {
177                 double ratio = timings[x][y] / timings[0][0];
178                 if (ratio > expected[y][x]) {
179                     if (print) {
180                         System.out.printf("%c%d is too slow: %.3g vs. %.3g\n",
181                                 (char) (x + 'A'), y, ratio, expected[y][x]);
182                     }
183                     good = false;
184                 }
185             }
186         }
187 
188         return good;
189     }
190 
runAllTests(int iters, boolean print)191     static public double[][] runAllTests(int iters, boolean print) {
192         // diters is used to get usec, not nanosec; hence the extra 1000.
193         double diters = (double) iters * INNER_COUNT * 1000;
194 
195         double[][] timings = new double[BODIES][LOOPS];
196         long t0, t1, t2, t3, t4, t5, t6, t7;
197 
198         // Column A
199 
200         if (print) {
201             System.out.println("Running A...");
202         }
203 
204         t0 = System.nanoTime();
205         testA0(iters);
206         t1 = System.nanoTime();
207         testA1(iters);
208         t2 = System.nanoTime();
209         testA2(iters);
210         t3 = System.nanoTime();
211         testA3(iters);
212         t4 = System.nanoTime();
213         testA4(iters);
214         t5 = System.nanoTime();
215         testA5(iters);
216         t6 = System.nanoTime();
217         testA6(iters);
218         t7 = System.nanoTime();
219 
220         timings[0][0] = (t1 - t0) / diters;
221         timings[0][1] = (t2 - t1) / diters;
222         timings[0][2] = (t3 - t2) / diters;
223         timings[0][3] = (t4 - t3) / diters;
224         timings[0][4] = (t5 - t4) / diters;
225         timings[0][5] = (t6 - t5) / diters;
226         timings[0][6] = (t7 - t6) / diters;
227 
228         // Column B
229 
230         if (print) {
231             System.out.println("Running B...");
232         }
233 
234         t0 = System.nanoTime();
235         testB0(iters);
236         t1 = System.nanoTime();
237         testB1(iters);
238         t2 = System.nanoTime();
239         testB2(iters);
240         t3 = System.nanoTime();
241         testB3(iters);
242         t4 = System.nanoTime();
243         testB4(iters);
244         t5 = System.nanoTime();
245         testB5(iters);
246         t6 = System.nanoTime();
247         testB6(iters);
248         t7 = System.nanoTime();
249 
250         timings[1][0] = (t1 - t0) / diters;
251         timings[1][1] = (t2 - t1) / diters;
252         timings[1][2] = (t3 - t2) / diters;
253         timings[1][3] = (t4 - t3) / diters;
254         timings[1][4] = (t5 - t4) / diters;
255         timings[1][5] = (t6 - t5) / diters;
256         timings[1][6] = (t7 - t6) / diters;
257 
258         // Column C
259 
260         if (print) {
261             System.out.println("Running C...");
262         }
263 
264         t0 = System.nanoTime();
265         testC0(iters);
266         t1 = System.nanoTime();
267         testC1(iters);
268         t2 = System.nanoTime();
269         testC2(iters);
270         t3 = System.nanoTime();
271         testC3(iters);
272         t4 = System.nanoTime();
273         testC4(iters);
274         t5 = System.nanoTime();
275         testC5(iters);
276         t6 = System.nanoTime();
277         testC6(iters);
278         t7 = System.nanoTime();
279 
280         timings[2][0] = (t1 - t0) / diters;
281         timings[2][1] = (t2 - t1) / diters;
282         timings[2][2] = (t3 - t2) / diters;
283         timings[2][3] = (t4 - t3) / diters;
284         timings[2][4] = (t5 - t4) / diters;
285         timings[2][5] = (t6 - t5) / diters;
286         timings[2][6] = (t7 - t6) / diters;
287 
288         // Column D
289 
290         if (print) {
291             System.out.println("Running D...");
292         }
293 
294         t0 = System.nanoTime();
295         testD0(iters);
296         t1 = System.nanoTime();
297         testD1(iters);
298         t2 = System.nanoTime();
299         testD2(iters);
300         t3 = System.nanoTime();
301         testD3(iters);
302         t4 = System.nanoTime();
303         testD4(iters);
304         t5 = System.nanoTime();
305         testD5(iters);
306         t6 = System.nanoTime();
307         testD6(iters);
308         t7 = System.nanoTime();
309 
310         timings[3][0] = (t1 - t0) / diters;
311         timings[3][1] = (t2 - t1) / diters;
312         timings[3][2] = (t3 - t2) / diters;
313         timings[3][3] = (t4 - t3) / diters;
314         timings[3][4] = (t5 - t4) / diters;
315         timings[3][5] = (t6 - t5) / diters;
316         timings[3][6] = (t7 - t6) / diters;
317 
318         // Column E
319 
320         if (print) {
321             System.out.println("Running E...");
322         }
323 
324         t0 = System.nanoTime();
325         testE0(iters);
326         t1 = System.nanoTime();
327         testE1(iters);
328         t2 = System.nanoTime();
329         testE2(iters);
330         t3 = System.nanoTime();
331         testE3(iters);
332         t4 = System.nanoTime();
333         testE4(iters);
334         t5 = System.nanoTime();
335         testE5(iters);
336         t6 = System.nanoTime();
337         testE6(iters);
338         t7 = System.nanoTime();
339 
340         timings[4][0] = (t1 - t0) / diters;
341         timings[4][1] = (t2 - t1) / diters;
342         timings[4][2] = (t3 - t2) / diters;
343         timings[4][3] = (t4 - t3) / diters;
344         timings[4][4] = (t5 - t4) / diters;
345         timings[4][5] = (t6 - t5) / diters;
346         timings[4][6] = (t7 - t6) / diters;
347 
348         // Column F
349 
350         if (print) {
351             System.out.println("Running F...");
352         }
353 
354         t0 = System.nanoTime();
355         testF0(iters);
356         t1 = System.nanoTime();
357         testF1(iters);
358         t2 = System.nanoTime();
359         testF2(iters);
360         t3 = System.nanoTime();
361         testF3(iters);
362         t4 = System.nanoTime();
363         testF4(iters);
364         t5 = System.nanoTime();
365         testF5(iters);
366         t6 = System.nanoTime();
367         testF6(iters);
368         t7 = System.nanoTime();
369 
370         timings[5][0] = (t1 - t0) / diters;
371         timings[5][1] = (t2 - t1) / diters;
372         timings[5][2] = (t3 - t2) / diters;
373         timings[5][3] = (t4 - t3) / diters;
374         timings[5][4] = (t5 - t4) / diters;
375         timings[5][5] = (t6 - t5) / diters;
376         timings[5][6] = (t7 - t6) / diters;
377 
378         // Reduce the iters for the last two, since they're much slower.
379 
380         iters /= 5;
381         diters /= 5;
382 
383         // Column G
384 
385         if (print) {
386             System.out.println("Running G...");
387         }
388 
389         t0 = System.nanoTime();
390         testG0(iters);
391         t1 = System.nanoTime();
392         testG1(iters);
393         t2 = System.nanoTime();
394         testG2(iters);
395         t3 = System.nanoTime();
396         testG3(iters);
397         t4 = System.nanoTime();
398         testG4(iters);
399         t5 = System.nanoTime();
400         testG5(iters);
401         t6 = System.nanoTime();
402         testG6(iters);
403         t7 = System.nanoTime();
404 
405         timings[6][0] = (t1 - t0) / diters;
406         timings[6][1] = (t2 - t1) / diters;
407         timings[6][2] = (t3 - t2) / diters;
408         timings[6][3] = (t4 - t3) / diters;
409         timings[6][4] = (t5 - t4) / diters;
410         timings[6][5] = (t6 - t5) / diters;
411         timings[6][6] = (t7 - t6) / diters;
412 
413         // Column H
414 
415         if (print) {
416             System.out.println("Running H...");
417         }
418 
419         t0 = System.nanoTime();
420         testH0(iters);
421         t1 = System.nanoTime();
422         testH1(iters);
423         t2 = System.nanoTime();
424         testH2(iters);
425         t3 = System.nanoTime();
426         testH3(iters);
427         t4 = System.nanoTime();
428         testH4(iters);
429         t5 = System.nanoTime();
430         testH5(iters);
431         t6 = System.nanoTime();
432         testH6(iters);
433         t7 = System.nanoTime();
434 
435         timings[7][0] = (t1 - t0) / diters;
436         timings[7][1] = (t2 - t1) / diters;
437         timings[7][2] = (t3 - t2) / diters;
438         timings[7][3] = (t4 - t3) / diters;
439         timings[7][4] = (t5 - t4) / diters;
440         timings[7][5] = (t6 - t5) / diters;
441         timings[7][6] = (t7 - t6) / diters;
442 
443         return timings;
444     }
445 
446     // Helper bits and pieces
447 
448     static private final int INNER_COUNT = 100;
449     static private final int[] INNER_ARRAY = new int[INNER_COUNT];
450     static private final ArrayList<Object> INNER_LIST =
451         new ArrayList<Object>(INNER_COUNT);
452     static private final Target TARGET = new Target();
453     static private final int ARRAY_BYTES = 8192;
454     static private final byte[] BYTES_1 = new byte[ARRAY_BYTES];
455     static private final byte[] BYTES_2 = new byte[ARRAY_BYTES];
456 
457     static {
458         for (int i = 0; i < INNER_COUNT; i++) {
459             INNER_LIST.add(null);
460         }
461     }
462 
463     public static class Target {
464         public int value;
465         public int size = INNER_COUNT;
466 
simple()467         public void simple() {
468             // empty
469         }
470 
size()471         public int size() {
472             return size;
473         }
474     }
475 
476     // The tests themselves
477 
testA0(int iters)478     static public void testA0(int iters) {
479         for (int outer = iters; outer > 0; outer--) {
480             for (int i = INNER_COUNT; i > 0; i--) {
481                 // empty
482             }
483         }
484     }
485 
testA1(int iters)486     static public void testA1(int iters) {
487         int count = INNER_COUNT;
488 
489         for (int outer = iters; outer > 0; outer--) {
490             for (int i = 0; i < count; i++) {
491                 // empty
492             }
493         }
494     }
495 
testA2(int iters)496     static public void testA2(int iters) {
497         int[] array = INNER_ARRAY;
498 
499         for (int outer = iters; outer > 0; outer--) {
500             for (int i = 0; i < array.length; i++) {
501                 // empty
502             }
503         }
504     }
505 
testA3(int iters)506     static public void testA3(int iters) {
507         int[] array = INNER_ARRAY;
508 
509         for (int outer = iters; outer > 0; outer--) {
510             for (int i : array) {
511                 // empty
512             }
513         }
514     }
515 
testA4(int iters)516     static public void testA4(int iters) {
517         Target target = TARGET;
518 
519         for (int outer = iters; outer > 0; outer--) {
520             for (int i = 0; i < target.size; i++) {
521                 // empty
522             }
523         }
524     }
525 
testA5(int iters)526     static public void testA5(int iters) {
527         Target target = TARGET;
528 
529         for (int outer = iters; outer > 0; outer--) {
530             for (int i = 0; i < target.size(); i++) {
531                 // empty
532             }
533         }
534     }
535 
testA6(int iters)536     static public void testA6(int iters) {
537         ArrayList<Object> list = INNER_LIST;
538 
539         for (int outer = iters; outer > 0; outer--) {
540             for (Object o : list) {
541                 // empty
542             }
543         }
544     }
545 
testB0(int iters)546     static public void testB0(int iters) {
547         Target target = TARGET;
548 
549         for (int outer = iters; outer > 0; outer--) {
550             for (int i = INNER_COUNT; i > 0; i--) {
551                 target.value++;
552             }
553         }
554     }
555 
testB1(int iters)556     static public void testB1(int iters) {
557         Target target = TARGET;
558         int count = INNER_COUNT;
559 
560         for (int outer = iters; outer > 0; outer--) {
561             for (int i = 0; i < count; i++) {
562                 target.value++;
563             }
564         }
565     }
566 
testB2(int iters)567     static public void testB2(int iters) {
568         Target target = TARGET;
569         int[] array = INNER_ARRAY;
570 
571         for (int outer = iters; outer > 0; outer--) {
572             for (int i = 0; i < array.length; i++) {
573                 target.value++;
574             }
575         }
576     }
577 
testB3(int iters)578     static public void testB3(int iters) {
579         Target target = TARGET;
580         int[] array = INNER_ARRAY;
581 
582         for (int outer = iters; outer > 0; outer--) {
583             for (int i : array) {
584                 target.value++;
585             }
586         }
587     }
588 
testB4(int iters)589     static public void testB4(int iters) {
590         Target target = TARGET;
591 
592         for (int outer = iters; outer > 0; outer--) {
593             for (int i = 0; i < target.size; i++) {
594                 target.value++;
595             }
596         }
597     }
598 
testB5(int iters)599     static public void testB5(int iters) {
600         Target target = TARGET;
601 
602         for (int outer = iters; outer > 0; outer--) {
603             for (int i = 0; i < target.size(); i++) {
604                 target.value++;
605             }
606         }
607     }
608 
testB6(int iters)609     static public void testB6(int iters) {
610         Target target = TARGET;
611         ArrayList<Object> list = INNER_LIST;
612 
613         for (int outer = iters; outer > 0; outer--) {
614             for (Object o : list) {
615                 target.value++;
616             }
617         }
618     }
619 
testC0(int iters)620     static public void testC0(int iters) {
621         int[] array = INNER_ARRAY;
622 
623         for (int outer = iters; outer > 0; outer--) {
624             for (int i = INNER_COUNT - 1; i >= 0; i--) {
625                 array[i]++;
626             }
627         }
628     }
629 
testC1(int iters)630     static public void testC1(int iters) {
631         int[] array = INNER_ARRAY;
632         int count = INNER_COUNT;
633 
634         for (int outer = iters; outer > 0; outer--) {
635             for (int i = 0; i < count; i++) {
636                 array[i]++;
637             }
638         }
639     }
640 
testC2(int iters)641     static public void testC2(int iters) {
642         int[] array = INNER_ARRAY;
643 
644         for (int outer = iters; outer > 0; outer--) {
645             for (int i = 0; i < array.length; i++) {
646                 array[i]++;
647             }
648         }
649     }
650 
testC3(int iters)651     static public void testC3(int iters) {
652         int[] array = INNER_ARRAY;
653 
654         for (int outer = iters; outer > 0; outer--) {
655             for (int i : array) {
656                 array[0] = i + 1;
657             }
658         }
659     }
660 
testC4(int iters)661     static public void testC4(int iters) {
662         Target target = TARGET;
663         int[] array = INNER_ARRAY;
664 
665         for (int outer = iters; outer > 0; outer--) {
666             for (int i = 0; i < target.size; i++) {
667                 array[i]++;
668             }
669         }
670     }
671 
testC5(int iters)672     static public void testC5(int iters) {
673         int[] array = INNER_ARRAY;
674         Target target = TARGET;
675 
676         for (int outer = iters; outer > 0; outer--) {
677             for (int i = 0; i < target.size(); i++) {
678                 array[i]++;
679             }
680         }
681     }
682 
testC6(int iters)683     static public void testC6(int iters) {
684         int[] array = INNER_ARRAY;
685         ArrayList<Object> list = INNER_LIST;
686 
687         for (int outer = iters; outer > 0; outer--) {
688             for (Object o : list) {
689                 array[0]++;
690             }
691         }
692     }
693 
testD0(int iters)694     static public void testD0(int iters) {
695         Target target = TARGET;
696 
697         for (int outer = iters; outer > 0; outer--) {
698             for (int i = INNER_COUNT; i > 0; i--) {
699                 target.simple();
700             }
701         }
702     }
703 
testD1(int iters)704     static public void testD1(int iters) {
705         Target target = TARGET;
706         int count = INNER_COUNT;
707 
708         for (int outer = iters; outer > 0; outer--) {
709             for (int i = 0; i < count; i++) {
710                 target.simple();
711             }
712         }
713     }
714 
testD2(int iters)715     static public void testD2(int iters) {
716         Target target = TARGET;
717         int[] array = INNER_ARRAY;
718 
719         for (int outer = iters; outer > 0; outer--) {
720             for (int i = 0; i < array.length; i++) {
721                 target.simple();
722             }
723         }
724     }
725 
testD3(int iters)726     static public void testD3(int iters) {
727         Target target = TARGET;
728         int[] array = INNER_ARRAY;
729 
730         for (int outer = iters; outer > 0; outer--) {
731             for (int i : array) {
732                 target.simple();
733             }
734         }
735     }
736 
testD4(int iters)737     static public void testD4(int iters) {
738         Target target = TARGET;
739 
740         for (int outer = iters; outer > 0; outer--) {
741             for (int i = 0; i < target.size; i++) {
742                 target.simple();
743             }
744         }
745     }
746 
testD5(int iters)747     static public void testD5(int iters) {
748         Target target = TARGET;
749 
750         for (int outer = iters; outer > 0; outer--) {
751             for (int i = 0; i < target.size(); i++) {
752                 target.simple();
753             }
754         }
755     }
756 
testD6(int iters)757     static public void testD6(int iters) {
758         Target target = TARGET;
759         ArrayList<Object> list = INNER_LIST;
760 
761         for (int outer = iters; outer > 0; outer--) {
762             for (Object o : list) {
763                 target.simple();
764             }
765         }
766     }
767 
testE0(int iters)768     static public void testE0(int iters) {
769         Target target = TARGET;
770 
771         for (int outer = iters; outer > 0; outer--) {
772             for (int i = INNER_COUNT; i > 0; i--) {
773                 synchronized (target) {
774                     target.simple();
775                 }
776             }
777         }
778     }
779 
testE1(int iters)780     static public void testE1(int iters) {
781         Target target = TARGET;
782         int count = INNER_COUNT;
783 
784         for (int outer = iters; outer > 0; outer--) {
785             for (int i = 0; i < count; i++) {
786                 synchronized (target) {
787                     target.simple();
788                 }
789             }
790         }
791     }
792 
testE2(int iters)793     static public void testE2(int iters) {
794         Target target = TARGET;
795         int[] array = INNER_ARRAY;
796 
797         for (int outer = iters; outer > 0; outer--) {
798             for (int i = 0; i < array.length; i++) {
799                 synchronized (target) {
800                     target.simple();
801                 }
802             }
803         }
804     }
805 
testE3(int iters)806     static public void testE3(int iters) {
807         Target target = TARGET;
808         int[] array = INNER_ARRAY;
809 
810         for (int outer = iters; outer > 0; outer--) {
811             for (int i : array) {
812                 synchronized (target) {
813                     target.simple();
814                 }
815             }
816         }
817     }
818 
testE4(int iters)819     static public void testE4(int iters) {
820         Target target = TARGET;
821 
822         for (int outer = iters; outer > 0; outer--) {
823             for (int i = 0; i < target.size; i++) {
824                 synchronized (target) {
825                     target.simple();
826                 }
827             }
828         }
829     }
830 
testE5(int iters)831     static public void testE5(int iters) {
832         Target target = TARGET;
833 
834         for (int outer = iters; outer > 0; outer--) {
835             for (int i = 0; i < target.size(); i++) {
836                 synchronized (target) {
837                     target.simple();
838                 }
839             }
840         }
841     }
842 
testE6(int iters)843     static public void testE6(int iters) {
844         Target target = TARGET;
845         ArrayList<Object> list = INNER_LIST;
846 
847         for (int outer = iters; outer > 0; outer--) {
848             for (Object o : list) {
849                 synchronized (target) {
850                     target.simple();
851                 }
852             }
853         }
854     }
855 
testF0(int iters)856     static public void testF0(int iters) {
857         Target target = TARGET;
858 
859         for (int outer = iters; outer > 0; outer--) {
860             for (int i = INNER_COUNT; i > 0; i--) {
861                 target.simple();
862                 target.simple();
863                 target.simple();
864                 target.simple();
865                 target.simple();
866             }
867         }
868     }
869 
testF1(int iters)870     static public void testF1(int iters) {
871         Target target = TARGET;
872         int count = INNER_COUNT;
873 
874         for (int outer = iters; outer > 0; outer--) {
875             for (int i = 0; i < count; i++) {
876                 target.simple();
877                 target.simple();
878                 target.simple();
879                 target.simple();
880                 target.simple();
881             }
882         }
883     }
884 
testF2(int iters)885     static public void testF2(int iters) {
886         Target target = TARGET;
887         int[] array = INNER_ARRAY;
888 
889         for (int outer = iters; outer > 0; outer--) {
890             for (int i = 0; i < array.length; i++) {
891                 target.simple();
892                 target.simple();
893                 target.simple();
894                 target.simple();
895                 target.simple();
896             }
897         }
898     }
899 
testF3(int iters)900     static public void testF3(int iters) {
901         Target target = TARGET;
902         int[] array = INNER_ARRAY;
903 
904         for (int outer = iters; outer > 0; outer--) {
905             for (int i : array) {
906                 target.simple();
907                 target.simple();
908                 target.simple();
909                 target.simple();
910                 target.simple();
911             }
912         }
913     }
914 
testF4(int iters)915     static public void testF4(int iters) {
916         Target target = TARGET;
917 
918         for (int outer = iters; outer > 0; outer--) {
919             for (int i = 0; i < target.size; i++) {
920                 target.simple();
921                 target.simple();
922                 target.simple();
923                 target.simple();
924                 target.simple();
925             }
926         }
927     }
928 
testF5(int iters)929     static public void testF5(int iters) {
930         Target target = TARGET;
931 
932         for (int outer = iters; outer > 0; outer--) {
933             for (int i = 0; i < target.size(); i++) {
934                 target.simple();
935                 target.simple();
936                 target.simple();
937                 target.simple();
938                 target.simple();
939             }
940         }
941     }
942 
testF6(int iters)943     static public void testF6(int iters) {
944         Target target = TARGET;
945         ArrayList<Object> list = INNER_LIST;
946 
947         for (int outer = iters; outer > 0; outer--) {
948             for (Object o : list) {
949                 target.simple();
950                 target.simple();
951                 target.simple();
952                 target.simple();
953                 target.simple();
954             }
955         }
956     }
957 
testG0(int iters)958     static public void testG0(int iters) {
959         for (int outer = iters; outer > 0; outer--) {
960             for (int i = INNER_COUNT; i > 0; i--) {
961                 new Target();
962             }
963         }
964     }
965 
testG1(int iters)966     static public void testG1(int iters) {
967         int count = INNER_COUNT;
968 
969         for (int outer = iters; outer > 0; outer--) {
970             for (int i = 0; i < count; i++) {
971                 new Target();
972             }
973         }
974     }
975 
testG2(int iters)976     static public void testG2(int iters) {
977         int[] array = INNER_ARRAY;
978 
979         for (int outer = iters; outer > 0; outer--) {
980             for (int i = 0; i < array.length; i++) {
981                 new Target();
982             }
983         }
984     }
985 
testG3(int iters)986     static public void testG3(int iters) {
987         int[] array = INNER_ARRAY;
988 
989         for (int outer = iters; outer > 0; outer--) {
990             for (int i : array) {
991                 new Target();
992             }
993         }
994     }
995 
testG4(int iters)996     static public void testG4(int iters) {
997         Target target = TARGET;
998 
999         for (int outer = iters; outer > 0; outer--) {
1000             for (int i = 0; i < target.size; i++) {
1001                 new Target();
1002             }
1003         }
1004     }
1005 
testG5(int iters)1006     static public void testG5(int iters) {
1007         Target target = TARGET;
1008 
1009         for (int outer = iters; outer > 0; outer--) {
1010             for (int i = 0; i < target.size(); i++) {
1011                 new Target();
1012             }
1013         }
1014     }
1015 
testG6(int iters)1016     static public void testG6(int iters) {
1017         ArrayList<Object> list = INNER_LIST;
1018 
1019         for (int outer = iters; outer > 0; outer--) {
1020             for (Object o : list) {
1021                 new Target();
1022             }
1023         }
1024     }
1025 
testH0(int iters)1026     static public void testH0(int iters) {
1027         byte[] b1 = BYTES_1;
1028         byte[] b2 = BYTES_2;
1029 
1030         for (int outer = iters; outer > 0; outer--) {
1031             for (int i = INNER_COUNT; i > 0; i--) {
1032                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1033             }
1034         }
1035     }
1036 
testH1(int iters)1037     static public void testH1(int iters) {
1038         byte[] b1 = BYTES_1;
1039         byte[] b2 = BYTES_2;
1040         int count = INNER_COUNT;
1041 
1042         for (int outer = iters; outer > 0; outer--) {
1043             for (int i = 0; i < count; i++) {
1044                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1045             }
1046         }
1047     }
1048 
testH2(int iters)1049     static public void testH2(int iters) {
1050         byte[] b1 = BYTES_1;
1051         byte[] b2 = BYTES_2;
1052         int[] array = INNER_ARRAY;
1053 
1054         for (int outer = iters; outer > 0; outer--) {
1055             for (int i = 0; i < array.length; i++) {
1056                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1057             }
1058         }
1059     }
1060 
testH3(int iters)1061     static public void testH3(int iters) {
1062         byte[] b1 = BYTES_1;
1063         byte[] b2 = BYTES_2;
1064         int[] array = INNER_ARRAY;
1065 
1066         for (int outer = iters; outer > 0; outer--) {
1067             for (int i : array) {
1068                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1069             }
1070         }
1071     }
1072 
testH4(int iters)1073     static public void testH4(int iters) {
1074         Target target = TARGET;
1075         byte[] b1 = BYTES_1;
1076         byte[] b2 = BYTES_2;
1077 
1078         for (int outer = iters; outer > 0; outer--) {
1079             for (int i = 0; i < target.size; i++) {
1080                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1081             }
1082         }
1083     }
1084 
testH5(int iters)1085     static public void testH5(int iters) {
1086         Target target = TARGET;
1087         byte[] b1 = BYTES_1;
1088         byte[] b2 = BYTES_2;
1089 
1090         for (int outer = iters; outer > 0; outer--) {
1091             for (int i = 0; i < target.size(); i++) {
1092                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1093             }
1094         }
1095     }
1096 
testH6(int iters)1097     static public void testH6(int iters) {
1098         byte[] b1 = BYTES_1;
1099         byte[] b2 = BYTES_2;
1100         ArrayList<Object> list = INNER_LIST;
1101 
1102         for (int outer = iters; outer > 0; outer--) {
1103             for (Object o : list) {
1104                 System.arraycopy(b1, 0, b2, 0, ARRAY_BYTES);
1105             }
1106         }
1107     }
1108 }
1109