diff --git a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java index e673bb7db72e..833429db1e0b 100644 --- a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java +++ b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java @@ -28,9 +28,21 @@ * Represents the main program class which reflectively runs and manages the performance tests. */ public class PerfStressProgram { + private static final int NANOSECONDS_PER_SECOND = 1_000_000_000; + private static int[] completedOperations; private static long[] lastCompletionNanoTimes; + private static int getCompletedOperations() { + return IntStream.of(completedOperations).sum(); + } + + private static double getOperationsPerSecond() { + return IntStream.range(0, completedOperations.length) + .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / NANOSECONDS_PER_SECOND)) + .sum(); + } + /** * Runs the performance tests passed to be executed. * @@ -177,11 +189,13 @@ public static void runTests(PerfStressTest[] tests, boolean sync, int paralle int[] lastCompleted = new int[] { 0 }; Disposable progressStatus = printStatus( - "=== " + title + " ===" + System.lineSeparator() + "Current\t\tTotal", () -> { - int totalCompleted = IntStream.of(completedOperations).sum(); + "=== " + title + " ===" + System.lineSeparator() + "Current\t\tTotal\t\tAverage", () -> { + int totalCompleted = getCompletedOperations(); int currentCompleted = totalCompleted - lastCompleted[0]; + double averageCompleted = getOperationsPerSecond(); + lastCompleted[0] = totalCompleted; - return currentCompleted + "\t\t" + totalCompleted; + return String.format("%d\t\t%d\t\t%.2f", currentCompleted, totalCompleted, averageCompleted); }, true, true); if (sync) { @@ -206,14 +220,12 @@ public static void runTests(PerfStressTest[] tests, boolean sync, int paralle System.out.println("=== Results ==="); - int totalOperations = IntStream.of(completedOperations).sum(); - double operationsPerSecond = IntStream.range(0, parallel) - .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / 1000000000)) - .sum(); + int totalOperations = getCompletedOperations(); + double operationsPerSecond = getOperationsPerSecond(); double secondsPerOperation = 1 / operationsPerSecond; double weightedAverageSeconds = totalOperations / operationsPerSecond; - System.out.printf("Completed %d operations in a weighted-average of %.2fs (%.2f ops/s, %.3f s/op)%n", + System.out.printf("Completed %,d operations in a weighted-average of %,.2fs (%,.2f ops/s, %,.3f s/op)%n", totalOperations, weightedAverageSeconds, operationsPerSecond, secondsPerOperation); System.out.println(); }