package org.gridkit.jvmtool.stacktrace.analytics;
import org.gridkit.jvmtool.stacktrace.ThreadSnapshot;
class FrequencyHMAggregatorFactory implements ThreadDumpAggregator, ThreadDumpAggregatorFactory {
@Override
public ThreadDumpAggregator newInstance() {
return new FrequencyHMAggregatorFactory();
}
long count = 0;
double reciproicalTotal = 0;
long lastTimestamp = Long.MAX_VALUE;
@Override
public void aggregate(ThreadSnapshot threadInfo) {
if (threadInfo.timestamp() > lastTimestamp) {
long delta = threadInfo.timestamp() - lastTimestamp;
double rcp = 1000d / delta;
count += 1;
reciproicalTotal += rcp;
}
lastTimestamp = threadInfo.timestamp();
}
@Override
public Object info() {
if (count > 0) {
return reciproicalTotal / ((double)count);
}
else {
return Double.NaN;
}
}
}