Skip to content

perf(encoding): enable one-shot size hint across levels safely#94

Merged
polaz merged 4 commits intomainfrom
perf/#88-default-dfast-cliff
Apr 9, 2026
Merged

perf(encoding): enable one-shot size hint across levels safely#94
polaz merged 4 commits intomainfrom
perf/#88-default-dfast-cliff

Conversation

@polaz
Copy link
Copy Markdown
Member

@polaz polaz commented Apr 9, 2026

Summary

  • always propagate one-shot source size hint in compress_to_vec() for all levels
  • clamp hinted window floor in matcher parameter adjustment to preserve small-input correctness
  • add cross-validation and level matrix regressions for FFI compatibility under hinting

Validation

  • cargo build -p structured-zstd --features hash,std,dict_builder
  • cargo fmt --all -- --check
  • cargo clippy -p structured-zstd --all-targets --features hash,std,dict_builder -- -D warnings
  • cargo nextest run -p structured-zstd --features hash,std,dict_builder

Summary by CodeRabbit

  • Improvements

    • Better auto-hinting for small inputs, yielding more optimal window sizing and tighter one-shot compression.
    • More consistent hinted behavior across compression levels, improving compress_to_vec results.
  • Tests

    • Expanded deterministic roundtrip and cross-decoder compatibility tests, including FFI decode validation and broader compression-level coverage.

Copilot AI review requested due to automatic review settings April 9, 2026 21:05
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f8538b18-69e1-4f32-ad4f-c4bab2b76d68

📥 Commits

Reviewing files that changed from the base of the PR and between 7d32be9 and a4d9c51.

📒 Files selected for processing (5)
  • zstd/src/encoding/frame_compressor.rs
  • zstd/src/encoding/match_generator.rs
  • zstd/src/encoding/mod.rs
  • zstd/src/tests/roundtrip_integrity.rs
  • zstd/tests/cross_validation.rs

📝 Walkthrough

Walkthrough

compress_to_vec now fully buffers input and sets a source-size hint on FrameCompressor; match_generator adds MIN_HINTED_WINDOW_LOG (14) to raise the hinted minimum window log; multiple tests were added/updated to validate hinted behavior and FFI-compatible decoding across levels and inputs.

Changes

Cohort / File(s) Summary
Frame compression tests
zstd/src/encoding/frame_compressor.rs
Added two #[cfg(feature = "std")] unit tests asserting FrameCompressor::set_source_size_hint remains FFI-decodable: one fixed ~2 KiB payload test and one deterministic pseudo-random matrix across sizes, seeds, and compression levels.
Matcher parameter adjustments
zstd/src/encoding/match_generator.rs
Introduced MIN_HINTED_WINDOW_LOG = 14 and updated adjust_params_for_source_size to enforce the higher hinted floor; updated and added tests expecting the new hinted effective window/log behavior and added a regression that reconstructs source from emitted Sequences for seed 23.
One-shot compression path
zstd/src/encoding/mod.rs
compress_to_vec now reads the entire source into a Vec (via read_to_end), directly constructs FrameCompressor, calls set_source_size_hint(input.len()), provides the buffered input, and drains compressed output (replacing prior streaming helper call).
Integration/roundtrip tests
zstd/src/tests/roundtrip_integrity.rs, zstd/tests/cross_validation.rs
Added tests comparing hinted vs no-hint frame headers for small inputs, improved FFI decode error context, and added a cross-validation test that builds a hinted frame with FrameCompressor and verifies decoding via both Rust streaming decoder and C FFI decoder.

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant compress_to_vec as compress_to_vec (one-shot)
  participant FrameCompressor
  participant RustDecoder as zstd::stream::StreamingDecoder
  participant CFFIDecoder as zstd::decode_all (C FFI)

  Caller->>compress_to_vec: provide Read source
  compress_to_vec->>compress_to_vec: read_to_end -> input Vec
  compress_to_vec->>FrameCompressor: new(level)
  compress_to_vec->>FrameCompressor: set_source_size_hint(input.len())
  compress_to_vec->>FrameCompressor: set_source(&input)
  compress_to_vec->>FrameCompressor: compress() -> compressed_frame
  compress_to_vec->>Caller: return compressed_frame

  Note over Caller,FrameCompressor: Validation flows in tests
  Caller->>RustDecoder: pass compressed_frame
  RustDecoder->>Caller: decoded bytes -> compare with original

  Caller->>CFFIDecoder: pass compressed_frame
  CFFIDecoder->>Caller: decoded bytes -> compare with original
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related issues

