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 }