diff --git a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/DeflateCost.kt b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/DeflateCost.kt index 5a59a15..9099f38 100644 --- a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/DeflateCost.kt +++ b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/DeflateCost.kt @@ -25,12 +25,15 @@ internal fun chooseCostAwarePath( var bestLength = 1 val match = matches[offset] val distance = match and MATCH_DISTANCE_MASK + val distanceSymbol = FIXED_DISTANCE_REVERSE_LOOKUP[distance] and 31 + val distanceCost = (FIXED_DISTANCE_TREE[distanceSymbol].toInt() and 0xFF) + + (FIXED_DISTANCE_EXTRA_BITS[distanceSymbol].toInt() and 0xFF) val maximumLength = match ushr MATCH_DISTANCE_BITS val containedLength = minOf(maximumLength, size - offset) val searchedLength = minOf(containedLength, COST_AWARE_LENGTH_SEARCH) for (length in 3..searchedLength) { - val candidateCost = fixedMatchBitCost(length, distance) + costs[offset + length] + val candidateCost = FIXED_LENGTH_TOKEN_COSTS[length] + distanceCost + costs[offset + length] if (candidateCost <= bestCost) { bestCost = candidateCost bestLength = length @@ -39,7 +42,7 @@ internal fun chooseCostAwarePath( if (maximumLength > searchedLength) { val nextCost = if (offset + maximumLength <= size) costs[offset + maximumLength] else 0 - val candidateCost = fixedMatchBitCost(maximumLength, distance) + nextCost + val candidateCost = FIXED_LENGTH_TOKEN_COSTS[maximumLength] + distanceCost + nextCost if (candidateCost <= bestCost) { bestCost = candidateCost bestLength = maximumLength @@ -56,10 +59,8 @@ internal fun fixedLiteralBitCost(literal: Int): Int { } internal fun fixedMatchBitCost(length: Int, distance: Int): Int { - val lengthSymbol = FIXED_LENGTH_REVERSE_LOOKUP[length] and 31 val distanceSymbol = FIXED_DISTANCE_REVERSE_LOOKUP[distance] and 31 - return (FIXED_LENGTH_TREE[257 + lengthSymbol].toInt() and 0xFF) + - (FIXED_LENGTH_EXTRA_BITS[lengthSymbol].toInt() and 0xFF) + + return FIXED_LENGTH_TOKEN_COSTS[length] + (FIXED_DISTANCE_TREE[distanceSymbol].toInt() and 0xFF) + (FIXED_DISTANCE_EXTRA_BITS[distanceSymbol].toInt() and 0xFF) } @@ -68,3 +69,9 @@ internal fun fixedMatchBitCost(length: Int, distance: Int): Int { internal const val COST_AWARE_WINDOW_SIZE = 262_144 // Price every short match length plus the longest available match. private const val COST_AWARE_LENGTH_SEARCH = 64 + +private val FIXED_LENGTH_TOKEN_COSTS = IntArray(259) { length -> + val lengthSymbol = FIXED_LENGTH_REVERSE_LOOKUP[length] and 31 + (FIXED_LENGTH_TREE[257 + lengthSymbol].toInt() and 0xFF) + + (FIXED_LENGTH_EXTRA_BITS[lengthSymbol].toInt() and 0xFF) +} diff --git a/performance/2026-09-09-costspeed/RESULTS.md b/performance/2026-09-09-costspeed/RESULTS.md new file mode 100644 index 0000000..a9a3884 --- /dev/null +++ b/performance/2026-09-09-costspeed/RESULTS.md @@ -0,0 +1,79 @@ +# Reuse fixed token prices in the level 9 parser + +Precompute the 259 fixed length-token prices and calculate each match distance price once per parser offset. Candidate order and ties are unchanged. This targets level 9 CPU cost; it does not improve compressed size. + +Base: `fe2ff51`, `dev-1.1.0`. Measured on September 9, 2026 on Linux x86_64, Intel Core i7-11800H. JVM uses JBR 17.0.14; Node uses 22.22.1. + +Only KFlate was timed. Kompress sizes and timings come unchanged from the trusted September 8 archive in `performance/history.json`. Benchmark setup may produce Kompress streams for decoder validation outside timing. + +## Compressed size + +The JVM sweep compresses all seven tracked corpora at every listed level. Every output must round-trip through both the JDK RAW inflater and KFlate. Byte counts are deterministic. Single-run durations in the sweep JSON are diagnostic, not throughput benchmarks. + +Output reduction is `(beforeBytes - afterBytes) / beforeBytes`. Totals weight each corpus by its compressed bytes; they are not averages of percentage changes. + +| Level | Before bytes | After bytes | Output reduction | +| ---: | ---: | ---: | ---: | +| 0 | 76,379,868 | 76,379,868 | 0.0000% | +| 1 | 40,222,941 | 40,222,941 | 0.0000% | +| 2 | 39,269,936 | 39,269,936 | 0.0000% | +| 3 | 38,906,551 | 38,906,551 | 0.0000% | +| 4 | 38,333,169 | 38,333,169 | 0.0000% | +| 5 | 38,293,272 | 38,293,272 | 0.0000% | +| 6 | 37,882,044 | 37,882,044 | 0.0000% | +| 7 | 37,868,330 | 37,868,330 | 0.0000% | +| 8 | 37,737,043 | 37,737,043 | 0.0000% | +| 9 | 37,251,418 | 37,251,418 | 0.0000% | + +### Level 6 + +| Corpus | Before bytes | After bytes | Reduction | Saved JVM Kompress bytes | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 84 | 84 | 0.0000% | 84 | +| text | 506,455 | 506,455 | 0.0000% | 505,318 | +| model3D | 2,153 | 2,153 | 0.0000% | 2,149 | +| Rainier.bmp | 3,283,450 | 3,283,450 | 0.0000% | 3,275,337 | +| Maltese.bmp | 7,158,472 | 7,158,472 | 0.0000% | 7,096,685 | +| Sunrise.bmp | 26,838,825 | 26,838,825 | 0.0000% | 26,698,992 | +| compressed_MVT.pbf | 92,605 | 92,605 | 0.0000% | 91,408 | + +### Level 9 + +| Corpus | Before bytes | After bytes | Reduction | Saved JVM Kompress bytes | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 84 | 84 | 0.0000% | 84 | +| text | 492,523 | 492,523 | 0.0000% | 503,400 | +| model3D | 2,153 | 2,153 | 0.0000% | 2,149 | +| Rainier.bmp | 3,258,570 | 3,258,570 | 0.0000% | 3,270,382 | +| Maltese.bmp | 7,034,092 | 7,034,092 | 0.0000% | 7,090,887 | +| Sunrise.bmp | 26,372,269 | 26,372,269 | 0.0000% | 26,652,810 | +| compressed_MVT.pbf | 91,727 | 91,727 | 0.0000% | 91,400 | + +## Compression timing + +Development measurements use three one-second warmups and five one-second measurement iterations. JVM has one fresh fork per corpus; Native has one process per corpus; Wasm uses one runner. These shorter runs detect broad tradeoffs and are not release-grade speed claims. Raw samples, errors and confidence intervals are retained. No decompression speed claim is made. + +### jvm, level 9 + +| Corpus | Before ms | After ms | Before/after speedup | Saved Kompress/after speedup | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 0.0272 | 0.0274 | 0.991x | 0.148x | +| text | 192.2328 | 186.2983 | 1.032x | 0.399x | +| model3D | 0.0969 | 0.0946 | 1.024x | 0.317x | +| Rainier.bmp | 2551.1684 | 2307.4431 | 1.106x | 0.048x | +| Maltese.bmp | 1206.9043 | 1168.8631 | 1.033x | 0.339x | +| Sunrise.bmp | 11385.8072 | 11394.6151 | 0.999x | 0.148x | +| compressed_MVT.pbf | 9.3247 | 8.8060 | 1.059x | 0.472x | + + +## Validation and reproduction + +Linux JVM tests passed. All 70 corpus/level outputs round-tripped through JDK and KFlate. SHA-256 hashes matched the baseline for all 70 outputs. All seven level 9 JMH compression cases completed. No Native or Wasm timing claim is made. + +Tracked source diff SHA-256: `65031a00c582ebf245a4f16dfd52107b274d0b638cdf047b18f58120a552ebd9`. Added source/test files are present in this commit. + +Linux build: `ANDROID_HOME=/home/rafael/Android/Sdk ./gradlew :kflate:jvmTest :kflate:jvmBenchmarkBenchmarkJar --no-parallel --max-workers=1`. + +For level 9 timing, set `BENCHMARK_COMPRESSION_LEVEL` to 9 in `BenchmarkState.kt` before building; leave it at 6 otherwise. Use JBR 17.0.14 and the generated JMH jar with the main and benchmark classes on its classpath. Run `org.openjdk.jmh.Main` with the relevant `CompressionBenchmarks` method filter and `-wi 3 -i 5 -w 1s -r 1s -f 1 -foe true -rf json -rff result.json`. Only KFlate benchmark methods should be selected. + +Compile `RatioSweep.java` against the KFlate classes and generated benchmark jar, then run it with `kflate/src/jvmTest/resources FIRST_LEVEL LAST_LEVEL`. It checks both JDK and KFlate decompression and records deterministic sizes and output hashes. diff --git a/performance/2026-09-09-costspeed/RatioSweep.java b/performance/2026-09-09-costspeed/RatioSweep.java new file mode 100644 index 0000000..2d3bf10 --- /dev/null +++ b/performance/2026-09-09-costspeed/RatioSweep.java @@ -0,0 +1,39 @@ +import com.rafambn.kflate.KFlate; +import com.rafambn.kflate.compression.Raw; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.security.MessageDigest; +import java.util.HexFormat; +import java.util.zip.Inflater; + +public class RatioSweep { + public static void main(String[] args) throws Exception { + String[] names = {"simpleText", "text", "model3D", "Rainier.bmp", "Maltese.bmp", "Sunrise.bmp", "compressed_MVT.pbf"}; + int first = args.length > 1 ? Integer.parseInt(args[1]) : 0; + int last = args.length > 2 ? Integer.parseInt(args[2]) : 9; + for (String name : names) { + byte[] input = Files.readAllBytes(Path.of(args[0], name)); + for (int level = first; level <= last; level++) { + long start = System.nanoTime(); + byte[] output = KFlate.INSTANCE.compress(input, new Raw(level, null)); + double ms = (System.nanoTime() - start) / 1e6; + Inflater inflater = new Inflater(true); + try { + inflater.setInput(output); + byte[] decoded = new byte[input.length + 1]; + int count = inflater.inflate(decoded); + if (!inflater.finished() || count != input.length || !Arrays.equals(input, Arrays.copyOf(decoded, count))) { + throw new AssertionError("Invalid output: " + name + " level " + level); + } + } finally { + inflater.end(); + } + if (!Arrays.equals(input, KFlate.INSTANCE.decompress(output, new com.rafambn.kflate.decompression.Raw(null, null)))) { + throw new AssertionError("KFlate round trip: " + name + " level " + level); + } + System.out.printf(java.util.Locale.ROOT, "{\"corpus\":\"%s\",\"level\":%d,\"originalSizeBytes\":%d,\"compressedSizeBytes\":%d,\"singleRunMs\":%.6f,\"sha256\":\"%s\"}%n", name, level, input.length, output.length, ms, HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256").digest(output))); + } + } + } +} diff --git a/performance/2026-09-09-costspeed/after-jmh.json b/performance/2026-09-09-costspeed/after-jmh.json new file mode 100644 index 0000000..ec997b6 --- /dev/null +++ b/performance/2026-09-09-costspeed/after-jmh.json @@ -0,0 +1,380 @@ +[ + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "simpleText" + }, + "primaryMetric" : { + "score" : 2.7440087977518352E-5, + "scoreError" : 2.7969351870082083E-6, + "scoreConfidence" : [ + 2.4643152790510144E-5, + 3.023702316452656E-5 + ], + "scorePercentiles" : { + "0.0" : 2.6543137621739247E-5, + "50.0" : 2.7860598094654448E-5, + "90.0" : 2.810237618004046E-5, + "95.0" : 2.810237618004046E-5, + "99.0" : 2.810237618004046E-5, + "99.9" : 2.810237618004046E-5, + "99.99" : 2.810237618004046E-5, + "99.999" : 2.810237618004046E-5, + "99.9999" : 2.810237618004046E-5, + "100.0" : 2.810237618004046E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.792730334506059E-5, + 2.810237618004046E-5, + 2.7860598094654448E-5, + 2.6543137621739247E-5, + 2.6767024646097032E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "text" + }, + "primaryMetric" : { + "score" : 0.18629825846666667, + "scoreError" : 0.03691009550521, + "scoreConfidence" : [ + 0.14938816296145668, + 0.22320835397187666 + ], + "scorePercentiles" : { + "0.0" : 0.16924069183333335, + "50.0" : 0.19027214216666666, + "90.0" : 0.19151792183333333, + "95.0" : 0.19151792183333333, + "99.0" : 0.19151792183333333, + "99.9" : 0.19151792183333333, + "99.99" : 0.19151792183333333, + "99.999" : 0.19151792183333333, + "99.9999" : 0.19151792183333333, + "100.0" : 0.19151792183333333 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.19027214216666666, + 0.19137123416666665, + 0.19151792183333333, + 0.18908930233333332, + 0.16924069183333335 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "model3D" + }, + "primaryMetric" : { + "score" : 9.463481103529814E-5, + "scoreError" : 2.874329475081364E-6, + "scoreConfidence" : [ + 9.176048156021678E-5, + 9.75091405103795E-5 + ], + "scorePercentiles" : { + "0.0" : 9.330424675809311E-5, + "50.0" : 9.491604479028278E-5, + "90.0" : 9.503540760095012E-5, + "95.0" : 9.503540760095012E-5, + "99.0" : 9.503540760095012E-5, + "99.9" : 9.503540760095012E-5, + "99.99" : 9.503540760095012E-5, + "99.999" : 9.503540760095012E-5, + "99.9999" : 9.503540760095012E-5, + "100.0" : 9.503540760095012E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 9.489446129032258E-5, + 9.491604479028278E-5, + 9.503540760095012E-5, + 9.50238947368421E-5, + 9.330424675809311E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Rainier.bmp" + }, + "primaryMetric" : { + "score" : 2.3074431308000003, + "scoreError" : 0.15465841940618938, + "scoreConfidence" : [ + 2.152784711393811, + 2.4621015502061896 + ], + "scorePercentiles" : { + "0.0" : 2.274700913, + "50.0" : 2.292348434, + "90.0" : 2.370313624, + "95.0" : 2.370313624, + "99.0" : 2.370313624, + "99.9" : 2.370313624, + "99.99" : 2.370313624, + "99.999" : 2.370313624, + "99.9999" : 2.370313624, + "100.0" : 2.370313624 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.323240267, + 2.370313624, + 2.292348434, + 2.276612416, + 2.274700913 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Maltese.bmp" + }, + "primaryMetric" : { + "score" : 1.168863117, + "scoreError" : 0.04203128804598805, + "scoreConfidence" : [ + 1.1268318289540118, + 1.210894405045988 + ], + "scorePercentiles" : { + "0.0" : 1.158019866, + "50.0" : 1.162834932, + "90.0" : 1.182097055, + "95.0" : 1.182097055, + "99.0" : 1.182097055, + "99.9" : 1.182097055, + "99.99" : 1.182097055, + "99.999" : 1.182097055, + "99.9999" : 1.182097055, + "100.0" : 1.182097055 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.179075769, + 1.182097055, + 1.158019866, + 1.162834932, + 1.162287963 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Sunrise.bmp" + }, + "primaryMetric" : { + "score" : 11.3946151126, + "scoreError" : 1.2908670682651255, + "scoreConfidence" : [ + 10.103748044334875, + 12.685482180865126 + ], + "scorePercentiles" : { + "0.0" : 11.121803434, + "50.0" : 11.333068023, + "90.0" : 11.938510688, + "95.0" : 11.938510688, + "99.0" : 11.938510688, + "99.9" : 11.938510688, + "99.99" : 11.938510688, + "99.999" : 11.938510688, + "99.9999" : 11.938510688, + "100.0" : 11.938510688 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 11.453459146, + 11.333068023, + 11.126234272, + 11.121803434, + 11.938510688 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "primaryMetric" : { + "score" : 0.00880601685104919, + "scoreError" : 2.5672156976158113E-4, + "scoreConfidence" : [ + 0.008549295281287608, + 0.00906273842081077 + ], + "scorePercentiles" : { + "0.0" : 0.008749361539130435, + "50.0" : 0.008783228403508772, + "90.0" : 0.008921185637168141, + "95.0" : 0.008921185637168141, + "99.0" : 0.008921185637168141, + "99.9" : 0.008921185637168141, + "99.99" : 0.008921185637168141, + "99.999" : 0.008921185637168141, + "99.9999" : 0.008921185637168141, + "100.0" : 0.008921185637168141 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.008796765684210527, + 0.00877954299122807, + 0.008921185637168141, + 0.008783228403508772, + 0.008749361539130435 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-costspeed/after-sizes.jsonl b/performance/2026-09-09-costspeed/after-sizes.jsonl new file mode 100644 index 0000000..ca020ad --- /dev/null +++ b/performance/2026-09-09-costspeed/after-sizes.jsonl @@ -0,0 +1,70 @@ +{"corpus":"simpleText","level":0,"originalSizeBytes":100,"compressedSizeBytes":105,"singleRunMs":18.350373,"sha256":"7a4f86cab2c64d7a755ba6244b34b85122a3d7e629073b34930b3d477585100b"} +{"corpus":"simpleText","level":1,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":10.080958,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":2,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.298233,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":3,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.265315,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":4,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.273041,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":5,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.352760,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":6,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.310839,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":7,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.213648,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":8,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.204409,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":9,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.508352,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"text","level":0,"originalSizeBytes":1232923,"compressedSizeBytes":1233018,"singleRunMs":4.265884,"sha256":"cfab8f8c4f21f3b8b8b3cd60a85b7e1243a5aad2a06fa863e9eec73187488605"} +{"corpus":"text","level":1,"originalSizeBytes":1232923,"compressedSizeBytes":599813,"singleRunMs":50.019403,"sha256":"143d81705ac095d278fb6e1fa3932a500916369bc4596da6885cfe2e7d81f756"} +{"corpus":"text","level":2,"originalSizeBytes":1232923,"compressedSizeBytes":581519,"singleRunMs":32.083647,"sha256":"611557ab65d0c35387dfc6121636fd006ff3a237c3a838835f67e31cc79983ce"} +{"corpus":"text","level":3,"originalSizeBytes":1232923,"compressedSizeBytes":565252,"singleRunMs":32.958478,"sha256":"19a3c8ae4b1f0ed21ed27b0e0bb87c22d0ebf7259406f8d748c3d79c3d4888ee"} +{"corpus":"text","level":4,"originalSizeBytes":1232923,"compressedSizeBytes":531466,"singleRunMs":60.560370,"sha256":"d27df2bc4d16b3c9b193b68a7c72cc4208ed4505c2eaafbfc078fbfb29bdd3e1"} +{"corpus":"text","level":5,"originalSizeBytes":1232923,"compressedSizeBytes":521837,"singleRunMs":58.313103,"sha256":"49036c7d2710a45efdf31f3cb63b002ecffe3f8732566b65cd54997e02788bbd"} +{"corpus":"text","level":6,"originalSizeBytes":1232923,"compressedSizeBytes":506455,"singleRunMs":69.473338,"sha256":"3ba0571fcc563672f279cad303810e537dfc18ce61680207dfcd3e2e91abaf67"} +{"corpus":"text","level":7,"originalSizeBytes":1232923,"compressedSizeBytes":506097,"singleRunMs":71.178059,"sha256":"f7b312a37b78362b74cb5c5b1da94aaadec93a4629b19fc3d5cf5300498b993d"} +{"corpus":"text","level":8,"originalSizeBytes":1232923,"compressedSizeBytes":513489,"singleRunMs":75.536909,"sha256":"0008d4cc1d35364514f380a591ec7c01edc292742c5654a50795008ae3b6989c"} +{"corpus":"text","level":9,"originalSizeBytes":1232923,"compressedSizeBytes":492523,"singleRunMs":199.733466,"sha256":"dc70cee621bd4f3b0773d4001d396384e0eae4fe2eea0289bf3620b80d6670ca"} +{"corpus":"model3D","level":0,"originalSizeBytes":2478,"compressedSizeBytes":2483,"singleRunMs":0.044522,"sha256":"7d1354e385451c35f23c9be4ce28245d554943a2219ff0cf3481d5c0a02a4919"} +{"corpus":"model3D","level":1,"originalSizeBytes":2478,"compressedSizeBytes":2169,"singleRunMs":0.176889,"sha256":"cc762b082d3527b26e531d8f8cd04e17467595b5ef1ea32a541b275663e3ef96"} +{"corpus":"model3D","level":2,"originalSizeBytes":2478,"compressedSizeBytes":2168,"singleRunMs":0.136213,"sha256":"7be0094d5c194b33c4337a5c971d25c3ed4e2c3d1d195a75225130310d911733"} +{"corpus":"model3D","level":3,"originalSizeBytes":2478,"compressedSizeBytes":2166,"singleRunMs":0.117862,"sha256":"fa0c3d7374a90b6f9d7f14095e59ecd375b976cd57423d40e18d26332bf768c6"} +{"corpus":"model3D","level":4,"originalSizeBytes":2478,"compressedSizeBytes":2165,"singleRunMs":0.125737,"sha256":"b8bb6e5b0de2dac94d69e676871bd5538d16c6fc909b4a926a9fb42ca33d4846"} +{"corpus":"model3D","level":5,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.519860,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":6,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.290636,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":7,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.234774,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":8,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.144894,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":9,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.367920,"sha256":"450f6437d13a19585d0df05da961baf30023451a17612fd84a683a2f2f450ea7"} +{"corpus":"Rainier.bmp","level":0,"originalSizeBytes":6220854,"compressedSizeBytes":6221329,"singleRunMs":6.129077,"sha256":"acf3201e43c503d2705565195eb3bfc176e674b00bc8eeaf55411409398ffb7e"} +{"corpus":"Rainier.bmp","level":1,"originalSizeBytes":6220854,"compressedSizeBytes":3387685,"singleRunMs":96.763937,"sha256":"d86acee038a3272ef53f6be323c941d63ee7fc64544d489d3e81061ba2cb4296"} +{"corpus":"Rainier.bmp","level":2,"originalSizeBytes":6220854,"compressedSizeBytes":3357387,"singleRunMs":90.905747,"sha256":"cb08babeb442d0a7b5ef341c5114d36a9a40c0e9640c848accd37d151af8a3a6"} +{"corpus":"Rainier.bmp","level":3,"originalSizeBytes":6220854,"compressedSizeBytes":3345679,"singleRunMs":87.875073,"sha256":"3c62f22018cd809c25f3c70a9672872a0a0ec916ad89b7eca944c0415093b7dd"} +{"corpus":"Rainier.bmp","level":4,"originalSizeBytes":6220854,"compressedSizeBytes":3325593,"singleRunMs":89.428994,"sha256":"84cf1da1aa0fd2007e5de90ff81e779e616020cf3548affd456350296f12ce6c"} +{"corpus":"Rainier.bmp","level":5,"originalSizeBytes":6220854,"compressedSizeBytes":3313388,"singleRunMs":95.948598,"sha256":"54a7d786396e86dae90937df6dd8425d69557991ec611265a212ad85037e2b63"} +{"corpus":"Rainier.bmp","level":6,"originalSizeBytes":6220854,"compressedSizeBytes":3283450,"singleRunMs":110.691223,"sha256":"fba9e4496d79c376317229a92a905be4351f5487e3db2a91d2287826db2bc7e3"} +{"corpus":"Rainier.bmp","level":7,"originalSizeBytes":6220854,"compressedSizeBytes":3282047,"singleRunMs":108.267907,"sha256":"50d60b742c7b4bfdde3d0a3a6893995cace792bbad1dd85e475e40c4dc2c0221"} +{"corpus":"Rainier.bmp","level":8,"originalSizeBytes":6220854,"compressedSizeBytes":3274905,"singleRunMs":121.389936,"sha256":"d151041825a26ae58bd43d4dc8425663e8587cbfd23a49bf4023dd74d5a414c6"} +{"corpus":"Rainier.bmp","level":9,"originalSizeBytes":6220854,"compressedSizeBytes":3258570,"singleRunMs":3353.709820,"sha256":"03c9fd76a372debf3b4ded8a5ac7f85a1cdf1f5fb0d263963eecbc52147fdace"} +{"corpus":"Maltese.bmp","level":0,"originalSizeBytes":16427390,"compressedSizeBytes":16428645,"singleRunMs":13.595970,"sha256":"d872a98f975735016f16578b716b5c874f98e85abc101426d1142dd3a5c096d6"} +{"corpus":"Maltese.bmp","level":1,"originalSizeBytes":16427390,"compressedSizeBytes":8344362,"singleRunMs":260.167363,"sha256":"fbb73b9022879442d4e1f1ecb02baa6b1ac77119aafde5151b559e0b417dd98c"} +{"corpus":"Maltese.bmp","level":2,"originalSizeBytes":16427390,"compressedSizeBytes":7762283,"singleRunMs":342.504770,"sha256":"382e0863aa03871829f20b35a7d9f69c29108bbfcca7dd1d0097f782be3f8a2b"} +{"corpus":"Maltese.bmp","level":3,"originalSizeBytes":16427390,"compressedSizeBytes":7494606,"singleRunMs":389.953522,"sha256":"387c7f415e7da413a670c5ec9589ef69e744bf442195d53f60996d04c2d661dc"} +{"corpus":"Maltese.bmp","level":4,"originalSizeBytes":16427390,"compressedSizeBytes":7272625,"singleRunMs":357.588191,"sha256":"799d4909f60c7fa4262539af0c182ecf99fae272ed6b031524cf86ff2cef7693"} +{"corpus":"Maltese.bmp","level":5,"originalSizeBytes":16427390,"compressedSizeBytes":7265831,"singleRunMs":466.532481,"sha256":"d62521d1d682ba1afa24845265fcb768883997c5425775d8630b2feaab128464"} +{"corpus":"Maltese.bmp","level":6,"originalSizeBytes":16427390,"compressedSizeBytes":7158472,"singleRunMs":475.566434,"sha256":"cb10f06b36e0eaf03ebf81b8743a321d751979f5e671deb340405dfa6b8986b1"} +{"corpus":"Maltese.bmp","level":7,"originalSizeBytes":16427390,"compressedSizeBytes":7157735,"singleRunMs":533.583479,"sha256":"9ac4463c11aeaac8cc3ca316115118a45d1cec7fc7807cb6da67b58630de2f6b"} +{"corpus":"Maltese.bmp","level":8,"originalSizeBytes":16427390,"compressedSizeBytes":7125327,"singleRunMs":544.474991,"sha256":"a05331809efe04ca4434c5bfd57592571a22c5d30211715d6e24c3828903c640"} +{"corpus":"Maltese.bmp","level":9,"originalSizeBytes":16427390,"compressedSizeBytes":7034092,"singleRunMs":1429.777805,"sha256":"839db5fb3ea325162ced4ed8675e03aeac77e96099385c08d2c9d7140741d60e"} +{"corpus":"Sunrise.bmp","level":0,"originalSizeBytes":52344054,"compressedSizeBytes":52348049,"singleRunMs":30.683531,"sha256":"4ab78a3e1ba97388ff3dd5e00d9e134bceeb1b5eb3edc7aaf7845c1377fea548"} +{"corpus":"Sunrise.bmp","level":1,"originalSizeBytes":52344054,"compressedSizeBytes":27793016,"singleRunMs":813.715410,"sha256":"7028cd0b1e7d73172e76063b6004aedee371667bca442e8a68ca718f36dac355"} +{"corpus":"Sunrise.bmp","level":2,"originalSizeBytes":52344054,"compressedSizeBytes":27471887,"singleRunMs":980.417832,"sha256":"38fe2dd9e078be3c88adf86d15cc2da3187ea4c8919a73284f431e68dd9b7392"} +{"corpus":"Sunrise.bmp","level":3,"originalSizeBytes":52344054,"compressedSizeBytes":27404419,"singleRunMs":1076.384348,"sha256":"158c5cb3eb8d7023dc234ec5ae5e4e0d64be93f8c0f2f250bf05da65d5c9aff3"} +{"corpus":"Sunrise.bmp","level":4,"originalSizeBytes":52344054,"compressedSizeBytes":27107867,"singleRunMs":1148.088150,"sha256":"c42c56683342f532ce402a90d066e23d688a19221200648c26ce3b11621cc2e0"} +{"corpus":"Sunrise.bmp","level":5,"originalSizeBytes":52344054,"compressedSizeBytes":27096750,"singleRunMs":1365.578418,"sha256":"734bc825d4f1374115b66c64e1f56edf46c8978185ddaecffd9adc87a2e4c12e"} +{"corpus":"Sunrise.bmp","level":6,"originalSizeBytes":52344054,"compressedSizeBytes":26838825,"singleRunMs":1513.385507,"sha256":"34a1e5b94bf2344b565dc7b11b44f6908bda919a1fea479b2b2e0f557fd26346"} +{"corpus":"Sunrise.bmp","level":7,"originalSizeBytes":52344054,"compressedSizeBytes":26827604,"singleRunMs":1712.396028,"sha256":"cb202e01985166da6621d97ab386edff2eb4274eb8f1237aff36390543dcf18c"} +{"corpus":"Sunrise.bmp","level":8,"originalSizeBytes":52344054,"compressedSizeBytes":26728454,"singleRunMs":1893.253144,"sha256":"7570e8999cbda1a50c9693338f4a11dcf5aed8f6f45ff4cc1def7c3ee945541b"} +{"corpus":"Sunrise.bmp","level":9,"originalSizeBytes":52344054,"compressedSizeBytes":26372269,"singleRunMs":11765.888989,"sha256":"4a6c5eb215fe50a55a4a8c23aefa08c900d0282ef35611dbb9420055869fa986"} +{"corpus":"compressed_MVT.pbf","level":0,"originalSizeBytes":146224,"compressedSizeBytes":146239,"singleRunMs":0.066377,"sha256":"d8239f92d78f0d7fc3e9e9d8557e35365184e7d8c7f432339a8375c422a61c13"} +{"corpus":"compressed_MVT.pbf","level":1,"originalSizeBytes":146224,"compressedSizeBytes":95812,"singleRunMs":2.576434,"sha256":"8e921cc121ff9a262119bd7a2124a36039b95a26a5095349d08ea9b776c0ba34"} +{"corpus":"compressed_MVT.pbf","level":2,"originalSizeBytes":146224,"compressedSizeBytes":94608,"singleRunMs":2.933233,"sha256":"52efa74d70a15df6fa9d67da07da404b7e4628f895f65ddaa94148161762c45c"} +{"corpus":"compressed_MVT.pbf","level":3,"originalSizeBytes":146224,"compressedSizeBytes":94345,"singleRunMs":3.257934,"sha256":"a4090d9493e7e896ce6bc3f1c454e23738aa2e35e5418abb8d98c9f6dafaec94"} +{"corpus":"compressed_MVT.pbf","level":4,"originalSizeBytes":146224,"compressedSizeBytes":93369,"singleRunMs":3.646786,"sha256":"41844dbfb741b35e7e91c17ad039e1439e9601af58a3f70c6a83cac1e5f9491e"} +{"corpus":"compressed_MVT.pbf","level":5,"originalSizeBytes":146224,"compressedSizeBytes":93229,"singleRunMs":3.911685,"sha256":"169dee1b2849bae5fbfcdfd0daaece65729fe589980485d0b441c19050dd97b8"} +{"corpus":"compressed_MVT.pbf","level":6,"originalSizeBytes":146224,"compressedSizeBytes":92605,"singleRunMs":3.892541,"sha256":"87d498941e1d7cae4ee47930a9becc40606244a9e9e4c06d0ef21a3434093459"} +{"corpus":"compressed_MVT.pbf","level":7,"originalSizeBytes":146224,"compressedSizeBytes":92610,"singleRunMs":4.227748,"sha256":"5eb82ecc19fbb18428eceb3e508c2dfdbe4a648bc52733e8db70bd223c732f65"} +{"corpus":"compressed_MVT.pbf","level":8,"originalSizeBytes":146224,"compressedSizeBytes":92631,"singleRunMs":4.590240,"sha256":"00be763dadfed2e2d09467a7da0f564897ddc75421fab3bf3150836470ed0a62"} +{"corpus":"compressed_MVT.pbf","level":9,"originalSizeBytes":146224,"compressedSizeBytes":91727,"singleRunMs":8.312991,"sha256":"60d5160deb2f35070d7c0e456dad3a8685eb65495c9e4a1d4372b8b105211c38"} diff --git a/performance/2026-09-09-costspeed/before-jmh.json b/performance/2026-09-09-costspeed/before-jmh.json new file mode 100644 index 0000000..7d236a0 --- /dev/null +++ b/performance/2026-09-09-costspeed/before-jmh.json @@ -0,0 +1,380 @@ +[ + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "simpleText" + }, + "primaryMetric" : { + "score" : 2.7203772831719315E-5, + "scoreError" : 2.4728033893405515E-6, + "scoreConfidence" : [ + 2.4730969442378765E-5, + 2.9676576221059866E-5 + ], + "scorePercentiles" : { + "0.0" : 2.6647192353803117E-5, + "50.0" : 2.6857865060823332E-5, + "90.0" : 2.81695109283461E-5, + "95.0" : 2.81695109283461E-5, + "99.0" : 2.81695109283461E-5, + "99.9" : 2.81695109283461E-5, + "99.99" : 2.81695109283461E-5, + "99.999" : 2.81695109283461E-5, + "99.9999" : 2.81695109283461E-5, + "100.0" : 2.81695109283461E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.81695109283461E-5, + 2.679433043990784E-5, + 2.6857865060823332E-5, + 2.7549965375716175E-5, + 2.6647192353803117E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "text" + }, + "primaryMetric" : { + "score" : 0.19223283826666665, + "scoreError" : 0.004608719940206378, + "scoreConfidence" : [ + 0.18762411832646028, + 0.19684155820687302 + ], + "scorePercentiles" : { + "0.0" : 0.19101506583333333, + "50.0" : 0.1922419345, + "90.0" : 0.19371265383333333, + "95.0" : 0.19371265383333333, + "99.0" : 0.19371265383333333, + "99.9" : 0.19371265383333333, + "99.99" : 0.19371265383333333, + "99.999" : 0.19371265383333333, + "99.9999" : 0.19371265383333333, + "100.0" : 0.19371265383333333 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.19101506583333333, + 0.1910922, + 0.1922419345, + 0.19310233716666667, + 0.19371265383333333 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "model3D" + }, + "primaryMetric" : { + "score" : 9.687598398050543E-5, + "scoreError" : 4.441203208452849E-6, + "scoreConfidence" : [ + 9.243478077205258E-5, + 1.0131718718895828E-4 + ], + "scorePercentiles" : { + "0.0" : 9.524352980384688E-5, + "50.0" : 9.690634576632436E-5, + "90.0" : 9.838484753098564E-5, + "95.0" : 9.838484753098564E-5, + "99.0" : 9.838484753098564E-5, + "99.9" : 9.838484753098564E-5, + "99.99" : 9.838484753098564E-5, + "99.999" : 9.838484753098564E-5, + "99.9999" : 9.838484753098564E-5, + "100.0" : 9.838484753098564E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 9.524352980384688E-5, + 9.838484753098564E-5, + 9.690634576632436E-5, + 9.735513304136253E-5, + 9.649006376000771E-5 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Rainier.bmp" + }, + "primaryMetric" : { + "score" : 2.551168353, + "scoreError" : 0.5400113148623004, + "scoreConfidence" : [ + 2.0111570381376995, + 3.0911796678623005 + ], + "scorePercentiles" : { + "0.0" : 2.474772922, + "50.0" : 2.500730151, + "90.0" : 2.800922797, + "95.0" : 2.800922797, + "99.0" : 2.800922797, + "99.9" : 2.800922797, + "99.99" : 2.800922797, + "99.999" : 2.800922797, + "99.9999" : 2.800922797, + "100.0" : 2.800922797 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.500730151, + 2.503046614, + 2.474772922, + 2.476369281, + 2.800922797 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Maltese.bmp" + }, + "primaryMetric" : { + "score" : 1.2069042516, + "scoreError" : 0.07625138081262017, + "scoreConfidence" : [ + 1.1306528707873797, + 1.28315563241262 + ], + "scorePercentiles" : { + "0.0" : 1.190969672, + "50.0" : 1.196923624, + "90.0" : 1.234775154, + "95.0" : 1.234775154, + "99.0" : 1.234775154, + "99.9" : 1.234775154, + "99.99" : 1.234775154, + "99.999" : 1.234775154, + "99.9999" : 1.234775154, + "100.0" : 1.234775154 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.220696166, + 1.234775154, + 1.191156642, + 1.196923624, + 1.190969672 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "Sunrise.bmp" + }, + "primaryMetric" : { + "score" : 11.385807222599999, + "scoreError" : 0.6233573844313627, + "scoreConfidence" : [ + 10.762449838168635, + 12.009164607031362 + ], + "scorePercentiles" : { + "0.0" : 11.255930507, + "50.0" : 11.289084607, + "90.0" : 11.570045612, + "95.0" : 11.570045612, + "99.0" : 11.570045612, + "99.9" : 11.570045612, + "99.99" : 11.570045612, + "99.999" : 11.570045612, + "99.9999" : 11.570045612, + "100.0" : 11.570045612 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 11.570045612, + 11.554908951, + 11.289084607, + 11.255930507, + 11.259066436 + ] + ] + }, + "secondaryMetrics" : { + } + }, + { + "jmhVersion" : "1.37", + "benchmark" : "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode" : "avgt", + "threads" : 1, + "forks" : 1, + "jvm" : "/home/rafael/.jdks/jbr-17.0.14/bin/java", + "jvmArgs" : [ + ], + "jdkVersion" : "17.0.14", + "vmName" : "OpenJDK 64-Bit Server VM", + "vmVersion" : "17.0.14+1-b1367.22", + "warmupIterations" : 3, + "warmupTime" : "1 s", + "warmupBatchSize" : 1, + "measurementIterations" : 5, + "measurementTime" : "1 s", + "measurementBatchSize" : 1, + "params" : { + "corpus" : "compressed_MVT.pbf" + }, + "primaryMetric" : { + "score" : 0.009324682879700792, + "scoreError" : 4.5141358132523053E-4, + "scoreConfidence" : [ + 0.008873269298375562, + 0.009776096461026023 + ], + "scorePercentiles" : { + "0.0" : 0.00922847810091743, + "50.0" : 0.009319085546296296, + "90.0" : 0.009516081198113207, + "95.0" : 0.009516081198113207, + "99.0" : 0.009516081198113207, + "99.9" : 0.009516081198113207, + "99.99" : 0.009516081198113207, + "99.999" : 0.009516081198113207, + "99.9999" : 0.009516081198113207, + "100.0" : 0.009516081198113207 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.009516081198113207, + 0.00922847810091743, + 0.009229693256880734, + 0.009330076296296296, + 0.009319085546296296 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-costspeed/before-sizes.jsonl b/performance/2026-09-09-costspeed/before-sizes.jsonl new file mode 100644 index 0000000..6f8562d --- /dev/null +++ b/performance/2026-09-09-costspeed/before-sizes.jsonl @@ -0,0 +1,70 @@ +{"corpus":"simpleText","level":0,"originalSizeBytes":100,"compressedSizeBytes":105,"singleRunMs":19.110286,"sha256":"7a4f86cab2c64d7a755ba6244b34b85122a3d7e629073b34930b3d477585100b"} +{"corpus":"simpleText","level":1,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":11.135421,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":2,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.339809,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":3,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.308436,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":4,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.307787,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":5,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.427485,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":6,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.237088,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":7,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.260698,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":8,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.223319,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":9,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.613511,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"text","level":0,"originalSizeBytes":1232923,"compressedSizeBytes":1233018,"singleRunMs":4.662521,"sha256":"cfab8f8c4f21f3b8b8b3cd60a85b7e1243a5aad2a06fa863e9eec73187488605"} +{"corpus":"text","level":1,"originalSizeBytes":1232923,"compressedSizeBytes":599813,"singleRunMs":54.971864,"sha256":"143d81705ac095d278fb6e1fa3932a500916369bc4596da6885cfe2e7d81f756"} +{"corpus":"text","level":2,"originalSizeBytes":1232923,"compressedSizeBytes":581519,"singleRunMs":34.914962,"sha256":"611557ab65d0c35387dfc6121636fd006ff3a237c3a838835f67e31cc79983ce"} +{"corpus":"text","level":3,"originalSizeBytes":1232923,"compressedSizeBytes":565252,"singleRunMs":35.214232,"sha256":"19a3c8ae4b1f0ed21ed27b0e0bb87c22d0ebf7259406f8d748c3d79c3d4888ee"} +{"corpus":"text","level":4,"originalSizeBytes":1232923,"compressedSizeBytes":531466,"singleRunMs":76.236611,"sha256":"d27df2bc4d16b3c9b193b68a7c72cc4208ed4505c2eaafbfc078fbfb29bdd3e1"} +{"corpus":"text","level":5,"originalSizeBytes":1232923,"compressedSizeBytes":521837,"singleRunMs":62.502913,"sha256":"49036c7d2710a45efdf31f3cb63b002ecffe3f8732566b65cd54997e02788bbd"} +{"corpus":"text","level":6,"originalSizeBytes":1232923,"compressedSizeBytes":506455,"singleRunMs":79.402608,"sha256":"3ba0571fcc563672f279cad303810e537dfc18ce61680207dfcd3e2e91abaf67"} +{"corpus":"text","level":7,"originalSizeBytes":1232923,"compressedSizeBytes":506097,"singleRunMs":76.984695,"sha256":"f7b312a37b78362b74cb5c5b1da94aaadec93a4629b19fc3d5cf5300498b993d"} +{"corpus":"text","level":8,"originalSizeBytes":1232923,"compressedSizeBytes":513489,"singleRunMs":80.517064,"sha256":"0008d4cc1d35364514f380a591ec7c01edc292742c5654a50795008ae3b6989c"} +{"corpus":"text","level":9,"originalSizeBytes":1232923,"compressedSizeBytes":492523,"singleRunMs":226.005639,"sha256":"dc70cee621bd4f3b0773d4001d396384e0eae4fe2eea0289bf3620b80d6670ca"} +{"corpus":"model3D","level":0,"originalSizeBytes":2478,"compressedSizeBytes":2483,"singleRunMs":0.047908,"sha256":"7d1354e385451c35f23c9be4ce28245d554943a2219ff0cf3481d5c0a02a4919"} +{"corpus":"model3D","level":1,"originalSizeBytes":2478,"compressedSizeBytes":2169,"singleRunMs":0.205138,"sha256":"cc762b082d3527b26e531d8f8cd04e17467595b5ef1ea32a541b275663e3ef96"} +{"corpus":"model3D","level":2,"originalSizeBytes":2478,"compressedSizeBytes":2168,"singleRunMs":0.177801,"sha256":"7be0094d5c194b33c4337a5c971d25c3ed4e2c3d1d195a75225130310d911733"} +{"corpus":"model3D","level":3,"originalSizeBytes":2478,"compressedSizeBytes":2166,"singleRunMs":0.189880,"sha256":"fa0c3d7374a90b6f9d7f14095e59ecd375b976cd57423d40e18d26332bf768c6"} +{"corpus":"model3D","level":4,"originalSizeBytes":2478,"compressedSizeBytes":2165,"singleRunMs":0.255062,"sha256":"b8bb6e5b0de2dac94d69e676871bd5538d16c6fc909b4a926a9fb42ca33d4846"} +{"corpus":"model3D","level":5,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":1.035481,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":6,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.328511,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":7,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.277878,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":8,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.172909,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":9,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.453659,"sha256":"450f6437d13a19585d0df05da961baf30023451a17612fd84a683a2f2f450ea7"} +{"corpus":"Rainier.bmp","level":0,"originalSizeBytes":6220854,"compressedSizeBytes":6221329,"singleRunMs":6.518850,"sha256":"acf3201e43c503d2705565195eb3bfc176e674b00bc8eeaf55411409398ffb7e"} +{"corpus":"Rainier.bmp","level":1,"originalSizeBytes":6220854,"compressedSizeBytes":3387685,"singleRunMs":103.339299,"sha256":"d86acee038a3272ef53f6be323c941d63ee7fc64544d489d3e81061ba2cb4296"} +{"corpus":"Rainier.bmp","level":2,"originalSizeBytes":6220854,"compressedSizeBytes":3357387,"singleRunMs":100.642784,"sha256":"cb08babeb442d0a7b5ef341c5114d36a9a40c0e9640c848accd37d151af8a3a6"} +{"corpus":"Rainier.bmp","level":3,"originalSizeBytes":6220854,"compressedSizeBytes":3345679,"singleRunMs":98.115353,"sha256":"3c62f22018cd809c25f3c70a9672872a0a0ec916ad89b7eca944c0415093b7dd"} +{"corpus":"Rainier.bmp","level":4,"originalSizeBytes":6220854,"compressedSizeBytes":3325593,"singleRunMs":100.792821,"sha256":"84cf1da1aa0fd2007e5de90ff81e779e616020cf3548affd456350296f12ce6c"} +{"corpus":"Rainier.bmp","level":5,"originalSizeBytes":6220854,"compressedSizeBytes":3313388,"singleRunMs":107.703654,"sha256":"54a7d786396e86dae90937df6dd8425d69557991ec611265a212ad85037e2b63"} +{"corpus":"Rainier.bmp","level":6,"originalSizeBytes":6220854,"compressedSizeBytes":3283450,"singleRunMs":120.385445,"sha256":"fba9e4496d79c376317229a92a905be4351f5487e3db2a91d2287826db2bc7e3"} +{"corpus":"Rainier.bmp","level":7,"originalSizeBytes":6220854,"compressedSizeBytes":3282047,"singleRunMs":106.943072,"sha256":"50d60b742c7b4bfdde3d0a3a6893995cace792bbad1dd85e475e40c4dc2c0221"} +{"corpus":"Rainier.bmp","level":8,"originalSizeBytes":6220854,"compressedSizeBytes":3274905,"singleRunMs":120.844731,"sha256":"d151041825a26ae58bd43d4dc8425663e8587cbfd23a49bf4023dd74d5a414c6"} +{"corpus":"Rainier.bmp","level":9,"originalSizeBytes":6220854,"compressedSizeBytes":3258570,"singleRunMs":3635.384653,"sha256":"03c9fd76a372debf3b4ded8a5ac7f85a1cdf1f5fb0d263963eecbc52147fdace"} +{"corpus":"Maltese.bmp","level":0,"originalSizeBytes":16427390,"compressedSizeBytes":16428645,"singleRunMs":13.464235,"sha256":"d872a98f975735016f16578b716b5c874f98e85abc101426d1142dd3a5c096d6"} +{"corpus":"Maltese.bmp","level":1,"originalSizeBytes":16427390,"compressedSizeBytes":8344362,"singleRunMs":294.982513,"sha256":"fbb73b9022879442d4e1f1ecb02baa6b1ac77119aafde5151b559e0b417dd98c"} +{"corpus":"Maltese.bmp","level":2,"originalSizeBytes":16427390,"compressedSizeBytes":7762283,"singleRunMs":351.024462,"sha256":"382e0863aa03871829f20b35a7d9f69c29108bbfcca7dd1d0097f782be3f8a2b"} +{"corpus":"Maltese.bmp","level":3,"originalSizeBytes":16427390,"compressedSizeBytes":7494606,"singleRunMs":385.071624,"sha256":"387c7f415e7da413a670c5ec9589ef69e744bf442195d53f60996d04c2d661dc"} +{"corpus":"Maltese.bmp","level":4,"originalSizeBytes":16427390,"compressedSizeBytes":7272625,"singleRunMs":357.776541,"sha256":"799d4909f60c7fa4262539af0c182ecf99fae272ed6b031524cf86ff2cef7693"} +{"corpus":"Maltese.bmp","level":5,"originalSizeBytes":16427390,"compressedSizeBytes":7265831,"singleRunMs":461.037056,"sha256":"d62521d1d682ba1afa24845265fcb768883997c5425775d8630b2feaab128464"} +{"corpus":"Maltese.bmp","level":6,"originalSizeBytes":16427390,"compressedSizeBytes":7158472,"singleRunMs":467.593585,"sha256":"cb10f06b36e0eaf03ebf81b8743a321d751979f5e671deb340405dfa6b8986b1"} +{"corpus":"Maltese.bmp","level":7,"originalSizeBytes":16427390,"compressedSizeBytes":7157735,"singleRunMs":474.172979,"sha256":"9ac4463c11aeaac8cc3ca316115118a45d1cec7fc7807cb6da67b58630de2f6b"} +{"corpus":"Maltese.bmp","level":8,"originalSizeBytes":16427390,"compressedSizeBytes":7125327,"singleRunMs":475.633565,"sha256":"a05331809efe04ca4434c5bfd57592571a22c5d30211715d6e24c3828903c640"} +{"corpus":"Maltese.bmp","level":9,"originalSizeBytes":16427390,"compressedSizeBytes":7034092,"singleRunMs":1313.906325,"sha256":"839db5fb3ea325162ced4ed8675e03aeac77e96099385c08d2c9d7140741d60e"} +{"corpus":"Sunrise.bmp","level":0,"originalSizeBytes":52344054,"compressedSizeBytes":52348049,"singleRunMs":30.229070,"sha256":"4ab78a3e1ba97388ff3dd5e00d9e134bceeb1b5eb3edc7aaf7845c1377fea548"} +{"corpus":"Sunrise.bmp","level":1,"originalSizeBytes":52344054,"compressedSizeBytes":27793016,"singleRunMs":935.440073,"sha256":"7028cd0b1e7d73172e76063b6004aedee371667bca442e8a68ca718f36dac355"} +{"corpus":"Sunrise.bmp","level":2,"originalSizeBytes":52344054,"compressedSizeBytes":27471887,"singleRunMs":1119.619018,"sha256":"38fe2dd9e078be3c88adf86d15cc2da3187ea4c8919a73284f431e68dd9b7392"} +{"corpus":"Sunrise.bmp","level":3,"originalSizeBytes":52344054,"compressedSizeBytes":27404419,"singleRunMs":1214.545204,"sha256":"158c5cb3eb8d7023dc234ec5ae5e4e0d64be93f8c0f2f250bf05da65d5c9aff3"} +{"corpus":"Sunrise.bmp","level":4,"originalSizeBytes":52344054,"compressedSizeBytes":27107867,"singleRunMs":1286.277248,"sha256":"c42c56683342f532ce402a90d066e23d688a19221200648c26ce3b11621cc2e0"} +{"corpus":"Sunrise.bmp","level":5,"originalSizeBytes":52344054,"compressedSizeBytes":27096750,"singleRunMs":1535.950681,"sha256":"734bc825d4f1374115b66c64e1f56edf46c8978185ddaecffd9adc87a2e4c12e"} +{"corpus":"Sunrise.bmp","level":6,"originalSizeBytes":52344054,"compressedSizeBytes":26838825,"singleRunMs":1698.570802,"sha256":"34a1e5b94bf2344b565dc7b11b44f6908bda919a1fea479b2b2e0f557fd26346"} +{"corpus":"Sunrise.bmp","level":7,"originalSizeBytes":52344054,"compressedSizeBytes":26827604,"singleRunMs":1938.962997,"sha256":"cb202e01985166da6621d97ab386edff2eb4274eb8f1237aff36390543dcf18c"} +{"corpus":"Sunrise.bmp","level":8,"originalSizeBytes":52344054,"compressedSizeBytes":26728454,"singleRunMs":2147.760615,"sha256":"7570e8999cbda1a50c9693338f4a11dcf5aed8f6f45ff4cc1def7c3ee945541b"} +{"corpus":"Sunrise.bmp","level":9,"originalSizeBytes":52344054,"compressedSizeBytes":26372269,"singleRunMs":14273.467996,"sha256":"4a6c5eb215fe50a55a4a8c23aefa08c900d0282ef35611dbb9420055869fa986"} +{"corpus":"compressed_MVT.pbf","level":0,"originalSizeBytes":146224,"compressedSizeBytes":146239,"singleRunMs":0.057599,"sha256":"d8239f92d78f0d7fc3e9e9d8557e35365184e7d8c7f432339a8375c422a61c13"} +{"corpus":"compressed_MVT.pbf","level":1,"originalSizeBytes":146224,"compressedSizeBytes":95812,"singleRunMs":2.868651,"sha256":"8e921cc121ff9a262119bd7a2124a36039b95a26a5095349d08ea9b776c0ba34"} +{"corpus":"compressed_MVT.pbf","level":2,"originalSizeBytes":146224,"compressedSizeBytes":94608,"singleRunMs":3.366192,"sha256":"52efa74d70a15df6fa9d67da07da404b7e4628f895f65ddaa94148161762c45c"} +{"corpus":"compressed_MVT.pbf","level":3,"originalSizeBytes":146224,"compressedSizeBytes":94345,"singleRunMs":3.900655,"sha256":"a4090d9493e7e896ce6bc3f1c454e23738aa2e35e5418abb8d98c9f6dafaec94"} +{"corpus":"compressed_MVT.pbf","level":4,"originalSizeBytes":146224,"compressedSizeBytes":93369,"singleRunMs":3.780884,"sha256":"41844dbfb741b35e7e91c17ad039e1439e9601af58a3f70c6a83cac1e5f9491e"} +{"corpus":"compressed_MVT.pbf","level":5,"originalSizeBytes":146224,"compressedSizeBytes":93229,"singleRunMs":4.376360,"sha256":"169dee1b2849bae5fbfcdfd0daaece65729fe589980485d0b441c19050dd97b8"} +{"corpus":"compressed_MVT.pbf","level":6,"originalSizeBytes":146224,"compressedSizeBytes":92605,"singleRunMs":4.516753,"sha256":"87d498941e1d7cae4ee47930a9becc40606244a9e9e4c06d0ef21a3434093459"} +{"corpus":"compressed_MVT.pbf","level":7,"originalSizeBytes":146224,"compressedSizeBytes":92610,"singleRunMs":4.480153,"sha256":"5eb82ecc19fbb18428eceb3e508c2dfdbe4a648bc52733e8db70bd223c732f65"} +{"corpus":"compressed_MVT.pbf","level":8,"originalSizeBytes":146224,"compressedSizeBytes":92631,"singleRunMs":4.948836,"sha256":"00be763dadfed2e2d09467a7da0f564897ddc75421fab3bf3150836470ed0a62"} +{"corpus":"compressed_MVT.pbf","level":9,"originalSizeBytes":146224,"compressedSizeBytes":91727,"singleRunMs":9.722668,"sha256":"60d5160deb2f35070d7c0e456dad3a8685eb65495c9e4a1d4372b8b105211c38"} diff --git a/performance/2026-09-09-costspeed/native_bench.py b/performance/2026-09-09-costspeed/native_bench.py new file mode 100644 index 0000000..7a66ddc --- /dev/null +++ b/performance/2026-09-09-costspeed/native_bench.py @@ -0,0 +1,38 @@ +import json +from pathlib import Path +import subprocess +import sys + +binary = str(Path(sys.argv[1]).resolve()) +directory = Path(sys.argv[2]).resolve() +directory.mkdir(parents=True, exist_ok=True) +config = directory / 'runner.cfg' +config.write_text('\n'.join([ + 'name:ratio', f'reportFile:{directory}/benchmark.json', + 'traceFormat:text', 'reportFormat:json', + 'include:' + (sys.argv[5] if len(sys.argv) > 5 else '.*CompressionBenchmarks.rawDeflateCompression'), + f'warmups:{sys.argv[3] if len(sys.argv) > 3 else 3}', + f'iterations:{sys.argv[4] if len(sys.argv) > 4 else 5}', + 'iterationTime:1', 'iterationTimeUnit:sec', + 'outputTimeUnit:sec', 'mode:avgt', +])) + +def run(action, *args): + subprocess.run([binary, str(config), action, str(directory / 'trace.xml'), *map(str, args)], check=True) + +run('--list', directory) +configs = sorted(directory.glob('*.txt')) +expected = 14 if len(sys.argv) > 5 and 'Decompression' in sys.argv[5] else 7 +assert len(configs) == expected, configs +results = [] +for benchmark_config in configs: + samples = benchmark_config.with_suffix('.samples') + run('--benchmark', benchmark_config, samples) + values = samples.read_text().strip() + assert values and 'null' not in values + results.append(f'{benchmark_config}: {values}') +combined = directory / 'results' +combined.write_text('\n'.join(results)) +run('--store-results', combined) +rows = json.loads((directory / 'benchmark.json').read_text()) +assert len(rows) == expected