Timing phases for writing the manifest (refs #41) 94cdbc576ce1
Encoding and writing timed apart, with how many rows lacked a stat or a hash: on the Linux tree a commit's manifest is 11 to 34 ms of encoding, 6 to 8 ms of writing.
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-10-02 03:42 UTC
- Signature
- ✔ signed by Andy McCall
- Hash
94cdbc576ce181f578a696089134a0c52f5d91057d9e80c8553d9ea4d889a0f2- Depends on
- 135212de5370 1966f5db15ee 1ec3f008e96a
- Depended on by
- nothing yet
- In bookmarks
- agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
- In tags
- v0.10.0 v0.11.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
- Edits
- 2 atoms, 0 tree operations, 1 file
Browse the tree at this change
modified crates/oxy-core/src/repo/prompt.rs +14 −0
| … | 398 unchanged lines |
||
| 399 | 399 | }; |
|
| 400 | 400 | (path.as_str(), entry) |
|
| 401 | 401 | }); |
|
| 402 | + | let encoding = crate::timing::phase("manifest: rows and encoding"); |
|
| 402 | 403 | // The directories of the walk these entries came from, if any. |
|
| 403 | 404 | let (dirs, nested) = self.walked_dirs.take().unwrap_or_default(); |
|
| 404 | 405 | let new = encode_manifest(conflicted, uncommitted, written, &dirs, &nested, &mut rows); |
|
| 405 | 406 | drop(rows); |
|
| 407 | + | drop(encoding); |
|
| 408 | + | if crate::timing::enabled() { |
|
| 409 | + | let unstated = entries.values().filter(|e| e.stat.is_none()).count(); |
|
| 410 | + | let unhashed = entries |
|
| 411 | + | .values() |
|
| 412 | + | .filter(|e| e.content_hash.is_none()) |
|
| 413 | + | .count(); |
|
| 414 | + | eprintln!( |
|
| 415 | + | "timing manifest: {} rows, {unstated} without a stat, {unhashed} without a hash", |
|
| 416 | + | entries.len() |
|
| 417 | + | ); |
|
| 418 | + | } |
|
| 419 | + | let _t = crate::timing::phase("manifest: compare and write"); |
|
| 406 | 420 | let p = self.manifest_path(); |
|
| 407 | 421 | // Leave an unchanged manifest alone when its stamp already trusts |
|
| 408 | 422 | // every entry (none is within the racy window): rewriting it would |
|
| … | 490 unchanged lines |