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