diff --git a/src/main/java/teetime/framework/pipe/measurements/MeasureCollection.java b/src/main/java/teetime/framework/pipe/measurements/MeasureCollection.java index b6ead16943ce2cb028e723b521d25eaeb30f7e52..f697ac796cea24bd243da5643d63ca7144137365 100644 --- a/src/main/java/teetime/framework/pipe/measurements/MeasureCollection.java +++ b/src/main/java/teetime/framework/pipe/measurements/MeasureCollection.java @@ -80,6 +80,24 @@ public class MeasureCollection { return result; } + public double activationVariance() { + double expectedValue = averageActivationTime(); + double result = 0; + double count = 0; + double temp = 0; + for (AbstractStage stage : activationEntries.keySet()) { + for (ActivationEntry entry : activationEntries.get(stage)) { + temp = entry.getEndTime() - entry.getStartTime() - expectedValue; + result += temp * temp; + count++; + } + } + if (count != 0) { + result = result / count; + } + return result; + } + public long averageDeactivationTime() { long result = 0; long count = 0; @@ -97,6 +115,24 @@ public class MeasureCollection { return result; } + public double deactivationVariance() { + double expectedValue = averageDeactivationTime(); + double result = 0; + double count = 0; + double temp = 0; + for (AbstractStage stage : deactivationEntries.keySet()) { + for (DeactivationEntry entry : deactivationEntries.get(stage)) { + temp = entry.getEndTime() - entry.getStartTime() - expectedValue; + result += temp * temp; + count++; + } + } + if (count != 0) { + result = result / count; + } + return result; + } + public long averageThreadStopTime() { long result = 0; long count = 0; @@ -114,16 +150,41 @@ public class MeasureCollection { return result; } + public double threadStopTimeVariance() { + double expectedValue = averageThreadStopTime(); + double result = 0; + double count = 0; + double temp = 0; + for (AbstractStage stage : deactivationEntries.keySet()) { + for (DeactivationEntry entry : deactivationEntries.get(stage)) { + temp = entry.getEndTime() - entry.getThreadTerminationTime() - expectedValue; + result += temp * temp; + count++; + } + } + if (count != 0) { + result = result / count; + } + return result; + } + @Override public String toString() { String result = "All values are given in nanoseconds \n"; String avAT = "Average Activation Time"; + String aTV = "Activation Time Standard Deviation"; String avDT = "Average Deactivation Time"; + String dTV = "Deactivation Time Standard Deviation"; String avTT = "Average Time Thread Termination"; - int n = Math.max(avAT.length(), Math.max(avDT.length(), avTT.length())); + String tTV = "Time Thread Termination Standard Deviation"; + + int n = Math.max(avAT.length(), Math.max(avDT.length(), Math.max(avTT.length(), Math.max(aTV.length(), Math.max(dTV.length(), tTV.length()))))); result += avAT + spaces(n - avAT.length() + 1) + ": " + averageActivationTime() + "\n"; + result += aTV + spaces(n - aTV.length() + 1) + ": " + Math.sqrt(activationVariance()) + "\n"; result += avDT + spaces(n - avDT.length() + 1) + ": " + averageDeactivationTime() + "\n"; - result += avTT + spaces(n - avTT.length() + 1) + ": " + averageThreadStopTime(); + result += dTV + spaces(n - dTV.length() + 1) + ": " + Math.sqrt(deactivationVariance()) + "\n"; + result += avTT + spaces(n - avTT.length() + 1) + ": " + averageThreadStopTime() + "\n"; + result += tTV + spaces(n - tTV.length() + 1) + ": " + Math.sqrt(threadStopTimeVariance()); return result; }