1 cananian 1.1.2.2 // Timer.java, created Tue Jan 23 16:09:55 2001 by wbeebee
 2 wbeebee  1.1.2.1 // Copyright (C) 2001 Wes Beebee <wbeebee@mit.edu>
 3 wbeebee  1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 wbeebee  1.1.2.1 package harpoon.Util;
 5 wbeebee  1.1.2.1 
 6 wbeebee  1.1.2.1 /**
 7 wbeebee  1.1.2.1  * <code>Timer</code> keeps track of how much time accumulates between
 8 wbeebee  1.1.2.1  * successive calls to start and stop.  This is useful when profiling the
 9 wbeebee  1.1.2.1  * compiler.
10 wbeebee  1.1.2.1  *
11 wbeebee  1.1.2.1  * <code>Timer t = new Timer();
12 wbeebee  1.1.2.1  * 
13 wbeebee  1.1.2.1  * for (int i=0; i<10; i++) {
14 wbeebee  1.1.2.1  *   bar();
15 wbeebee  1.1.2.1  *   t.start();
16 wbeebee  1.1.2.1  *   foo();
17 wbeebee  1.1.2.1  *   t.stop();
18 wbeebee  1.1.2.1  * }
19 wbeebee  1.1.2.1  * 
20 wbeebee  1.1.2.1  * System.out.println(t.timeElapsed());</code>
21 wbeebee  1.1.2.1  *
22 wbeebee  1.1.2.1  * This prints the total time spent in foo in milliseconds.
23 wbeebee  1.1.2.1  */
24 wbeebee  1.1.2.1 
25 wbeebee  1.1.2.1 public class Timer {
26 wbeebee  1.1.2.1     private long timeElapsed, timerStart;
27 wbeebee  1.1.2.1 
28 wbeebee  1.1.2.1     /** Create a new Timer and initialize timeElapsed to 0. */
29 wbeebee  1.1.2.1 
30 wbeebee  1.1.2.1     public Timer() {
31 wbeebee  1.1.2.1         timeElapsed = 0;
32 wbeebee  1.1.2.1         timerStart = -1;
33 wbeebee  1.1.2.1     }
34 wbeebee  1.1.2.1 
35 wbeebee  1.1.2.1     /** Ask if the timer is currently running. */
36 wbeebee  1.1.2.1 
37 wbeebee  1.1.2.1     public boolean running() {
38 wbeebee  1.1.2.1         return timerStart != -1;
39 wbeebee  1.1.2.1     }
40 wbeebee  1.1.2.1 
41 wbeebee  1.1.2.1     /** Start the timer running. */
42 wbeebee  1.1.2.1 
43 wbeebee  1.1.2.1     public void start() {
44 cananian 1.3.2.1         assert timerStart == -1 : "Two Timer.start() without Timer.stop()";
45 wbeebee  1.1.2.1         timerStart = System.currentTimeMillis();
46 wbeebee  1.1.2.1     }
47 wbeebee  1.1.2.1 
48 wbeebee  1.1.2.1     /** Stop the timer. */
49 wbeebee  1.1.2.1 
50 wbeebee  1.1.2.1     public void stop() {
51 wbeebee  1.1.2.1         timeElapsed += System.currentTimeMillis() - timerStart;
52 cananian 1.3.2.1         assert timerStart != -1 : "Two Timer.stop() without Timer.start()";
53 wbeebee  1.1.2.1         timerStart = -1;
54 wbeebee  1.1.2.1     }
55 wbeebee  1.1.2.1 
56 wbeebee  1.1.2.1     /** Return the cumulative amount of time elapsed between starts and stops
57 wbeebee  1.1.2.1      *  in milliseconds. 
58 wbeebee  1.1.2.1      */
59 wbeebee  1.1.2.1 
60 wbeebee  1.1.2.1     public long timeElapsed() {
61 wbeebee  1.1.2.1         return timeElapsed;
62 wbeebee  1.1.2.1     }
63 wbeebee  1.1.2.1 
64 wbeebee  1.1.2.1     /** Return a string representing the current state of the timer. */
65 wbeebee  1.1.2.1 
66 wbeebee  1.1.2.1     public String toString() {
67 wbeebee  1.1.2.1         StringBuffer sb = new StringBuffer("Timer ");
68 wbeebee  1.1.2.1         if (timerStart != -1) {
69 wbeebee  1.1.2.1             sb.append("running: ");
70 wbeebee  1.1.2.1             sb.append(((System.currentTimeMillis() - 
71 wbeebee  1.1.2.1                         timerStart + timeElapsed) / 1000.0));
72 salcianu 1.5                 sb.append(" s elapsed.");
73 wbeebee  1.1.2.1         } else {
74 wbeebee  1.1.2.1             sb.append("stopped: ");
75 wbeebee  1.1.2.1             sb.append(timeElapsed / 1000.0); 
76 salcianu 1.5                 sb.append(" s elapsed.");
77 wbeebee  1.1.2.1         }
78 wbeebee  1.1.2.1         return sb.toString();
79 wbeebee  1.1.2.1     }
80 cananian 1.2     }