]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/util/ElapsedTimer.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / util / ElapsedTimer.java
1 //\r
2 //  ElapsedTimer.java\r
3 //\r
4 //  Created by Steven R. Loomis on 11/11/2005.\r
5 //  Copyright 2005-2010 IBM. All rights reserved.\r
6 //\r
7 \r
8 package com.ibm.icu.dev.test.util;\r
9 \r
10 import java.util.Locale;\r
11 \r
12 import com.ibm.icu.text.MessageFormat;\r
13 import com.ibm.icu.text.NumberFormat;\r
14 import com.ibm.icu.text.RuleBasedNumberFormat;\r
15 \r
16 \r
17 /**\r
18  * Simple stopwatch timer.\r
19  * Usage:   { ElapsedTimer et = new ElapsedTimer(); \r
20  *            do_some_stuff;  \r
21  *            System.out.println("It took " + et + " to do stuff."); }\r
22  *\r
23  * Advanced:   { ElapsedTimer et = new ElapsedTimer("Thing2's time: {0}");  // messageformat pattern\r
24  *            do_thing_2();  \r
25  *            System.out.println(et.toString()); }\r
26  *\r
27  * More advanced:  NumberFormat and/or MessageFormat can be provided in the constructor\r
28  */\r
29 public final class ElapsedTimer {\r
30 \r
31     /**\r
32      * Convenience method to print the elasped time (in milliseconds) \r
33      */\r
34     public static String elapsedTime(long start, long end) {\r
35         return diffTime(getFormat(), start, end);\r
36     }\r
37 \r
38     public static String elapsedTime(long start) {\r
39         return diffTime(getFormat(), start, System.currentTimeMillis());\r
40     }\r
41     \r
42     // class\r
43 \r
44     private long startTime = System.currentTimeMillis();\r
45     private NumberFormat myDurationFormat = null;\r
46     private MessageFormat myMsgFormat = null;\r
47 \r
48     public ElapsedTimer() {            \r
49     }\r
50     \r
51     public ElapsedTimer(MessageFormat aMsgFmt) {\r
52         myMsgFormat = aMsgFmt;\r
53     }\r
54 \r
55     public ElapsedTimer(NumberFormat aNumFmt) {\r
56         myDurationFormat = aNumFmt;\r
57     }\r
58     \r
59     public ElapsedTimer(MessageFormat aMsgFmt, NumberFormat aNumFmt) {\r
60         myMsgFormat = aMsgFmt;\r
61         myDurationFormat = aNumFmt;\r
62     }\r
63 \r
64     public ElapsedTimer(String pattern) {\r
65         myMsgFormat = new MessageFormat(pattern);\r
66     }\r
67 \r
68     public ElapsedTimer(String pattern, NumberFormat aNumFmt) {\r
69         myMsgFormat = new MessageFormat(pattern);\r
70         myDurationFormat = aNumFmt;\r
71     }\r
72 \r
73     /**\r
74      * @return elapsed time in seconds since object creation\r
75      */\r
76     public final String toString() { \r
77         long endTime = System.currentTimeMillis();\r
78         String duration = diffTime(myDurationFormat, startTime, endTime);\r
79         if(myMsgFormat == null) {\r
80             return duration;\r
81         } else {\r
82             return myMsgFormat.format(new Object[] {duration});\r
83         }\r
84     }\r
85 \r
86     private static NumberFormat gFormat = null;\r
87     \r
88     private static NumberFormat getFormat() {\r
89         if(gFormat == null) {\r
90             gFormat = new RuleBasedNumberFormat(Locale.US,\r
91                         RuleBasedNumberFormat.DURATION);\r
92         }\r
93         return gFormat; \r
94     }\r
95     \r
96     private static String diffTime(NumberFormat fmt, long start, long end) {\r
97         if(fmt==null) {\r
98             fmt = getFormat();\r
99         }\r
100         synchronized(fmt) {\r
101             long age = end - start;\r
102             double diff = (double)age;\r
103             diff = diff/(double)1000.0; // millis per second\r
104             return fmt.format(diff);\r
105         }\r
106     }    \r
107 }\r