51 lines
1.5 KiB
Java
51 lines
1.5 KiB
Java
package wa.server.util;
|
|
|
|
/**
|
|
* Created by Ziver Koc
|
|
*/
|
|
public class ThroughputCalculator {
|
|
public static final float UPDATES_PER_SEC = 1;
|
|
public static final double NANOSEC_PER_SECOND = 1000000000.0;
|
|
|
|
private boolean updated;
|
|
private double throughput;
|
|
private long previousTimeStamp;
|
|
private long data_amount;
|
|
private long total_data_amount;
|
|
private float frequency = UPDATES_PER_SEC;
|
|
|
|
public void setTotalHandledData(long bytes){
|
|
setHandledData(bytes - total_data_amount);
|
|
total_data_amount = bytes;
|
|
}
|
|
public void setHandledData(long bytes){
|
|
long currentTimeStamp = System.nanoTime();
|
|
data_amount += bytes;
|
|
if(currentTimeStamp - (NANOSEC_PER_SECOND/frequency) > previousTimeStamp) {
|
|
throughput = data_amount / ((currentTimeStamp - previousTimeStamp) / NANOSEC_PER_SECOND);
|
|
previousTimeStamp = currentTimeStamp;
|
|
data_amount = 0;
|
|
updated = true;
|
|
}
|
|
}
|
|
|
|
public double getByteThroughput(){
|
|
setHandledData(0); // Update throughput
|
|
updated = false;
|
|
return throughput;
|
|
}
|
|
public double getBitThroughput(){
|
|
return getByteThroughput()*8;
|
|
}
|
|
|
|
public boolean isUpdated(){
|
|
return updated;
|
|
}
|
|
|
|
public void setFrequency(float frequency) {
|
|
if(frequency < 0)
|
|
this.frequency = UPDATES_PER_SEC;
|
|
else
|
|
this.frequency = frequency;
|
|
}
|
|
}
|