001: //The contents of this file are subject to the Mozilla Public License Version 1.1
002: //(the "License"); you may not use this file except in compliance with the
003: //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
004: //
005: //Software distributed under the License is distributed on an "AS IS" basis,
006: //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
007: //for the specific language governing rights and
008: //limitations under the License.
009: //
010: //The Original Code is "The Columba Project"
011: //
012: //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
013: //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
014: //
015: //All Rights Reserved.
016: package org.columba.core.base;
017:
018: /**
019: * Simple StopWatch class for timing stuff.
020: * <p>
021: * Usage to measure an operation: <code>
022: * StopWatch timer = new StopWatch();
023: * <Time consuming operation>
024: * System.out.println( timer ); // outputs the time between the creation of Timer and "now"
025: * </code>
026: * <p>
027: * Usage to use the StopWatch in different methods and classes: <code>
028: * public void test()
029: * {
030: * StopWatch.instance().start();
031: * <time consuming operation>
032: * doOther();
033: * }
034: * public void doOther()
035: * {
036: * <time consuming operation>
037: * System.out.println( StopWatch.instance() ); // outputs the time between the instance().start() and "now"
038: * }
039: * </code>
040: *
041: * @author redsolo
042: */
043: public class StopWatch {
044: private static StopWatch instance = null;
045:
046: private long startTime = 0;
047:
048: private long stopTime = -1;
049:
050: /**
051: * Creates a new instance of StopWatch Starts the timing from the time
052: * the object was created
053: */
054: public StopWatch() {
055: start();
056: }
057:
058: /**
059: * Returns a StopWatch instance. This can be used to measure the time
060: * between different methods/classes.
061: *
062: * @return a static StopWatch instance
063: */
064: public static StopWatch instance() {
065: if (instance == null) {
066: instance = new StopWatch();
067: }
068:
069: return instance;
070: }
071:
072: /**
073: * Starts the watch. Resets the start time and resets the stop time as
074: * well.
075: */
076: public final void start() {
077: startTime = System.currentTimeMillis();
078: stopTime = -1;
079: }
080:
081: /**
082: * Stops the watch.
083: *
084: * @return the time passed since the StopWatch was started.
085: */
086: public final long stop() {
087: stopTime = System.currentTimeMillis();
088:
089: return (stopTime - startTime);
090: }
091:
092: /**
093: * Gets the time (ms) elapsed from the start() method was run until now
094: * OR the stop() method was run. If stop() is executed then this method
095: * will return the same all the time, BUT if the stop() hasnt been
096: * executed this method returns the time (ms) elapsed from the latest
097: * start()
098: *
099: * @return the time since the StopWatch was started; or if it has been
100: * stopped, the time between start() and stop()
101: */
102: public long getTiming() {
103: long time;
104:
105: if (stopTime == -1) {
106: time = (System.currentTimeMillis() - startTime);
107: } else {
108: time = (stopTime - startTime);
109: }
110:
111: return time;
112: }
113:
114: /**
115: * Returns the time elapsed from the start() until now, OR until stop()
116: * was executed
117: *
118: * @return the time (ms) as a string
119: */
120: @Override
121: public String toString() {
122: return String.valueOf(getTiming()) + " ms"; //$NON-NLS-1$
123: }
124: }
|