4 // Created by Steven R. Loomis on 11/11/2005.
\r
5 // Copyright 2005-2010 IBM. All rights reserved.
\r
8 package com.ibm.icu.dev.test.util;
\r
10 import java.util.Locale;
\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
18 * Simple stopwatch timer.
\r
19 * Usage: { ElapsedTimer et = new ElapsedTimer();
\r
21 * System.out.println("It took " + et + " to do stuff."); }
\r
23 * Advanced: { ElapsedTimer et = new ElapsedTimer("Thing2's time: {0}"); // messageformat pattern
\r
25 * System.out.println(et.toString()); }
\r
27 * More advanced: NumberFormat and/or MessageFormat can be provided in the constructor
\r
29 public final class ElapsedTimer {
\r
32 * Convenience method to print the elasped time (in milliseconds)
\r
34 public static String elapsedTime(long start, long end) {
\r
35 return diffTime(getFormat(), start, end);
\r
38 public static String elapsedTime(long start) {
\r
39 return diffTime(getFormat(), start, System.currentTimeMillis());
\r
44 private long startTime = System.currentTimeMillis();
\r
45 private NumberFormat myDurationFormat = null;
\r
46 private MessageFormat myMsgFormat = null;
\r
48 public ElapsedTimer() {
\r
51 public ElapsedTimer(MessageFormat aMsgFmt) {
\r
52 myMsgFormat = aMsgFmt;
\r
55 public ElapsedTimer(NumberFormat aNumFmt) {
\r
56 myDurationFormat = aNumFmt;
\r
59 public ElapsedTimer(MessageFormat aMsgFmt, NumberFormat aNumFmt) {
\r
60 myMsgFormat = aMsgFmt;
\r
61 myDurationFormat = aNumFmt;
\r
64 public ElapsedTimer(String pattern) {
\r
65 myMsgFormat = new MessageFormat(pattern);
\r
68 public ElapsedTimer(String pattern, NumberFormat aNumFmt) {
\r
69 myMsgFormat = new MessageFormat(pattern);
\r
70 myDurationFormat = aNumFmt;
\r
74 * @return elapsed time in seconds since object creation
\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
82 return myMsgFormat.format(new Object[] {duration});
\r
86 private static NumberFormat gFormat = null;
\r
88 private static NumberFormat getFormat() {
\r
89 if(gFormat == null) {
\r
90 gFormat = new RuleBasedNumberFormat(Locale.US,
\r
91 RuleBasedNumberFormat.DURATION);
\r
96 private static String diffTime(NumberFormat fmt, long start, long end) {
\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