format: slice entry points for the facade's hot *_in calls (local listing back to main's speed)
CI / test-arm64 (pull_request) Successful in 1m25s
CI / test (pull_request) Successful in 19m0s

Since the M2 merge the facade handed in-memory files to the generic
`*_in` parsers as `&[u8]` (`with_bytes!`), which instantiates them in
the facade crate, where the format crate's private helpers do not
inline without LTO: listing a 400-group v1 file through `File::open`
was 7-10% slower than main. `ObjectHeader::parse_in`,
`group_v2::{resolve_child_in, resolve_group_children_in,
resolve_path_any_in}` and `attribute::{extract_attributes_tolerant_in,
find_attribute_in}` now pass a storage with `as_contiguous()` to their
non-generic slice entry point, compiled once in the format crate; other
storages reach the same generic core as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
osobh
2026-09-26 22:28:22 -05:00
co-authored by Claude Opus 5.5
parent 4313917b4d
commit ef428d756c
5 changed files with 151 additions and 12 deletions
+12
View File
@@ -20,6 +20,18 @@
//! still works (`S = dyn Storage`), and a remote backend pays one indirect
//! call per structure read.
//!
//! # Slice entry points
//!
//! A generic core is instantiated in the crate that calls it, so a
//! downstream crate calling `parse_in::<[u8]>` gets its own copy of the
//! parser, compiled without this crate's private helpers inlined (there is
//! no cross-crate inlining of non-`#[inline]` functions without LTO): a
//! metadata walk through the facade ran about 6% slower that way than
//! through the `&[u8]` wrappers. The `*_in` entry points on the facade's hot
//! paths (object headers, group listing and lookup, attributes) therefore
//! check [`Storage::as_contiguous`] first and hand an in-memory file to
//! their non-generic `&[u8]` wrapper, compiled here; both run the one core.
//!
//! The trait is synchronous and `no_std`: parsing is CPU work, and a remote
//! backend bridges to its own I/O.