Possibly related PRs

Poem

🐰 I buffered the bytes, set the hint with delight,
Little windows grew cautious, just right for the night.
Rust and C both decoded, roundtrips all green,
A hop, a small test, the compression is clean! 🎉

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main objective: enabling one-shot size hints across compression levels with safety guarantees, which directly matches the primary changes in all modified files.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch perf/#88-default-dfast-cliff

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 9, 2026

Codecov Report

❌ Patch coverage is 95.12195% with 6 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
zstd/src/encoding/frame_compressor.rs 93.10% 4 Missing ⚠️
zstd/src/encoding/match_generator.rs 96.49% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to safely enable source-size hint propagation for one-shot encoding helpers across compression levels, while preserving correctness and C zstd (FFI) interoperability for small inputs.

Changes:

  • Updated compress_to_vec() to always apply a source-size hint when encoding a one-shot buffer.
  • Clamped hinted window tuning to a conservative minimum to avoid small-input regressions and FFI incompatibilities.
  • Added targeted regression tests (including level/size matrices) to validate hinted streams against both Rust and C zstd decoders.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
zstd/tests/cross_validation.rs Adds a targeted regression test ensuring hinted Rust output is accepted by both Rust and FFI decoders.
zstd/src/tests/roundtrip_integrity.rs Adds a test asserting compress_to_vec(Default) benefits from auto-hinting on tiny inputs (smaller advertised window).
zstd/src/encoding/mod.rs Changes compress_to_vec() implementation to use FrameCompressor with an explicit source-size hint.
zstd/src/encoding/match_generator.rs Introduces a conservative hinted window floor (MIN_HINTED_WINDOW_LOG) and updates related unit tests.
zstd/src/encoding/frame_compressor.rs Adds FFI-compatibility tests for hinted compression across levels and small input sizes.

Comment thread zstd/src/encoding/mod.rs
Comment thread zstd/src/encoding/match_generator.rs
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
zstd/src/encoding/match_generator.rs (1)

163-172: ⚠️ Potential issue | 🟡 Minor

Update the source-size adjustment docs/comments to match the new 16 KiB floor.

