public class JGFTimer { public String name; public String opname; public double time; public double opcount; public long calls; public int size = -1; private long start_time; private boolean on; public JGFTimer(String name, String opname){ this.name = name; this.opname = opname; reset(); } public JGFTimer(String name, String opname, int size){ this.name = name; this.opname = opname; this.size = size; reset(); } public JGFTimer(String name){ this(name,""); } public void start(){ if (on) System.out.println("Warning timer " + name + " was already turned on"); on = true; start_time = System.currentTimeMillis(); } public void stop(){ time += (double) (System.currentTimeMillis()-start_time) / 1000.; if (!on) System.out.println("Warning timer " + name + " wasn't turned on"); calls++; on = false; } public void addops(double count){ opcount += count; } public void reset(){ time = 0.0; calls = 0; opcount = 0; on = false; } public double perf(){ return opcount / time; } public void longprint(){ System.out.println("Timer Calls Time(s) Performance("+opname+"/s)"); System.out.println(name + " " + calls + " " + time + " " + this.perf()); } public void print(){ if (opname.equals("")) { System.out.println(name + " " + time + " (s)"); } else { switch(size) { case 0: System.out.println(name + ":SizeA" + "\t" + time + " (s) \t " + (float)this.perf() + "\t" + " ("+opname+"/s)"); break; case 1: System.out.println(name + ":SizeB" + "\t" + time + " (s) \t " + (float)this.perf() + "\t" + " ("+opname+"/s)"); break; case 2: System.out.println(name + ":SizeC" + "\t" + time + " (s) \t " + (float)this.perf() + "\t" + " ("+opname+"/s)"); break; default: System.out.println(name + "\t" + time + " (s) \t " + (float)this.perf() + "\t" + " ("+opname+"/s)"); break; } } } public void printperf(){ String name; name = this.name; // pad name to 40 characters while ( name.length() < 40 ) name = name + " "; System.out.println(name + "\t" + (float)this.perf() + "\t" + " ("+opname+"/s)"); } }