diff --git a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt index d37b6dc..7422afd 100644 --- a/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt +++ b/kflate/src/commonMain/kotlin/com/rafambn/kflate/algorithm/FlateAlgorithms.kt @@ -452,12 +452,13 @@ internal fun deflate( } val levelOptions = DEFLATE_LEVELS[level] val mask = (1 shl hashBits) - 1 - val prev = state.prev ?: ShortArray(MATCH_DISTANCE_MASK + 1) + val prevSize = if (isLastBlock) minOf(MATCH_DISTANCE_MASK + 1, dataSize) else MATCH_DISTANCE_MASK + 1 + val prev = state.prev ?: ShortArray(prevSize) val head = state.head ?: ShortArray(mask + 1) val baseShift1 = ceil(hashBits / 3.0).toInt() val baseShift2 = 2 * baseShift1 - val symbols = IntArray(65536) + val symbols = IntArray(minOf(65536, dataSize)) val literalFrequencies = IntArray(288) val distanceFrequencies = IntArray(32) var matchCount = 0 diff --git a/kflate/src/jvmTest/kotlin/DeflateScratchSizingTest.kt b/kflate/src/jvmTest/kotlin/DeflateScratchSizingTest.kt new file mode 100644 index 0000000..aee1a53 --- /dev/null +++ b/kflate/src/jvmTest/kotlin/DeflateScratchSizingTest.kt @@ -0,0 +1,64 @@ +package com.rafambn.kflate + +import com.rafambn.kflate.algorithm.MATCH_DISTANCE_MASK +import com.rafambn.kflate.algorithm.deflate +import com.rafambn.kflate.compression.Raw as CompressionRaw +import com.rafambn.kflate.decompression.Raw as DecompressionRaw +import com.rafambn.kflate.streaming.DeflateState +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertSame + +class DeflateScratchSizingTest { + + @Test + fun tinyAndEmptyFinalInputsRoundTripAtEveryCompressionLevel() { + val inputs = listOf(ByteArray(0), byteArrayOf(1, 2, 3)) + + for (level in 1..9) { + for (input in inputs) { + val compressed = KFlate.compress(input, CompressionRaw(level = level)) + assertContentEquals( + input, + KFlate.decompress(compressed, DecompressionRaw()), + "level $level", + ) + } + } + } + + @Test + fun finalDictionaryInputRoundTripsWithSmallScratchBuffers() { + val dictionary = "shared prefix ".repeat(8).encodeToByteArray() + val input = "shared prefix payload".encodeToByteArray() + + for (level in listOf(1, 6, 9)) { + val compressed = KFlate.compress( + input, + CompressionRaw(level = level, dictionary = dictionary), + ) + assertContentEquals( + input, + KFlate.decompress(compressed, DecompressionRaw(dictionary = dictionary)), + "level $level", + ) + } + } + + @Test + fun nonFinalStateRetainsTheFullHistoryRingAndReusesItOnFinalCall() { + val state = DeflateState(isLastChunk = false) + val input = byteArrayOf(1, 2, 3) + + deflate(input, level = 6, hashBits = 12, prefixSize = 0, postfixSize = 0, state = state) + + val history = state.prev + assertEquals(MATCH_DISTANCE_MASK + 1, history!!.size) + + state.isLastChunk = true + deflate(input, level = 6, hashBits = 12, prefixSize = 0, postfixSize = 0, state = state) + + assertSame(history, state.prev) + } +} diff --git a/performance/2026-09-09-scratch/RESULTS.md b/performance/2026-09-09-scratch/RESULTS.md new file mode 100644 index 0000000..5b10852 --- /dev/null +++ b/performance/2026-09-09-scratch/RESULTS.md @@ -0,0 +1,91 @@ +# Size deflate scratch buffers to short inputs + +Bound the token array by input length and bound a new final-call history ring by input length. Non-final calls retain the full history ring. This preserves encoded bytes while cutting unnecessary allocation for short inputs. Large fixtures retain the previous array sizes, so their timing variation should not be read as an allocation benefit. + +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 6 + +| Corpus | Before ms | After ms | Before/after speedup | Saved Kompress/after speedup | +| --- | ---: | ---: | ---: | ---: | +| simpleText | 0.0279 | 0.0047 | 5.988x | 0.914x | +| text | 60.4159 | 87.8322 | 0.688x | 0.593x | +| model3D | 0.0669 | 0.0512 | 1.306x | 0.590x | +| Rainier.bmp | 108.3289 | 113.5118 | 0.954x | 0.909x | +| Maltese.bmp | 477.9739 | 471.3553 | 1.014x | 0.802x | +| Sunrise.bmp | 1673.0244 | 1564.5829 | 1.069x | 0.791x | +| compressed_MVT.pbf | 4.5006 | 4.3388 | 1.037x | 0.900x | + + +## Validation and reproduction + +Linux JVM tests passed, including empty/tiny inputs, dictionaries, and final/non-final history reuse. All 70 corpus/level cases passed both JDK and KFlate decoding and matched baseline SHA-256 hashes. All seven level 6 JMH cases completed. No Native or Wasm timing claim is made. + +Tracked source diff SHA-256: `9dbba52ef9393e557e4b3c8d88977375c3b769eac10db4e780cf54895c77e660`. 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. + +## Three-fork confirmation + +Repeated the baseline and scratch variant on simpleText, text and model3D with three independent JVM forks each, retaining three one-second warmups and five one-second measurements per fork. Small-fixture gains reproduced. Text varies between forks even in the unchanged baseline and does not establish a causal slowdown. + +| Corpus | Baseline ms | Scratch ms | Speedup | +| --- | ---: | ---: | ---: | +| simpleText | 0.02697 | 0.00442 | 6.106x | +| text | 69.93305 | 77.29299 | 0.905x | +| model3D | 0.06770 | 0.05211 | 1.299x | + +Linux `:kflate:koverVerifyJvm` passed with 100% instruction and branch coverage. diff --git a/performance/2026-09-09-scratch/RatioSweep.java b/performance/2026-09-09-scratch/RatioSweep.java new file mode 100644 index 0000000..2d3bf10 --- /dev/null +++ b/performance/2026-09-09-scratch/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-scratch/after-jmh.json b/performance/2026-09-09-scratch/after-jmh.json new file mode 100644 index 0000000..720e541 --- /dev/null +++ b/performance/2026-09-09-scratch/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" : 4.6528074472636426E-6, + "scoreError" : 7.208520709544718E-7, + "scoreConfidence" : [ + 3.931955376309171E-6, + 5.373659518218114E-6 + ], + "scorePercentiles" : { + "0.0" : 4.318246291403309E-6, + "50.0" : 4.735575144891852E-6, + "90.0" : 4.747931599261303E-6, + "95.0" : 4.747931599261303E-6, + "99.0" : 4.747931599261303E-6, + "99.9" : 4.747931599261303E-6, + "99.99" : 4.747931599261303E-6, + "99.999" : 4.747931599261303E-6, + "99.9999" : 4.747931599261303E-6, + "100.0" : 4.747931599261303E-6 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 4.318246291403309E-6, + 4.724939499593704E-6, + 4.737344701168045E-6, + 4.747931599261303E-6, + 4.735575144891852E-6 + ] + ] + }, + "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.08783218073333335, + "scoreError" : 0.0037410675792635627, + "scoreConfidence" : [ + 0.08409111315406978, + 0.09157324831259692 + ], + "scorePercentiles" : { + "0.0" : 0.08692479816666666, + "50.0" : 0.08776788991666666, + "90.0" : 0.0893844335, + "95.0" : 0.0893844335, + "99.0" : 0.0893844335, + "99.9" : 0.0893844335, + "99.99" : 0.0893844335, + "99.999" : 0.0893844335, + "99.9999" : 0.0893844335, + "100.0" : 0.0893844335 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.0871117255, + 0.08692479816666666, + 0.08776788991666666, + 0.08797205658333333, + 0.0893844335 + ] + ] + }, + "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" : 5.120497769633349E-5, + "scoreError" : 1.1573796488888427E-5, + "scoreConfidence" : [ + 3.9631181207445066E-5, + 6.277877418522191E-5 + ], + "scorePercentiles" : { + "0.0" : 4.620373718007946E-5, + "50.0" : 5.2031976015816037E-5, + "90.0" : 5.3610228678638434E-5, + "95.0" : 5.3610228678638434E-5, + "99.0" : 5.3610228678638434E-5, + "99.9" : 5.3610228678638434E-5, + "99.99" : 5.3610228678638434E-5, + "99.999" : 5.3610228678638434E-5, + "99.9999" : 5.3610228678638434E-5, + "100.0" : 5.3610228678638434E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 5.084645772535462E-5, + 4.620373718007946E-5, + 5.2031976015816037E-5, + 5.3610228678638434E-5, + 5.3332488881778915E-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" : 0.11351183908888889, + "scoreError" : 0.0012184183401235053, + "scoreConfidence" : [ + 0.11229342074876537, + 0.1147302574290124 + ], + "scorePercentiles" : { + "0.0" : 0.11314982811111111, + "50.0" : 0.11352351744444444, + "90.0" : 0.11400524444444445, + "95.0" : 0.11400524444444445, + "99.0" : 0.11400524444444445, + "99.9" : 0.11400524444444445, + "99.99" : 0.11400524444444445, + "99.999" : 0.11400524444444445, + "99.9999" : 0.11400524444444445, + "100.0" : 0.11400524444444445 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.11400524444444445, + 0.11335194888888889, + 0.11352865655555555, + 0.11352351744444444, + 0.11314982811111111 + ] + ] + }, + "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" : 0.4713552854666666, + "scoreError" : 0.0742145489103187, + "scoreConfidence" : [ + 0.3971407365563479, + 0.5455698343769853 + ], + "scorePercentiles" : { + "0.0" : 0.44851220766666666, + "50.0" : 0.4827959133333333, + "90.0" : 0.4882138183333333, + "95.0" : 0.4882138183333333, + "99.0" : 0.4882138183333333, + "99.9" : 0.4882138183333333, + "99.99" : 0.4882138183333333, + "99.999" : 0.4882138183333333, + "99.9999" : 0.4882138183333333, + "100.0" : 0.4882138183333333 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.4882138183333333, + 0.44851220766666666, + 0.4827959133333333, + 0.45228636, + 0.484968128 + ] + ] + }, + "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" : 1.5645828724, + "scoreError" : 0.3134960787261256, + "scoreConfidence" : [ + 1.2510867936738743, + 1.8780789511261256 + ], + "scorePercentiles" : { + "0.0" : 1.47175602, + "50.0" : 1.613623196, + "90.0" : 1.629856384, + "95.0" : 1.629856384, + "99.0" : 1.629856384, + "99.9" : 1.629856384, + "99.99" : 1.629856384, + "99.999" : 1.629856384, + "99.9999" : 1.629856384, + "100.0" : 1.629856384 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.613623196, + 1.47175602, + 1.479678537, + 1.629856384, + 1.628000225 + ] + ] + }, + "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.004338801835616143, + "scoreError" : 4.407901095738381E-4, + "scoreConfidence" : [ + 0.0038980117260423047, + 0.004779591945189981 + ], + "scorePercentiles" : { + "0.0" : 0.004134238400826446, + "50.0" : 0.004385195091703057, + "90.0" : 0.004397065372807017, + "95.0" : 0.004397065372807017, + "99.0" : 0.004397065372807017, + "99.9" : 0.004397065372807017, + "99.99" : 0.004397065372807017, + "99.999" : 0.004397065372807017, + "99.9999" : 0.004397065372807017, + "100.0" : 0.004397065372807017 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.004134238400826446, + 0.004392712618421052, + 0.004385195091703057, + 0.004397065372807017, + 0.004384797694323144 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-scratch/after-recheck-jmh.json b/performance/2026-09-09-scratch/after-recheck-jmh.json new file mode 100644 index 0000000..c46e441 --- /dev/null +++ b/performance/2026-09-09-scratch/after-recheck-jmh.json @@ -0,0 +1,200 @@ +[ + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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": 4.4163393812673626e-06, + "scoreError": 2.1132507432802195e-07, + "scoreConfidence": [ + 4.2050143069393405e-06, + 4.627664455595385e-06 + ], + "scorePercentiles": { + "0.0": 4.094891641728722e-06, + "50.0": 4.4552215040735515e-06, + "90.0": 4.623315835090486e-06, + "95.0": 4.631542907423702e-06, + "99.0": 4.631542907423702e-06, + "99.9": 4.631542907423702e-06, + "99.99": 4.631542907423702e-06, + "99.999": 4.631542907423702e-06, + "99.9999": 4.631542907423702e-06, + "100.0": 4.631542907423702e-06 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 4.459519504897961e-06, + 4.289940889594235e-06, + 4.1069613802109e-06, + 4.094891641728722e-06, + 4.374065833092795e-06 + ], + [ + 4.6178311202016755e-06, + 4.605166414969244e-06, + 4.6146501912544355e-06, + 4.594416263964427e-06, + 4.6045716995377785e-06 + ], + [ + 4.188056206402774e-06, + 4.4552215040735515e-06, + 4.631542907423702e-06, + 4.405447173559689e-06, + 4.20280798809854e-06 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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.07729299204781134, + "scoreError": 0.009051741738292056, + "scoreConfidence": [ + 0.06824125030951929, + 0.0863447337861034 + ], + "scorePercentiles": { + "0.0": 0.0665859024375, + "50.0": 0.07690125542857143, + "90.0": 0.08745370645, + "95.0": 0.087544548, + "99.0": 0.087544548, + "99.9": 0.087544548, + "99.99": 0.087544548, + "99.999": 0.087544548, + "99.9999": 0.087544548, + "100.0": 0.087544548 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 0.07665074714285715, + 0.07690125542857143, + 0.07689221014285715, + 0.07711449315384615, + 0.07880538846153846 + ], + [ + 0.08729500725, + 0.08691030916666667, + 0.087544548, + 0.08736443058333333, + 0.08739314541666666 + ], + [ + 0.0665859024375, + 0.0675022646, + 0.0675313882, + 0.06762331366666667, + 0.06728047706666666 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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": 5.211151643179606e-05, + "scoreError": 2.923251169998041e-07, + "scoreConfidence": [ + 5.181919131479625e-05, + 5.2403841548795865e-05 + ], + "scorePercentiles": { + "0.0": 5.171944353087186e-05, + "50.0": 5.2103543105693596e-05, + "90.0": 5.2462746429803316e-05, + "95.0": 5.248045826118894e-05, + "99.0": 5.248045826118894e-05, + "99.9": 5.248045826118894e-05, + "99.99": 5.248045826118894e-05, + "99.999": 5.248045826118894e-05, + "99.9999": 5.248045826118894e-05, + "100.0": 5.248045826118894e-05 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 5.248045826118894e-05, + 5.243114445958696e-05, + 5.237494967532468e-05, + 5.230947821766644e-05, + 5.238457235636097e-05 + ], + [ + 5.24509385422129e-05, + 5.2153162799186526e-05, + 5.196565468336017e-05, + 5.183748092868988e-05, + 5.192306816176089e-05 + ], + [ + 5.2103543105693596e-05, + 5.1873758338088074e-05, + 5.1905235520033216e-05, + 5.1759857896915756e-05, + 5.171944353087186e-05 + ] + ] + }, + "secondaryMetrics": {} + } +] diff --git a/performance/2026-09-09-scratch/after-sizes.jsonl b/performance/2026-09-09-scratch/after-sizes.jsonl new file mode 100644 index 0000000..a729ff6 --- /dev/null +++ b/performance/2026-09-09-scratch/after-sizes.jsonl @@ -0,0 +1,70 @@ +{"corpus":"simpleText","level":0,"originalSizeBytes":100,"compressedSizeBytes":105,"singleRunMs":18.149860,"sha256":"7a4f86cab2c64d7a755ba6244b34b85122a3d7e629073b34930b3d477585100b"} +{"corpus":"simpleText","level":1,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":10.120764,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":2,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.212389,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":3,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.175930,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":4,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.158443,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":5,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.143073,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":6,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.161261,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":7,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.128482,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":8,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.122783,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"simpleText","level":9,"originalSizeBytes":100,"compressedSizeBytes":84,"singleRunMs":0.407840,"sha256":"dfc6c55d533c49b70bb5f358f19c146ad3443a985e6f76144b1ee4e16286e499"} +{"corpus":"text","level":0,"originalSizeBytes":1232923,"compressedSizeBytes":1233018,"singleRunMs":4.335785,"sha256":"cfab8f8c4f21f3b8b8b3cd60a85b7e1243a5aad2a06fa863e9eec73187488605"} +{"corpus":"text","level":1,"originalSizeBytes":1232923,"compressedSizeBytes":599813,"singleRunMs":48.887539,"sha256":"143d81705ac095d278fb6e1fa3932a500916369bc4596da6885cfe2e7d81f756"} +{"corpus":"text","level":2,"originalSizeBytes":1232923,"compressedSizeBytes":581519,"singleRunMs":31.690423,"sha256":"611557ab65d0c35387dfc6121636fd006ff3a237c3a838835f67e31cc79983ce"} +{"corpus":"text","level":3,"originalSizeBytes":1232923,"compressedSizeBytes":565252,"singleRunMs":33.441399,"sha256":"19a3c8ae4b1f0ed21ed27b0e0bb87c22d0ebf7259406f8d748c3d79c3d4888ee"} +{"corpus":"text","level":4,"originalSizeBytes":1232923,"compressedSizeBytes":531466,"singleRunMs":48.397429,"sha256":"d27df2bc4d16b3c9b193b68a7c72cc4208ed4505c2eaafbfc078fbfb29bdd3e1"} +{"corpus":"text","level":5,"originalSizeBytes":1232923,"compressedSizeBytes":521837,"singleRunMs":58.275184,"sha256":"49036c7d2710a45efdf31f3cb63b002ecffe3f8732566b65cd54997e02788bbd"} +{"corpus":"text","level":6,"originalSizeBytes":1232923,"compressedSizeBytes":506455,"singleRunMs":68.101786,"sha256":"3ba0571fcc563672f279cad303810e537dfc18ce61680207dfcd3e2e91abaf67"} +{"corpus":"text","level":7,"originalSizeBytes":1232923,"compressedSizeBytes":506097,"singleRunMs":70.821483,"sha256":"f7b312a37b78362b74cb5c5b1da94aaadec93a4629b19fc3d5cf5300498b993d"} +{"corpus":"text","level":8,"originalSizeBytes":1232923,"compressedSizeBytes":513489,"singleRunMs":72.624438,"sha256":"0008d4cc1d35364514f380a591ec7c01edc292742c5654a50795008ae3b6989c"} +{"corpus":"text","level":9,"originalSizeBytes":1232923,"compressedSizeBytes":492523,"singleRunMs":201.765062,"sha256":"dc70cee621bd4f3b0773d4001d396384e0eae4fe2eea0289bf3620b80d6670ca"} +{"corpus":"model3D","level":0,"originalSizeBytes":2478,"compressedSizeBytes":2483,"singleRunMs":0.050409,"sha256":"7d1354e385451c35f23c9be4ce28245d554943a2219ff0cf3481d5c0a02a4919"} +{"corpus":"model3D","level":1,"originalSizeBytes":2478,"compressedSizeBytes":2169,"singleRunMs":0.149438,"sha256":"cc762b082d3527b26e531d8f8cd04e17467595b5ef1ea32a541b275663e3ef96"} +{"corpus":"model3D","level":2,"originalSizeBytes":2478,"compressedSizeBytes":2168,"singleRunMs":0.113263,"sha256":"7be0094d5c194b33c4337a5c971d25c3ed4e2c3d1d195a75225130310d911733"} +{"corpus":"model3D","level":3,"originalSizeBytes":2478,"compressedSizeBytes":2166,"singleRunMs":0.110052,"sha256":"fa0c3d7374a90b6f9d7f14095e59ecd375b976cd57423d40e18d26332bf768c6"} +{"corpus":"model3D","level":4,"originalSizeBytes":2478,"compressedSizeBytes":2165,"singleRunMs":0.104894,"sha256":"b8bb6e5b0de2dac94d69e676871bd5538d16c6fc909b4a926a9fb42ca33d4846"} +{"corpus":"model3D","level":5,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.500861,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":6,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.260249,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":7,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.246496,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":8,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.124881,"sha256":"4b0cd916546275b9ae57fab7c6d88d94ed1e669669b30c158eb4c06e85e8f0ad"} +{"corpus":"model3D","level":9,"originalSizeBytes":2478,"compressedSizeBytes":2153,"singleRunMs":0.391374,"sha256":"450f6437d13a19585d0df05da961baf30023451a17612fd84a683a2f2f450ea7"} +{"corpus":"Rainier.bmp","level":0,"originalSizeBytes":6220854,"compressedSizeBytes":6221329,"singleRunMs":4.479453,"sha256":"acf3201e43c503d2705565195eb3bfc176e674b00bc8eeaf55411409398ffb7e"} +{"corpus":"Rainier.bmp","level":1,"originalSizeBytes":6220854,"compressedSizeBytes":3387685,"singleRunMs":115.689091,"sha256":"d86acee038a3272ef53f6be323c941d63ee7fc64544d489d3e81061ba2cb4296"} +{"corpus":"Rainier.bmp","level":2,"originalSizeBytes":6220854,"compressedSizeBytes":3357387,"singleRunMs":96.714012,"sha256":"cb08babeb442d0a7b5ef341c5114d36a9a40c0e9640c848accd37d151af8a3a6"} +{"corpus":"Rainier.bmp","level":3,"originalSizeBytes":6220854,"compressedSizeBytes":3345679,"singleRunMs":93.071935,"sha256":"3c62f22018cd809c25f3c70a9672872a0a0ec916ad89b7eca944c0415093b7dd"} +{"corpus":"Rainier.bmp","level":4,"originalSizeBytes":6220854,"compressedSizeBytes":3325593,"singleRunMs":88.261916,"sha256":"84cf1da1aa0fd2007e5de90ff81e779e616020cf3548affd456350296f12ce6c"} +{"corpus":"Rainier.bmp","level":5,"originalSizeBytes":6220854,"compressedSizeBytes":3313388,"singleRunMs":95.019163,"sha256":"54a7d786396e86dae90937df6dd8425d69557991ec611265a212ad85037e2b63"} +{"corpus":"Rainier.bmp","level":6,"originalSizeBytes":6220854,"compressedSizeBytes":3283450,"singleRunMs":104.807207,"sha256":"fba9e4496d79c376317229a92a905be4351f5487e3db2a91d2287826db2bc7e3"} +{"corpus":"Rainier.bmp","level":7,"originalSizeBytes":6220854,"compressedSizeBytes":3282047,"singleRunMs":110.626824,"sha256":"50d60b742c7b4bfdde3d0a3a6893995cace792bbad1dd85e475e40c4dc2c0221"} +{"corpus":"Rainier.bmp","level":8,"originalSizeBytes":6220854,"compressedSizeBytes":3274905,"singleRunMs":121.491332,"sha256":"d151041825a26ae58bd43d4dc8425663e8587cbfd23a49bf4023dd74d5a414c6"} +{"corpus":"Rainier.bmp","level":9,"originalSizeBytes":6220854,"compressedSizeBytes":3258570,"singleRunMs":3530.023215,"sha256":"03c9fd76a372debf3b4ded8a5ac7f85a1cdf1f5fb0d263963eecbc52147fdace"} +{"corpus":"Maltese.bmp","level":0,"originalSizeBytes":16427390,"compressedSizeBytes":16428645,"singleRunMs":7.436131,"sha256":"d872a98f975735016f16578b716b5c874f98e85abc101426d1142dd3a5c096d6"} +{"corpus":"Maltese.bmp","level":1,"originalSizeBytes":16427390,"compressedSizeBytes":8344362,"singleRunMs":260.186253,"sha256":"fbb73b9022879442d4e1f1ecb02baa6b1ac77119aafde5151b559e0b417dd98c"} +{"corpus":"Maltese.bmp","level":2,"originalSizeBytes":16427390,"compressedSizeBytes":7762283,"singleRunMs":300.566855,"sha256":"382e0863aa03871829f20b35a7d9f69c29108bbfcca7dd1d0097f782be3f8a2b"} +{"corpus":"Maltese.bmp","level":3,"originalSizeBytes":16427390,"compressedSizeBytes":7494606,"singleRunMs":339.717054,"sha256":"387c7f415e7da413a670c5ec9589ef69e744bf442195d53f60996d04c2d661dc"} +{"corpus":"Maltese.bmp","level":4,"originalSizeBytes":16427390,"compressedSizeBytes":7272625,"singleRunMs":356.715289,"sha256":"799d4909f60c7fa4262539af0c182ecf99fae272ed6b031524cf86ff2cef7693"} +{"corpus":"Maltese.bmp","level":5,"originalSizeBytes":16427390,"compressedSizeBytes":7265831,"singleRunMs":459.876030,"sha256":"d62521d1d682ba1afa24845265fcb768883997c5425775d8630b2feaab128464"} +{"corpus":"Maltese.bmp","level":6,"originalSizeBytes":16427390,"compressedSizeBytes":7158472,"singleRunMs":469.820541,"sha256":"cb10f06b36e0eaf03ebf81b8743a321d751979f5e671deb340405dfa6b8986b1"} +{"corpus":"Maltese.bmp","level":7,"originalSizeBytes":16427390,"compressedSizeBytes":7157735,"singleRunMs":522.356136,"sha256":"9ac4463c11aeaac8cc3ca316115118a45d1cec7fc7807cb6da67b58630de2f6b"} +{"corpus":"Maltese.bmp","level":8,"originalSizeBytes":16427390,"compressedSizeBytes":7125327,"singleRunMs":536.814609,"sha256":"a05331809efe04ca4434c5bfd57592571a22c5d30211715d6e24c3828903c640"} +{"corpus":"Maltese.bmp","level":9,"originalSizeBytes":16427390,"compressedSizeBytes":7034092,"singleRunMs":1504.537065,"sha256":"839db5fb3ea325162ced4ed8675e03aeac77e96099385c08d2c9d7140741d60e"} +{"corpus":"Sunrise.bmp","level":0,"originalSizeBytes":52344054,"compressedSizeBytes":52348049,"singleRunMs":32.940087,"sha256":"4ab78a3e1ba97388ff3dd5e00d9e134bceeb1b5eb3edc7aaf7845c1377fea548"} +{"corpus":"Sunrise.bmp","level":1,"originalSizeBytes":52344054,"compressedSizeBytes":27793016,"singleRunMs":932.158036,"sha256":"7028cd0b1e7d73172e76063b6004aedee371667bca442e8a68ca718f36dac355"} +{"corpus":"Sunrise.bmp","level":2,"originalSizeBytes":52344054,"compressedSizeBytes":27471887,"singleRunMs":1125.847387,"sha256":"38fe2dd9e078be3c88adf86d15cc2da3187ea4c8919a73284f431e68dd9b7392"} +{"corpus":"Sunrise.bmp","level":3,"originalSizeBytes":52344054,"compressedSizeBytes":27404419,"singleRunMs":1206.873408,"sha256":"158c5cb3eb8d7023dc234ec5ae5e4e0d64be93f8c0f2f250bf05da65d5c9aff3"} +{"corpus":"Sunrise.bmp","level":4,"originalSizeBytes":52344054,"compressedSizeBytes":27107867,"singleRunMs":1129.226232,"sha256":"c42c56683342f532ce402a90d066e23d688a19221200648c26ce3b11621cc2e0"} +{"corpus":"Sunrise.bmp","level":5,"originalSizeBytes":52344054,"compressedSizeBytes":27096750,"singleRunMs":1361.710805,"sha256":"734bc825d4f1374115b66c64e1f56edf46c8978185ddaecffd9adc87a2e4c12e"} +{"corpus":"Sunrise.bmp","level":6,"originalSizeBytes":52344054,"compressedSizeBytes":26838825,"singleRunMs":1490.439967,"sha256":"34a1e5b94bf2344b565dc7b11b44f6908bda919a1fea479b2b2e0f557fd26346"} +{"corpus":"Sunrise.bmp","level":7,"originalSizeBytes":52344054,"compressedSizeBytes":26827604,"singleRunMs":1714.504257,"sha256":"cb202e01985166da6621d97ab386edff2eb4274eb8f1237aff36390543dcf18c"} +{"corpus":"Sunrise.bmp","level":8,"originalSizeBytes":52344054,"compressedSizeBytes":26728454,"singleRunMs":1895.688632,"sha256":"7570e8999cbda1a50c9693338f4a11dcf5aed8f6f45ff4cc1def7c3ee945541b"} +{"corpus":"Sunrise.bmp","level":9,"originalSizeBytes":52344054,"compressedSizeBytes":26372269,"singleRunMs":12287.936189,"sha256":"4a6c5eb215fe50a55a4a8c23aefa08c900d0282ef35611dbb9420055869fa986"} +{"corpus":"compressed_MVT.pbf","level":0,"originalSizeBytes":146224,"compressedSizeBytes":146239,"singleRunMs":0.055759,"sha256":"d8239f92d78f0d7fc3e9e9d8557e35365184e7d8c7f432339a8375c422a61c13"} +{"corpus":"compressed_MVT.pbf","level":1,"originalSizeBytes":146224,"compressedSizeBytes":95812,"singleRunMs":2.532253,"sha256":"8e921cc121ff9a262119bd7a2124a36039b95a26a5095349d08ea9b776c0ba34"} +{"corpus":"compressed_MVT.pbf","level":2,"originalSizeBytes":146224,"compressedSizeBytes":94608,"singleRunMs":2.919951,"sha256":"52efa74d70a15df6fa9d67da07da404b7e4628f895f65ddaa94148161762c45c"} +{"corpus":"compressed_MVT.pbf","level":3,"originalSizeBytes":146224,"compressedSizeBytes":94345,"singleRunMs":3.198994,"sha256":"a4090d9493e7e896ce6bc3f1c454e23738aa2e35e5418abb8d98c9f6dafaec94"} +{"corpus":"compressed_MVT.pbf","level":4,"originalSizeBytes":146224,"compressedSizeBytes":93369,"singleRunMs":3.333950,"sha256":"41844dbfb741b35e7e91c17ad039e1439e9601af58a3f70c6a83cac1e5f9491e"} +{"corpus":"compressed_MVT.pbf","level":5,"originalSizeBytes":146224,"compressedSizeBytes":93229,"singleRunMs":3.793804,"sha256":"169dee1b2849bae5fbfcdfd0daaece65729fe589980485d0b441c19050dd97b8"} +{"corpus":"compressed_MVT.pbf","level":6,"originalSizeBytes":146224,"compressedSizeBytes":92605,"singleRunMs":4.099997,"sha256":"87d498941e1d7cae4ee47930a9becc40606244a9e9e4c06d0ef21a3434093459"} +{"corpus":"compressed_MVT.pbf","level":7,"originalSizeBytes":146224,"compressedSizeBytes":92610,"singleRunMs":4.037628,"sha256":"5eb82ecc19fbb18428eceb3e508c2dfdbe4a648bc52733e8db70bd223c732f65"} +{"corpus":"compressed_MVT.pbf","level":8,"originalSizeBytes":146224,"compressedSizeBytes":92631,"singleRunMs":4.512828,"sha256":"00be763dadfed2e2d09467a7da0f564897ddc75421fab3bf3150836470ed0a62"} +{"corpus":"compressed_MVT.pbf","level":9,"originalSizeBytes":146224,"compressedSizeBytes":91727,"singleRunMs":8.712742,"sha256":"60d5160deb2f35070d7c0e456dad3a8685eb65495c9e4a1d4372b8b105211c38"} diff --git a/performance/2026-09-09-scratch/before-jmh.json b/performance/2026-09-09-scratch/before-jmh.json new file mode 100644 index 0000000..7615387 --- /dev/null +++ b/performance/2026-09-09-scratch/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.7861177968744074E-5, + "scoreError" : 2.911922900505013E-6, + "scoreConfidence" : [ + 2.494925506823906E-5, + 3.077310086924909E-5 + ], + "scorePercentiles" : { + "0.0" : 2.6910095086907388E-5, + "50.0" : 2.7661463602168382E-5, + "90.0" : 2.881266400668357E-5, + "95.0" : 2.881266400668357E-5, + "99.0" : 2.881266400668357E-5, + "99.9" : 2.881266400668357E-5, + "99.99" : 2.881266400668357E-5, + "99.999" : 2.881266400668357E-5, + "99.9999" : 2.881266400668357E-5, + "100.0" : 2.881266400668357E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 2.7661463602168382E-5, + 2.881266400668357E-5, + 2.8417902909586862E-5, + 2.6910095086907388E-5, + 2.750376423837417E-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.06041590843529412, + "scoreError" : 6.056857237638408E-4, + "scoreConfidence" : [ + 0.059810222711530275, + 0.06102159415905796 + ], + "scorePercentiles" : { + "0.0" : 0.06014622823529412, + "50.0" : 0.060454885588235294, + "90.0" : 0.060547520647058824, + "95.0" : 0.060547520647058824, + "99.0" : 0.060547520647058824, + "99.9" : 0.060547520647058824, + "99.99" : 0.060547520647058824, + "99.999" : 0.060547520647058824, + "99.9999" : 0.060547520647058824, + "100.0" : 0.060547520647058824 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.06014622823529412, + 0.060430179647058824, + 0.060454885588235294, + 0.060500728058823526, + 0.060547520647058824 + ] + ] + }, + "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" : 6.686024726012978E-5, + "scoreError" : 4.189482418431631E-6, + "scoreConfidence" : [ + 6.267076484169815E-5, + 7.10497296785614E-5 + ], + "scorePercentiles" : { + "0.0" : 6.499838984923317E-5, + "50.0" : 6.746798745277928E-5, + "90.0" : 6.757348270503986E-5, + "95.0" : 6.757348270503986E-5, + "99.0" : 6.757348270503986E-5, + "99.9" : 6.757348270503986E-5, + "99.99" : 6.757348270503986E-5, + "99.999" : 6.757348270503986E-5, + "99.9999" : 6.757348270503986E-5, + "100.0" : 6.757348270503986E-5 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 6.757348270503986E-5, + 6.748003926595602E-5, + 6.746798745277928E-5, + 6.678133702764053E-5, + 6.499838984923317E-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" : 0.10832889366000001, + "scoreError" : 0.0016506001920435149, + "scoreConfidence" : [ + 0.1066782934679565, + 0.10997949385204352 + ], + "scorePercentiles" : { + "0.0" : 0.1079189768, + "50.0" : 0.108242564, + "90.0" : 0.1090366517, + "95.0" : 0.1090366517, + "99.0" : 0.1090366517, + "99.9" : 0.1090366517, + "99.99" : 0.1090366517, + "99.999" : 0.1090366517, + "99.9999" : 0.1090366517, + "100.0" : 0.1090366517 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.1090366517, + 0.108242564, + 0.1079189768, + 0.1083576889, + 0.1080885869 + ] + ] + }, + "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" : 0.4779739153333333, + "scoreError" : 0.007987030924469857, + "scoreConfidence" : [ + 0.46998688440886344, + 0.4859609462578031 + ], + "scorePercentiles" : { + "0.0" : 0.476138847, + "50.0" : 0.477748715, + "90.0" : 0.481469577, + "95.0" : 0.481469577, + "99.0" : 0.481469577, + "99.9" : 0.481469577, + "99.99" : 0.481469577, + "99.999" : 0.481469577, + "99.9999" : 0.481469577, + "100.0" : 0.481469577 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.476735972, + 0.481469577, + 0.47777646566666665, + 0.477748715, + 0.476138847 + ] + ] + }, + "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" : 1.6730243644000002, + "scoreError" : 0.07340701551445698, + "scoreConfidence" : [ + 1.5996173488855432, + 1.7464313799144573 + ], + "scorePercentiles" : { + "0.0" : 1.644701101, + "50.0" : 1.67681155, + "90.0" : 1.697225124, + "95.0" : 1.697225124, + "99.0" : 1.697225124, + "99.9" : 1.697225124, + "99.99" : 1.697225124, + "99.999" : 1.697225124, + "99.9999" : 1.697225124, + "100.0" : 1.697225124 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 1.697225124, + 1.678261324, + 1.668122723, + 1.67681155, + 1.644701101 + ] + ] + }, + "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.00450055958947036, + "scoreError" : 5.6866598483374845E-5, + "scoreConfidence" : [ + 0.004443692990986985, + 0.004557426187953735 + ], + "scorePercentiles" : { + "0.0" : 0.004483004799107143, + "50.0" : 0.004503572950672646, + "90.0" : 0.004517674288288288, + "95.0" : 0.004517674288288288, + "99.0" : 0.004517674288288288, + "99.9" : 0.004517674288288288, + "99.99" : 0.004517674288288288, + "99.999" : 0.004517674288288288, + "99.9999" : 0.004517674288288288, + "100.0" : 0.004517674288288288 + }, + "scoreUnit" : "s/op", + "rawData" : [ + [ + 0.004503572950672646, + 0.004487895139013453, + 0.004483004799107143, + 0.00451065077027027, + 0.004517674288288288 + ] + ] + }, + "secondaryMetrics" : { + } + } +] diff --git a/performance/2026-09-09-scratch/before-recheck-jmh.json b/performance/2026-09-09-scratch/before-recheck-jmh.json new file mode 100644 index 0000000..198a588 --- /dev/null +++ b/performance/2026-09-09-scratch/before-recheck-jmh.json @@ -0,0 +1,200 @@ +[ + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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.6968305442982996e-05, + "scoreError": 7.972825660060215e-07, + "scoreConfidence": [ + 2.6171022876976976e-05, + 2.7765588008989016e-05 + ], + "scorePercentiles": { + "0.0": 2.6064190561809466e-05, + "50.0": 2.713266691080729e-05, + "90.0": 2.8003960663271567e-05, + "95.0": 2.8266364931321012e-05, + "99.0": 2.8266364931321012e-05, + "99.9": 2.8266364931321012e-05, + "99.99": 2.8266364931321012e-05, + "99.999": 2.8266364931321012e-05, + "99.9999": 2.8266364931321012e-05, + "100.0": 2.8266364931321012e-05 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 2.7555488814194403e-05, + 2.8266364931321012e-05, + 2.7460792801449593e-05, + 2.6064190561809466e-05, + 2.608264600500678e-05 + ], + [ + 2.7647624087793012e-05, + 2.7570792910499186e-05, + 2.7829024484571936e-05, + 2.63618836056932e-05, + 2.6479099994705074e-05 + ], + [ + 2.7309787188728704e-05, + 2.713266691080729e-05, + 2.618046873445884e-05, + 2.6117664142666912e-05, + 2.6466086471039612e-05 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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.06993304894514706, + "scoreError": 0.012428937382961722, + "scoreConfidence": [ + 0.05750411156218534, + 0.08236198632810877 + ], + "scorePercentiles": { + "0.0": 0.060155878882352944, + "50.0": 0.0634497960625, + "90.0": 0.08588725383333333, + "95.0": 0.08624586358333333, + "99.0": 0.08624586358333333, + "99.9": 0.08624586358333333, + "99.99": 0.08624586358333333, + "99.999": 0.08624586358333333, + "99.9999": 0.08624586358333333, + "100.0": 0.08624586358333333 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 0.060155878882352944, + 0.06047350752941177, + 0.06041102294117647, + 0.06046983752941176, + 0.060362842588235294 + ], + [ + 0.08493959983333334, + 0.08484457791666666, + 0.08564818066666667, + 0.08546072075, + 0.08624586358333333 + ], + [ + 0.06015902294117647, + 0.06055583835294118, + 0.0634497960625, + 0.06794135146666666, + 0.06787769313333333 + ] + ] + }, + "secondaryMetrics": {} + }, + { + "jmhVersion": "1.37", + "benchmark": "com.rafambn.kflate.benchmark.CompressionBenchmarks.rawDeflateCompression", + "mode": "avgt", + "threads": 1, + "forks": 3, + "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": 6.769606591254372e-05, + "scoreError": 1.896985698416163e-06, + "scoreConfidence": [ + 6.579908021412755e-05, + 6.959305161095989e-05 + ], + "scorePercentiles": { + "0.0": 6.342663043753963e-05, + "50.0": 6.822538021828103e-05, + "90.0": 6.953005168173725e-05, + "95.0": 6.958730044531032e-05, + "99.0": 6.958730044531032e-05, + "99.9": 6.958730044531032e-05, + "99.99": 6.958730044531032e-05, + "99.999": 6.958730044531032e-05, + "99.9999": 6.958730044531032e-05, + "100.0": 6.958730044531032e-05 + }, + "scoreUnit": "s/op", + "rawData": [ + [ + 6.342663043753963e-05, + 6.413363150807899e-05, + 6.75012582669726e-05, + 6.743249794377402e-05, + 6.657319154742096e-05 + ], + [ + 6.958730044531032e-05, + 6.857982686505759e-05, + 6.836027286397813e-05, + 6.841834060747024e-05, + 6.800295553440304e-05 + ], + [ + 6.94918858393552e-05, + 6.832567481896433e-05, + 6.822538021828103e-05, + 6.918970121065376e-05, + 6.819244058089589e-05 + ] + ] + }, + "secondaryMetrics": {} + } +] diff --git a/performance/2026-09-09-scratch/before-sizes.jsonl b/performance/2026-09-09-scratch/before-sizes.jsonl new file mode 100644 index 0000000..6f8562d --- /dev/null +++ b/performance/2026-09-09-scratch/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-scratch/native_bench.py b/performance/2026-09-09-scratch/native_bench.py new file mode 100644 index 0000000..7a66ddc --- /dev/null +++ b/performance/2026-09-09-scratch/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