The implementation now clamps hinted windows to MIN_HINTED_WINDOW_LOG, but the surrounding docs still say zero/small hints fall back to MIN_WINDOW_LOG / 1 KiB. That mismatch will mislead future maintenance and test updates.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@zstd/src/encoding/match_generator.rs` around lines 163 - 172, The comment
above adjust_params_for_source_size is out of date: update its doc to reflect
that small or zero src_size values now clamp to MIN_HINTED_WINDOW_LOG (the new
16 KiB floor) rather than falling back to MIN_WINDOW_LOG (1 KiB); mention both
constants (MIN_WINDOW_LOG and MIN_HINTED_WINDOW_LOG) and explain that src_log is
computed as ceil_log2(src_size) then clamped to at least MIN_HINTED_WINDOW_LOG
so readers know the effective minimum window is 16 KiB for hinted sizes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@zstd/src/encoding/match_generator.rs`:
- Around line 4218-4269: The test
fastest_hint_iteration_23_sequences_reconstruct_source may never exercise the
Sequence::Triple branch; add a boolean flag (e.g., saw_triple) initialized
before calling driver.start_matching, set it to true inside the Sequence::Triple
arm of the closure, and after start_matching assert!(saw_triple, "fixture must
emit at least one match") to guarantee the match reconstruction path is
exercised; reference the test function
fastest_hint_iteration_23_sequences_reconstruct_source, the
driver.start_matching call, and the Sequence::Triple match arm when making this
change.

In `@zstd/src/encoding/mod.rs`:
- Around line 40-43: The compress_to_vec helper now eagerly reads the entire
Read into memory before compressing (see the source that reads into input with
read_to_end), so add a short rustdoc on compress_to_vec documenting this
eager-buffering behavior and the memory implications: explicitly state that peak
memory usage can be roughly input_size + output_size and recommend callers use
the streaming APIs (e.g., the incremental compressor functions) when memory
usage or very large inputs are a concern; keep the note concise and place it on
the compress_to_vec function.

---

Outside diff comments:
In `@zstd/src/encoding/match_generator.rs`:
- Around line 163-172: The comment above adjust_params_for_source_size is out of
date: update its doc to reflect that small or zero src_size values now clamp to
MIN_HINTED_WINDOW_LOG (the new 16 KiB floor) rather than falling back to
MIN_WINDOW_LOG (1 KiB); mention both constants (MIN_WINDOW_LOG and
MIN_HINTED_WINDOW_LOG) and explain that src_log is computed as
ceil_log2(src_size) then clamped to at least MIN_HINTED_WINDOW_LOG so readers
know the effective minimum window is 16 KiB for hinted sizes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: c9c3d4b9-ec3d-4d17-a0a5-588d19de0291

📥 Commits

Reviewing files that changed from the base of the PR and between ceb9e27 and 7d32be9.

📒 Files selected for processing (5)
  • zstd/src/encoding/frame_compressor.rs
  • zstd/src/encoding/match_generator.rs
  • zstd/src/encoding/mod.rs
  • zstd/src/tests/roundtrip_integrity.rs
  • zstd/tests/cross_validation.rs

Comment thread zstd/src/encoding/match_generator.rs
Comment thread zstd/src/encoding/mod.rs
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

zstd/src/encoding/match_generator.rs:160

  • The doc/comment for adjust_params_for_source_size says the window cap is clamped to MIN_WINDOW_LOG and mentions a 1 KiB minimum window, but the implementation now additionally clamps to MIN_HINTED_WINDOW_LOG (16 KiB). Please update the documentation to reflect the actual hinted floor so future changes/tests don’t rely on outdated behavior.
/// Adjust level parameters for a known source size.
///
/// This derives a cap from `ceil(log2(src_size))`, then clamps it to
/// [`MIN_WINDOW_LOG`]. A zero-byte size hint is treated as
/// [`MIN_WINDOW_LOG`]. This keeps tables bounded for
/// small inputs while preserving the encoder's minimum supported window.

Comment thread zstd/src/encoding/match_generator.rs Outdated
Comment thread zstd/tests/cross_validation.rs Outdated
@polaz
Copy link
Copy Markdown
Member Author

polaz commented Apr 9, 2026

@coderabbitai Re outside-diff note on adjust_params_for_source_size docs (match_generator.rs:163-172): fixed in commit c7f56ae. The docs and inline comments now explicitly describe ceil_log2(src_size) with clamping to MIN_WINDOW_LOG and the effective MIN_HINTED_WINDOW_LOG (16 KiB) floor for hinted sizing.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 9, 2026

Tip

For best results, initiate chat on the files or code changes.

@polaz: Thanks for the update — glad the docs now clearly document the ceil_log2(src_size) derivation with both the MIN_WINDOW_LOG clamp and the MIN_HINTED_WINDOW_LOG (16 KiB) floor for the hinted path. That makes the sizing contract explicit and easy to follow.


🧠 Learnings used
Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-05T08:17:53.856Z
Learning: In `zstd/src/encoding/frame_compressor.rs` (structured-world/structured-zstd), `set_source_size_hint` applies only to the payload (uncompressed source) bytes, not to dictionary priming. Dictionary priming is separate and does not inflate the advertised frame window size. Do not suggest including dictionary bytes in the size hint passed to `set_source_size_hint`.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-05T07:19:26.176Z
Learning: In `cli/src/main.rs` (structured-world/structured-zstd), path-based compression calls `set_source_size_hint(source_size as u64)` (NOT `set_pledged_content_size`) for the filesystem metadata size. This is intentional: `metadata().len()` is unreliable for pseudo-files (`/proc/*`), FIFOs, and growing inputs, so the hint must remain advisory (only scaling matcher/window parameters) and must not impose a hard byte contract on the encoder. Do not flag the absence of `set_pledged_content_size` in path-based compression as a missing feature.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 61
File: zstd/src/encoding/mod.rs:169-179
Timestamp: 2026-04-04T20:45:28.506Z
Learning: In `zstd/src/encoding/mod.rs`, `Matcher::set_source_size_hint()` has a default no-op implementation intentionally. Only the built-in `MatchGeneratorDriver` overrides it to apply the hint during level resolution. `NoDictionaryMatcher` and `TinyMatcher` are test stubs and are explicitly exempt from implementing this hook. Do not flag the absent override in non-driver matchers as a bug.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 48
File: zstd/src/encoding/match_generator.rs:1554-1559
Timestamp: 2026-04-02T12:03:04.619Z
Learning: In `zstd/src/encoding/match_generator.rs`, `HcMatchGenerator::insert_position` has an early-return guard at `abs_pos >= u32::MAX` that disables all further HC insertions for streams >4 GiB, degrading `CompressionLevel::Better` to repcodes-only. This is a known limitation tracked in issue `#51`; the proper fix (table rebasing) is deferred. A TODO comment and a limitation note on `CompressionLevel::Better` doc were added in PR `#48`. Do not re-flag this as a new bug.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-08T20:26:15.902Z
Learning: In `zstd/src/decoding/ringbuffer.rs` (structured-world/structured-zstd), the test `copy_bytes_overshooting_covers_all_copy_strategies` derives copy lengths from a helper `active_chunk_size_for_tests()` (not hardcoded values) so that single-chunk, multi-chunk, and sub-chunk (fallback) cases adapt to whichever SIMD backend width is active at runtime (AVX-512/AVX2/SSE2/NEON/scalar). Do not flag hardcoded test lengths as missing coverage for other backends — the test is backend-adaptive by design.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-09T06:17:40.408Z
Learning: In `zstd/src/decoding/ringbuffer.rs` (structured-world/structured-zstd), both `copy_with_checks` and `copy_with_nobranch_check` thread aggregate source/destination capacities (`m1_src_cap`, `m2_src_cap`, `f1_dst_cap`, `f2_dst_cap`) into `simd_copy::copy_bytes_overshooting` so the SIMD eligibility check (`min(src_len, dst_len) >= copy_multiple`) is applied uniformly. Do not flag the capacity parameters in `copy_with_nobranch_check` as unnecessary or inconsistent with `copy_with_checks`.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 48
File: zstd/src/encoding/match_generator.rs:336-339
Timestamp: 2026-04-02T12:03:03.856Z
Learning: In `zstd/src/encoding/match_generator.rs`, `min_primed_tail = 4` is correct for both `MatcherBackend::Dfast` and `MatcherBackend::HashChain` because `HcMatchGenerator::insert_position` unconditionally requires 4 bytes of hash lookahead (`if idx + 4 > concat.len() { return; }`). `backfill_boundary_positions` only re-inserts positions already fully within extended history; it cannot make a <4-byte dictionary tail fragment hashable. Do not suggest lowering `min_primed_tail` below 4 for the `HashChain` backend.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 48
File: zstd/src/encoding/match_generator.rs:1531-1535
Timestamp: 2026-04-01T15:33:17.229Z
Learning: In `zstd/src/encoding/match_generator.rs`, `HcMatchGenerator::insert_position` intentionally casts `abs_pos: usize` to `u32` (wrapping on streams > 4 GiB). This is safe by design: (1) the chain table slot is computed as `(pos_u32 as usize) & chain_mask`, so only the low bits matter and wrapping leaves the addressed slot unchanged; (2) `chain_candidates` filters any recovered `cur as usize` value against `history_abs_start` — a wrapped (small) value is always less than the current sliding-window start and is discarded. Do not flag this cast as a bug.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-08T16:00:30.438Z
Learning: In `zstd/src/encoding/match_generator.rs`, the `RowMatchGenerator` (used for `CompressionLevel::Level(4)` / `MatcherBackend::Row`) uses a stable 4-byte hash key, consistent with the 4-byte lookahead constraint shared by `HcMatchGenerator`. Previous-block tail positions are backfilled into the row tables before matching/skip begins (analogous to `backfill_boundary_positions` for the HC backend), and a regression test covers cross-boundary tail reuse. Do not flag missing backfill or key-width issues for the Row backend.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-08T21:51:56.626Z
Learning: In `zstd/src/decoding/ringbuffer.rs` (structured-world/structured-zstd), the test `copy_bytes_overshooting_preserves_prefix_for_runtime_chunk_lengths` (or equivalent) includes a misaligned extra-capacity case that uses `add(1)`-offset pointers and a `chunk_plus_one` length to exercise the rounded-up wildcopy overshoot path (where `copy_multiple > copy_at_least`) and validates prefix correctness. Do not flag the absence of a misaligned-pointer case in this test — it is present by design.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 53
File: zstd/src/tests/roundtrip_integrity.rs:498-509
Timestamp: 2026-04-02T22:26:07.979Z
Learning: In `structured-zstd` (`zstd/src/tests/roundtrip_integrity.rs`), `best_level_does_not_regress_vs_better` uses a `<=` (not strict `<`) assertion because the `repeat_offset_fixture(b"HelloWorld", ...)` input is simple enough that HC saturates at both Better (16 candidates) and Best (32 candidates) search depths, producing identical compressed sizes (~30243 bytes). Strict `<` would be a false positive on this fixture. The strict `Best < Better` quality assertion lives in `cross_validation::best_level_beats_better_on_corpus_proxy` on the decodecorpus sample. Do not re-flag the `<=` as a weakened guard.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-01T06:49:34.233Z
Learning: In the `structured-zstd` codebase (`zstd/src/encoding/match_generator.rs`), `CompressionLevel::Default` uses the `DfastMatchGenerator` backend (with `pick_lazy_match` lazy evaluation), while `CompressionLevel::Better` uses the `HcMatchGenerator` (hash chain backend) which inserts positions before lazy evaluation inside its own `start_matching` loop. These two backends are independent; review comments about Dfast internals (e.g. position seeding order in `pick_lazy_match`) do not apply to the Better level's implementation path.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-06T01:40:24.378Z
Learning: In `zstd/benches/compare_ffi.rs` (structured-world/structured-zstd), Rust FastCOVER trains with the post-finalization content budget in both the `REPORT_DICT_TRAIN` emission path (around lines 208-225) and the Criterion benchmark path (around lines 266-280). Both paths were aligned in commit 8622344. Do not flag these ranges as using inconsistent budget values.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 53
File: zstd/src/encoding/frame_compressor.rs:280-287
Timestamp: 2026-04-02T16:31:58.167Z
Learning: In `structured-zstd`, `CompressionLevel::Best` intentionally uses `MatcherBackend::HashChain` (not a binary-tree/DUBT backend) due to memory constraints: a BT matcher for a 16 MiB window requires ~128–256 MB of tables (C zstd level 11 uses chainLog=25 → 256 MB), which is impractical. Best is distinguished from Better by deeper HC search (32 vs 16 candidates), larger hash/chain tables (2M/1M vs 1M/512K), and higher target match length (128 vs 48), keeping memory under 20 MB. It achieves a proportional compression gain (~0.27% better than Better on corpus) comparable to C zstd's L7→L11 delta (~0.14%). A proper BT backend is deferred as a future optimization. Do not flag Best's use of HashChain as missing a BT implementation.

Learnt from: polaz
Repo: structured-world/structured-zstd PR: 0
File: :0-0
Timestamp: 2026-04-09T15:16:10.603Z
Learning: In structured-world/structured-zstd, the `fuzz_exports` API concern was resolved via "Option B": internal decode/encode helpers remain `pub(crate)` by default, and explicit public shims are exposed only behind a dedicated feature flag (e.g., `fuzz`) in a separate file. Do not flag these internal symbols as needing a wider public API — the feature-gated shim layer is the intentional design.

@polaz polaz force-pushed the perf/#88-default-dfast-cliff branch from 7d32be9 to a4d9c51 Compare April 9, 2026 21:19
@polaz polaz requested a review from Copilot April 9, 2026 21:20
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown

@sw-release-bot sw-release-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'structured-zstd vs C FFI (x86_64-gnu)'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.30.

Benchmark suite Current: a4d9c51 Previous: ceb9e27 Ratio
compress/better/small-4k-log-lines/matrix/c_ffi 0.099 ms 0.076 ms 1.30

This comment was automatically generated by workflow using github-action-benchmark.

CC: @polaz

@polaz polaz merged commit 544abd5 into main Apr 9, 2026
17 checks passed
@polaz polaz deleted the perf/#88-default-dfast-cliff branch April 9, 2026 21:58
@sw-release-bot sw-release-bot Bot mentioned this pull request Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants