diff --git a/src/main/java/teetime/util/StatisticsUtil.java b/src/main/java/teetime/util/StatisticsUtil.java index 69655706c6d0093c154446a4561f5440a29c2e77..c27035aeead5e9e91ae387f442634829a4b00cf9 100644 --- a/src/main/java/teetime/util/StatisticsUtil.java +++ b/src/main/java/teetime/util/StatisticsUtil.java @@ -40,11 +40,10 @@ public class StatisticsUtil { // utility class } - public static PerformanceResult printStatistics(final long overallDurationInNs, final List<TimestampObject> timestampObjects) { + public static PerformanceResult computeStatistics(final long overallDurationInNs, final List<TimestampObject> timestampObjects) { PerformanceResult performanceResult = new PerformanceResult(); performanceResult.overallDurationInNs = overallDurationInNs; - System.out.println("Duration: " + TimeUnit.NANOSECONDS.toMillis(overallDurationInNs) + " ms"); final List<Long> sortedDurationsInNs = new ArrayList<Long>(timestampObjects.size() / 2); long sumInNs = 0; @@ -59,24 +58,14 @@ public class StatisticsUtil { performanceResult.sumInNs = sumInNs; final Map<Double, Long> quintileValues = StatisticsUtil.calculateQuintiles(sortedDurationsInNs); - performanceResult.quantiles = quintileValues; final long avgDurInNs = sumInNs / (timestampObjects.size() / 2); - System.out.println("avg duration: " + TimeUnit.NANOSECONDS.toMicros(avgDurInNs) + " µs"); - performanceResult.avgDurInNs = avgDurInNs; - System.out.println(getQuantilesString(quintileValues)); - final long confidenceWidthInNs = StatisticsUtil.calculateConfidenceWidth(sortedDurationsInNs, avgDurInNs); - performanceResult.confidenceWidthInNs = confidenceWidthInNs; - System.out.println("confidenceWidth: " + confidenceWidthInNs + " ns"); - System.out.println("[" + TimeUnit.NANOSECONDS.toMicros(avgDurInNs - confidenceWidthInNs) + " µs, " - + TimeUnit.NANOSECONDS.toMicros(avgDurInNs + confidenceWidthInNs) + " µs]"); - return performanceResult; } diff --git a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java index e64266edd759091a2a917799994e0824b139e3a2..e4177ad83a6c9ad536e3bafd66906ca3b9dc9750 100644 --- a/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java +++ b/src/test/java/kieker/analysis/examples/throughput/ThroughputTimestampAnalysisTest.java @@ -61,7 +61,7 @@ public class ThroughputTimestampAnalysisTest extends PerformanceTest { stopWatch.end(); } - StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects); + StatisticsUtil.computeStatistics(stopWatch.getDurationInNs(), timestampObjects); } } diff --git a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java index 998a447ab710f9dd37c7e6a6375373beb73dd32c..df3054665485d7864469b18e60a96311c2e96d86 100644 --- a/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java +++ b/src/test/java/teetime/variant/explicitScheduling/examples/throughput/ThroughputTimestampAnalysisTest.java @@ -58,7 +58,7 @@ public class ThroughputTimestampAnalysisTest extends PerformanceTest { stopWatch.end(); } - StatisticsUtil.printStatistics(stopWatch.getDurationInNs(), timestampObjects); + StatisticsUtil.computeStatistics(stopWatch.getDurationInNs(), timestampObjects); } } diff --git a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java index 940e090b729c95bef7c65ed8086169c0eaed7590..8c6362baed596483242ccb306760083dfad3401a 100644 --- a/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java +++ b/src/test/java/teetime/variant/methodcall/examples/experiment01/MethodCallThoughputTimestampAnalysis1Test.java @@ -15,10 +15,14 @@ ***************************************************************************/ package teetime.variant.methodcall.examples.experiment01; +import static org.junit.Assert.assertEquals; + import org.junit.Test; import teetime.util.ConstructorClosure; +import teetime.util.StatisticsUtil; import teetime.variant.explicitScheduling.examples.throughput.TimestampObject; +import test.PerformanceResult; import test.PerformanceTest; /** @@ -28,8 +32,7 @@ import test.PerformanceTest; */ public class MethodCallThoughputTimestampAnalysis1Test extends PerformanceTest { - // 500 times faster than our new framework - // TODO check why + // TODO check why the optimal, but inflexible impl is 500 times faster than our new framework @Test public void testWithManyObjects() { @@ -54,6 +57,8 @@ public class MethodCallThoughputTimestampAnalysis1Test extends PerformanceTest { this.stopWatch.end(); } + PerformanceResult performanceResult = StatisticsUtil.computeStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects); + assertEquals(292, performanceResult.quantiles.get(0.5), 1); // chw home } } diff --git a/src/test/java/test/PerformanceTest.java b/src/test/java/test/PerformanceTest.java index d3982b48dd58c7a3ec87b6555bfabe907a35a36a..5d74b846a0790962037ae979b3193d0a0a5424fd 100644 --- a/src/test/java/test/PerformanceTest.java +++ b/src/test/java/test/PerformanceTest.java @@ -2,6 +2,7 @@ package test; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; @@ -23,7 +24,7 @@ public abstract class PerformanceTest { public static final MeasurementRepository measurementRepository = new MeasurementRepository(); - private Description description; + protected Description description; protected StopWatch stopWatch; protected List<TimestampObject> timestampObjects; @@ -46,7 +47,14 @@ public abstract class PerformanceTest { @After public void after() { - PerformanceResult performanceResult = StatisticsUtil.printStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects); + PerformanceResult performanceResult = StatisticsUtil.computeStatistics(this.stopWatch.getDurationInNs(), this.timestampObjects); measurementRepository.performanceResults.put(this.description.getDisplayName(), performanceResult); + + System.out.println("Duration: " + TimeUnit.NANOSECONDS.toMillis(performanceResult.overallDurationInNs) + " ms"); + System.out.println("avg duration: " + TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs) + " µs"); + System.out.println(StatisticsUtil.getQuantilesString(performanceResult.quantiles)); + System.out.println("confidenceWidth: " + performanceResult.confidenceWidthInNs + " ns"); + System.out.println("[" + TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs - performanceResult.confidenceWidthInNs) + " µs, " + + TimeUnit.NANOSECONDS.toMicros(performanceResult.avgDurInNs + performanceResult.confidenceWidthInNs) + " µs]"); } }