/* Copyright (c) 2006, Sriram Srinivasan
*
* You may distribute this software under the terms of the license
* specified in the file "License"
*/
package kilim.bench;
public class Stopwatch {
long lastTickMillis = System.currentTimeMillis();
long lastElapsedMillis = 0;
int multiplier = 1; // see reportMicros
String unit = " ms";
String name = "";
public Stopwatch() {tick();}
public Stopwatch(String nm) {name = nm; tick();}
/**
* @return the diff in millis from the last tick. Both tick and elapsed times are
* kept in millis
*/
public long tick() {
long l = lastTickMillis;
lastTickMillis = System.currentTimeMillis();
lastElapsedMillis = lastTickMillis - l;
return lastElapsedMillis;
}
/**
* Report in micros or millis
*/
public void reportMicros() {multiplier = 1000; unit = " micros";}
public void reportMillis() {multiplier = 1; unit = " ms";}
public long timePerIter(int iters) {
return iters == 0? 0 : lastElapsedMillis*multiplier/iters;
}
long itersPerTime(int iters) {
return lastElapsedMillis == 0 ? iters : iters/(lastElapsedMillis*multiplier);
}
public String toString() {
return name + ": elapsed: " + (lastElapsedMillis * multiplier) + " " + unit;
}
public String toString(int iters) {
return name + " elapsed: " + (lastElapsedMillis * multiplier) +
unit +", iters = " + iters +
", " + unit + "/iter = " + timePerIter(iters) +
", iters/" + unit + " = " + itersPerTime(iters);
}
public void print() {System.out.println(this);}
public void print(int iters) { System.out.println(this.toString(iters));}
public void tickPrint() {tick(); print();}
public void tickPrint(int iters) {tick(); print(iters);}
}