reusable cpu timer

This commit is contained in:
Doug MacEachern 2005-03-09 17:03:50 +00:00
parent a961ce1ea1
commit 531c3e32c6
1 changed files with 109 additions and 0 deletions

View File

@ -0,0 +1,109 @@
package net.hyperic.sigar;
import java.io.PrintStream;
public class CpuTimer {
private Sigar sigar;
private long totalTime;
private long cpuTotal;
private long cpuUser;
private long cpuSys;
private ThreadCpu cpu = new ThreadCpu();
private long startTime;
public CpuTimer() {
this(new Sigar());
}
public CpuTimer(Sigar sigar) {
this.sigar = sigar;
}
public void start() {
this.startTime = System.currentTimeMillis();
this.totalTime = 0;
this.cpuTotal = 0;
this.cpuUser = 0;
this.cpuSys = 0;
try {
this.cpu.gather(this.sigar, 0);
} catch (SigarException e) {
throw new IllegalArgumentException(e.toString());
}
}
public void stop() {
ThreadCpu diff = getDiff();
this.cpuTotal = diff.total;
this.cpuUser = diff.user;
this.cpuSys = diff.sys;
long stopTime = System.currentTimeMillis();
long time = stopTime - this.startTime;
this.totalTime = time;
}
public ThreadCpu getDiff() {
long startTotal = this.cpu.total;
long startUser = this.cpu.user;
long startSys = this.cpu.sys;
ThreadCpu diff = new ThreadCpu();
try {
this.cpu.gather(this.sigar, 0);
} catch (SigarException e) {
throw new IllegalArgumentException(e.toString());
}
diff.total = this.cpu.total - startTotal;
diff.user = this.cpu.user - startUser;
diff.sys = this.cpu.sys - startSys;
return diff;
}
public long getTotalTime() {
return this.totalTime;
}
public long getCpuTotal() {
return this.cpuTotal / 1000000; //convert nanos to millis
}
public long getCpuUser() {
return this.cpuUser / 1000000; //convert nanos to millis
}
public long getCpuSys() {
return this.cpuSys / 1000000; //convert nanos to millis
}
public String format(long elap) {
String fraction = (elap % 1000) + "";
int pad = 3 - fraction.length();
StringBuffer buf = new StringBuffer()
.append(elap / 1000).append('.');
//for example, 15 millseconds formatted as ".015" rather than ".15"
while (pad-- > 0) {
buf.append("0");
}
buf.append(fraction).append(" seconds");
return buf.toString();
}
public void list(PrintStream out) {
out.println("real....." +
format(getTotalTime()));
out.println("user....." + format(getCpuUser()));
out.println("sys......" + format(getCpuSys()));
}
}