Skip to content

UPSTREAM PR #2473: remove the prodash feature#35

Open
loci-dev wants to merge 1 commit into
mainfrom
loci/pr-2473-remove-prodash-feature
Open

UPSTREAM PR #2473: remove the prodash feature#35
loci-dev wants to merge 1 commit into
mainfrom
loci/pr-2473-remove-prodash-feature

Conversation

@loci-dev
Copy link
Copy Markdown

Note

Source pull request: GitoxideLabs/gitoxide#2473

As that feature is just from an optional dependency, I think a consumer of this crate should use the progress-tree feature?

from: https://salsa.debian.org/rust-team/debcargo-conf/-/blob/master/src/gix/debian/patches/reduce-features.patch?ref_type=heads#L26

author: @Fabian-Gruenbichler

As that feature is just from an optional dependency, I think a consumer of this crate should use the progress-tree feature
@loci-review
Copy link
Copy Markdown

loci-review Bot commented Mar 19, 2026

Overview

Analysis of 29,750 functions across two binaries shows mixed performance results. Modified: 1,304 functions (4.4%), New: 3,391, Removed: 3,380, Unchanged: 21,675.

Binaries analyzed:

  • target.aarch64-unknown-linux-gnu.release.ein: 301,227.67 nJ → 300,956.15 nJ (-0.09%)
  • target.aarch64-unknown-linux-gnu.release.gix: 803,832.91 nJ → 802,598.63 nJ (-0.15%)

Power consumption improved slightly in both binaries despite localized performance variations.

Function Analysis

Critical regressions:

  • gix_revision::spec::parse::Delegate::sibling_branch (ein): Response time 1.22ms → 12.49ms (+11.27ms, +922%). Bottleneck in branch_remote_tracking_ref_name affects revision parsing operations (@{upstream}, @{push} syntax).

  • gix::remote::init::rewrite_urls (ein): Response time 153.6µs → 2.97ms (+2.82ms, +1,835%). Regression in URL pattern matching with new operations: precompose_path (722µs), eq_by (480µs), driftsort_main (39µs). Affects remote initialization.

  • gix::Repository::index_or_load_from_head_or_empty (ein): Response time 307.4µs → 1.72ms (+1.41ms, +458%). The recent_snapshot operation increased 10x, impacting diff/merge operations requiring index access.

  • gix_pack::cache::StaticLinkedList::get (both binaries): Response time +4.2% (+21ns), throughput time +2,238% (+341ns). Aggressive inlining produced less efficient code in performance-critical pack cache lookup path.

Improvements:

  • alloc::collections::BinaryHeap::push (gix): Response time 434ns → 251ns (-183ns, -42%). Standard library optimization benefits commit graph traversal.

  • gix_traverse::commit::add_to_queue (gix): Response time 1.69µs → 1.67µs (-19ns, -1.2%), throughput time -62% (-188ns). Compiler optimization improved commit queue operations.

External dependency regressions: CLI parsing functions (clap_lex, clap_builder, sharded_slab) show +1,000% to +3,700% regressions but affect only startup/error paths with negligible practical impact.

Flame Graph Comparison

The rewrite_urls function demonstrates the most significant structural change in Gitoxide code:

Base version:

Flame Graph: target.aarch64-unknown-linux-gnu.release.ein::_ZN3gix6remote4init12rewrite_urls

Target version:

Flame Graph: target.aarch64-unknown-linux-gnu.release.ein::_ZN3gix6remote4init12rewrite_urls

Target version introduces extensive new operations (Unicode normalization, sorting, comparison logic) not present in base, transforming simple URL rewriting into complex path processing workflow.

Additional Findings

Source code context: Single commit (90cc5be) modified only Cargo.toml feature flags (prodash hygiene improvement), with zero runtime code changes. Performance variations stem from compiler optimization differences or transitive dependency updates not visible in the repository diff.

Critical path assessment: Regressions in index loading (+1.41ms), revision parsing (+11.27ms), and URL rewriting (+2.82ms) affect performance-critical Git operations. Pack cache regression (+21ns per call) compounds across thousands of lookups. However, overall power consumption improvements (-0.09% to -0.15%) suggest optimizations in high-frequency paths offset localized regressions.

🔎 Full breakdown: Loci Inspector
💬 Questions? Tag @loci-dev

@loci-dev loci-dev force-pushed the main branch 6 times, most recently from 95ef755 to a9e7940 Compare March 26, 2026 07:51
@loci-dev loci-dev force-pushed the main branch 5 times, most recently from 8b02847 to 1bf0519 Compare April 2, 2026 07:54
@loci-dev loci-dev force-pushed the main branch 3 times, most recently from cdbe120 to 78a7ab5 Compare April 11, 2026 07:49
@loci-dev loci-dev force-pushed the main branch 6 times, most recently from 49231d8 to bc0a777 Compare April 20, 2026 07:18
@loci-dev loci-dev force-pushed the main branch 4 times, most recently from e902b63 to c6739bc Compare April 27, 2026 07:26
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