ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/TimeUnitLoops.java
Revision: 1.1
Committed: Mon May 2 19:19:38 2005 UTC (19 years ago) by dl
Branch: MAIN
Log Message:
Put misc performance tests into CVS

File Contents

# User Rev Content
1 dl 1.1 import java.util.concurrent.*;
2     import java.util.Random;
3    
4     public class TimeUnitLoops {
5    
6     static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom();
7    
8     /**
9     * False value allows aggressive inlining of cvt() calls from
10     * test(). True value prevents any inlining, requiring virtual
11     * method dispatch.
12     */
13     static final boolean PREVENT_INLINING = true;
14    
15     // The following all are used by inlining prevention clause:
16     static int index = 0;
17     static final int NUNITS = 100;
18     static final TimeUnit[] units = new TimeUnit[NUNITS];
19     static {
20     TimeUnit[] v = TimeUnit.values();
21     for (int i = 0; i < NUNITS; ++i)
22     units[i] = v[rng.next() % v.length];
23     }
24    
25     public static void main(String[] args) throws Exception {
26     long start = System.currentTimeMillis();
27     long s = 0;
28     for (int i = 0; i < 100; ++i) {
29     s += test();
30     if (s == start) System.out.println(" ");
31     }
32     long end = System.currentTimeMillis();
33     System.out.println("Time: " + (end - start) + " ms");
34     }
35    
36     static long test() {
37     long sum = 0;
38     int x = rng.next();
39     for (int i = 0; i < 1000000; ++i) {
40     long l = (long)x + (long)x;
41     sum += cvt(l, TimeUnit.SECONDS);
42     sum += TimeUnit.MILLISECONDS.toMicros(l+2);
43     sum += cvt(l+17, TimeUnit.NANOSECONDS);
44     sum += cvt(l+42, TimeUnit.MILLISECONDS);
45     x = LoopHelpers.compute4(x);
46     }
47     return sum + x;
48     }
49    
50     static long cvt(long d, TimeUnit u) {
51     if (PREVENT_INLINING) {
52     u = units[index];
53     index = (index+1) % NUNITS;
54     }
55    
56     return u.toNanos(d);
57     }
58     }