use native sigar_cpu_perc in CpuPerc.java
This commit is contained in:
parent
043afd2608
commit
cf351c458c
|
@ -78,7 +78,7 @@ my %has_name_arg = map { $_, 1 } qw(FileSystemUsage DiskUsage
|
|||
|
||||
my %proc_no_arg = map { $_, 1 } qw(stat);
|
||||
|
||||
my %get_not_impl = map { $_, 1 } qw(net_address net_route net_connection net_stat
|
||||
my %get_not_impl = map { $_, 1 } qw(net_address net_route net_connection net_stat cpu_perc
|
||||
who cpu_info file_system); #list funcs only
|
||||
|
||||
sub supported_platforms {
|
||||
|
@ -417,6 +417,38 @@ our %classes = (
|
|||
plat => '*'
|
||||
},
|
||||
],
|
||||
CpuPerc => [
|
||||
{
|
||||
name => 'user', type => 'Double',
|
||||
desc => 'Percent system cpu user time',
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'sys', type => 'Double',
|
||||
desc => 'Percent system cpu kernel time',
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'nice', type => 'Double',
|
||||
desc => 'Percent system cpu nice time',
|
||||
plat => 'DFHL'
|
||||
},
|
||||
{
|
||||
name => 'idle', type => 'Double',
|
||||
desc => 'Percent system cpu idle time',
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'wait', type => 'Double',
|
||||
desc => 'Percent system cpu io wait time',
|
||||
plat => 'ALHS'
|
||||
},
|
||||
{
|
||||
name => 'combined', type => 'Double',
|
||||
desc => 'Sum of User + Sys + Nice + Wait',
|
||||
plat => '*'
|
||||
},
|
||||
],
|
||||
CpuInfo => [
|
||||
{
|
||||
name => 'vendor', type => 'String',
|
||||
|
|
|
@ -554,6 +554,20 @@ JNIEXPORT jobjectArray SIGAR_JNIx(getCpuListNative)
|
|||
return cpuarray;
|
||||
}
|
||||
|
||||
JNIEXPORT void SIGAR_JNI(CpuPerc_gather)
|
||||
(JNIEnv *env, jobject jperc, jobject sigar_obj, jobject jprev, jobject jcurr)
|
||||
{
|
||||
sigar_cpu_t prev, curr;
|
||||
sigar_cpu_perc_t perc;
|
||||
dSIGAR_VOID;
|
||||
|
||||
JAVA_SIGAR_GET_FIELDS_CPU(jprev, prev);
|
||||
JAVA_SIGAR_GET_FIELDS_CPU(jcurr, curr);
|
||||
sigar_cpu_perc_calculate(&prev, &curr, &perc);
|
||||
JAVA_SIGAR_INIT_FIELDS_CPUPERC(JENV->GetObjectClass(env, jperc));
|
||||
JAVA_SIGAR_SET_FIELDS_CPUPERC(NULL, jperc, perc);
|
||||
}
|
||||
|
||||
JNIEXPORT jlongArray SIGAR_JNIx(getProcList)
|
||||
(JNIEnv *env, jobject sigar_obj)
|
||||
{
|
||||
|
|
|
@ -30,37 +30,30 @@ public class CpuPerc implements java.io.Serializable {
|
|||
private double nice;
|
||||
private double idle;
|
||||
private double wait;
|
||||
private double combined;
|
||||
|
||||
CpuPerc() {}
|
||||
|
||||
public static CpuPerc calculate(Cpu oldCpu, Cpu curCpu) {
|
||||
double diffUser, diffSys, diffNice, diffIdle, diffWait, diffTotal;
|
||||
|
||||
diffUser = curCpu.getUser() - oldCpu.getUser();
|
||||
diffSys = curCpu.getSys() - oldCpu.getSys();
|
||||
diffNice = curCpu.getNice() - oldCpu.getNice();
|
||||
diffIdle = curCpu.getIdle() - oldCpu.getIdle();
|
||||
diffWait = curCpu.getWait() - oldCpu.getWait();
|
||||
|
||||
// Sanity check -- sometimes these values waiver in between
|
||||
// whole numbers when Cpu is checked very rapidly
|
||||
diffUser = diffUser < 0 ? 0 : diffUser;
|
||||
diffSys = diffSys < 0 ? 0 : diffSys;
|
||||
diffNice = diffNice < 0 ? 0 : diffNice;
|
||||
diffIdle = diffIdle < 0 ? 0 : diffIdle;
|
||||
diffWait = diffWait < 0 ? 0 : diffWait;
|
||||
|
||||
diffTotal = diffUser + diffSys + diffNice + diffIdle + diffWait;
|
||||
native void gather(Sigar sigar, Cpu oldCpu, Cpu curCpu);
|
||||
|
||||
static CpuPerc fetch(Sigar sigar, Cpu oldCpu, Cpu curCpu) {
|
||||
CpuPerc perc = new CpuPerc();
|
||||
perc.user = diffUser / diffTotal;
|
||||
perc.sys = diffSys / diffTotal;
|
||||
perc.nice = diffNice / diffTotal;
|
||||
perc.idle = diffIdle / diffTotal;
|
||||
perc.wait = diffWait / diffTotal;
|
||||
perc.gather(sigar, oldCpu, curCpu);
|
||||
return perc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public static CpuPerc calculate(Cpu oldCpu, Cpu curCpu) {
|
||||
Sigar sigar = new Sigar();
|
||||
try {
|
||||
return fetch(sigar, oldCpu, curCpu);
|
||||
} finally {
|
||||
sigar.close();
|
||||
}
|
||||
}
|
||||
|
||||
public double getUser() {
|
||||
return this.user;
|
||||
}
|
||||
|
@ -85,7 +78,7 @@ public class CpuPerc implements java.io.Serializable {
|
|||
* @return Sum of User + Sys + Nice + Wait
|
||||
*/
|
||||
public double getCombined() {
|
||||
return this.user + this.sys + this.nice + this.wait;
|
||||
return this.combined;
|
||||
}
|
||||
|
||||
public static String format(double val) {
|
||||
|
|
|
@ -334,7 +334,7 @@ public class Sigar implements SigarProxy {
|
|||
|
||||
this.lastCpu = getCpu();
|
||||
|
||||
return CpuPerc.calculate(oldCpu, this.lastCpu);
|
||||
return CpuPerc.fetch(this, oldCpu, this.lastCpu);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -362,8 +362,8 @@ public class Sigar implements SigarProxy {
|
|||
|
||||
for (int i=0; i<curLen; i++) {
|
||||
perc[i] =
|
||||
CpuPerc.calculate(oldCpuList[i],
|
||||
this.lastCpuList[i]);
|
||||
CpuPerc.fetch(this, oldCpuList[i],
|
||||
this.lastCpuList[i]);
|
||||
}
|
||||
|
||||
return perc;
|
||||
|
|
Loading…
Reference in New Issue