This is an automated email from the ASF dual-hosted git repository. upthewaterspout pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
The following commit(s) were added to refs/heads/develop by this push: new 904dec5 Tweaking the output format of the analyzer 904dec5 is described below commit 904dec5e19ef8de1a76a61d30b124ee5cd02f3c1 Author: Dan Smith <upthewatersp...@apache.org> AuthorDate: Thu Nov 29 17:29:55 2018 -0800 Tweaking the output format of the analyzer --- .../perftest/analysis/BenchmarkRunResult.java | 93 ++++++++++++++++++++-- .../analysis/BenchmarkRunAnalyzerTest.java | 57 +++---------- 2 files changed, 97 insertions(+), 53 deletions(-) diff --git a/harness/src/main/java/org/apache/geode/perftest/analysis/BenchmarkRunResult.java b/harness/src/main/java/org/apache/geode/perftest/analysis/BenchmarkRunResult.java index 07d4c41..96b6d42 100644 --- a/harness/src/main/java/org/apache/geode/perftest/analysis/BenchmarkRunResult.java +++ b/harness/src/main/java/org/apache/geode/perftest/analysis/BenchmarkRunResult.java @@ -17,12 +17,14 @@ package org.apache.geode.perftest.analysis; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; +import java.io.StringWriter; import java.io.Writer; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class BenchmarkRunResult implements Serializable { - private List<BenchmarkResult> benchmarkResults = new ArrayList<>(); + private final List<BenchmarkResult> benchmarkResults = new ArrayList<>(); public BenchmarkResult addBenchmark(String name) { final BenchmarkResult benchmarkResult = new BenchmarkResult(name); @@ -33,13 +35,12 @@ public class BenchmarkRunResult implements Serializable { public void writeResult(Writer output) throws IOException { PrintWriter stream = new PrintWriter(output); for (BenchmarkResult benchmarkResult : benchmarkResults) { - stream.println("-- " + benchmarkResult.name + " --"); + stream.println(benchmarkResult.name); for (ProbeResult probeResult : benchmarkResult.probeResults) { - stream.println(probeResult.description); - stream.println("Result: " + String.valueOf(probeResult.test)); - stream.println("Baseline: " + String.valueOf(probeResult.baseline)); - stream.println( - "Relative performance: " + String.valueOf(probeResult.test / probeResult.baseline)); + stream.print(String.format(" %30s", probeResult.description)); + stream.print(String.format(" Baseline: %12.2f", probeResult.baseline)); + stream.print(String.format(" Test: %12.2f", probeResult.test)); + stream.print(String.format(" Ratio: %2.2f", probeResult.test / probeResult.baseline)); stream.println(); } } @@ -47,6 +48,40 @@ public class BenchmarkRunResult implements Serializable { output.flush(); } + @Override + public String toString() { + StringWriter writer = new StringWriter(); + try { + this.writeResult(writer); + } catch (IOException e) { + throw new IllegalStateException(); + } + + return writer.toString(); + + } + + public List<BenchmarkResult> getBenchmarkResults() { + return benchmarkResults; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BenchmarkRunResult that = (BenchmarkRunResult) o; + return Objects.equals(benchmarkResults, that.benchmarkResults); + } + + @Override + public int hashCode() { + return Objects.hash(benchmarkResults); + } + static class BenchmarkResult implements Serializable { private final String name; private final List<ProbeResult> probeResults = new ArrayList<>(); @@ -58,6 +93,25 @@ public class BenchmarkRunResult implements Serializable { public void addProbeResult(String name, double baseline, double test) { probeResults.add(new ProbeResult(name, baseline, test)); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BenchmarkResult that = (BenchmarkResult) o; + return Objects.equals(name, that.name) && + Objects.equals(probeResults, that.probeResults); + } + + @Override + public int hashCode() { + + return Objects.hash(name, probeResults); + } } private static class ProbeResult implements Serializable { @@ -70,5 +124,30 @@ public class BenchmarkRunResult implements Serializable { this.baseline = baseline; this.test = test; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProbeResult that = (ProbeResult) o; + return fuzzyEquals(that.baseline, baseline) && + fuzzyEquals(that.test, test) && + Objects.equals(description, that.description); + } + + @Override + public int hashCode() { + + return Objects.hash(description, baseline, test); + } + + public boolean fuzzyEquals(double a, double b) { + double ratio = Math.abs(a / b); + return ratio < 1.05 && ratio > 0.95; + } } } diff --git a/harness/src/test/java/org/apache/geode/perftest/analysis/BenchmarkRunAnalyzerTest.java b/harness/src/test/java/org/apache/geode/perftest/analysis/BenchmarkRunAnalyzerTest.java index 195dd06..12e37d1 100644 --- a/harness/src/test/java/org/apache/geode/perftest/analysis/BenchmarkRunAnalyzerTest.java +++ b/harness/src/test/java/org/apache/geode/perftest/analysis/BenchmarkRunAnalyzerTest.java @@ -15,17 +15,14 @@ package org.apache.geode.perftest.analysis; -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; +import static org.junit.Assert.assertEquals; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintStream; -import java.io.StringReader; import java.io.StringWriter; -import java.util.Scanner; -import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -82,15 +79,18 @@ public class BenchmarkRunAnalyzerTest { harvester.addProbe(new YardstickThroughputSensorParser()); harvester.addProbe(new YardstickPercentileSensorParser()); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(4000); StringWriter writer = new StringWriter(); - harvester.analyzeTestRun(testFolder, baseFolder).writeResult(writer); - System.out.println(writer.toString()); - BufferedReader resultReader = new BufferedReader(new StringReader(writer.toString())); + BenchmarkRunResult results = harvester.analyzeTestRun(testFolder, baseFolder); - validatedBenchmark(resultReader, "BenchmarkA", 20, 300, 25, 200); - validatedBenchmark(resultReader, "BenchmarkB", 25, 400, 20, 400); + BenchmarkRunResult expectedBenchmarkResult = new BenchmarkRunResult(); + BenchmarkRunResult.BenchmarkResult resultA = expectedBenchmarkResult.addBenchmark("BenchmarkA"); + resultA.addProbeResult(YardstickThroughputSensorParser.probeResultDescription, 25, 20); + resultA.addProbeResult(YardstickPercentileSensorParser.probeResultDescription, 200, 300); + BenchmarkRunResult.BenchmarkResult resultB = expectedBenchmarkResult.addBenchmark("BenchmarkB"); + resultB.addProbeResult(YardstickThroughputSensorParser.probeResultDescription, 20, 25); + resultB.addProbeResult(YardstickPercentileSensorParser.probeResultDescription, 400, 400); + assertEquals(expectedBenchmarkResult, results); } private void populateThroughputCSV(File targetDirectory, double[] perSecondThroughputs) @@ -114,39 +114,4 @@ public class BenchmarkRunAnalyzerTest { } output.close(); } - - private void validatedBenchmark(BufferedReader input, String benchmarkName, double testValA, - double testValB, double baseValA, double baseValB) - throws IOException { - String line = input.readLine(); - Assert.assertEquals("-- " + benchmarkName + " --", line); - validateProbe(input, YardstickThroughputSensorParser.probeResultDescription, testValA, - baseValA); - validateProbe(input, YardstickPercentileSensorParser.probeResultDescription, testValB, - baseValB); - } - - private void validateProbe(BufferedReader input, String description, double testVal, - double baseVal) - throws IOException { - String line = input.readLine(); - Assert.assertEquals(description, line); - Scanner scanner = new Scanner(input.readLine()); - while (!scanner.hasNextDouble()) { - scanner.next(); - } - Assert.assertEquals(testVal, scanner.nextDouble(), 0.01 * testVal); - scanner = new Scanner(input.readLine()); - while (!scanner.hasNextDouble()) { - scanner.next(); - } - Assert.assertEquals(baseVal, scanner.nextDouble(), 0.01 * baseVal); - scanner = new Scanner(input.readLine()); - while (!scanner.hasNextDouble()) { - scanner.next(); - } - Assert.assertEquals(testVal / baseVal, scanner.nextDouble(), 0.1); - line = input.readLine(); - Assert.assertEquals("", line); - } }