Benchmarks after O10a; backlog: O10a done b8a0399319fc
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-09-28 07:23 UTC
- Signature
- ✔ signed by Andy McCall
- Hash
b8a0399319fc9b989db780bb5ddbbfea659c23d57aaac890c5541780b235fe48- Depends on
- 1d360c91a289 59171dcff221 75036530b621
- Depended on by
- 0bb9413f0118 978470f76e66
- 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.1.0 v0.10.0 v0.11.0 v0.2.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, 2 files
Browse the tree at this change
modified docs/backlog-overnight-2.md +1 −0
| … | 61 unchanged lines |
||
| 62 | 62 | - 2026-09-28 H3 done: header theme switch (dark/light/auto) and Settings → Appearance, theme cookie; auto follows the system live. Light-mode pass by headless Chrome screenshots of dashboard, overview, file, proposal, issue, settings, changes: found and fixed highlighted code drawing boxes in both themes (syntect scope `comment` colliding with the page `.comment` class; classes now `sy-` prefixed) and the band ADMIN link unreadable in light. Test `theme_is_chosen_in_settings_and_remembered_in_a_cookie`; hub spec §6.1; deployed. The code editor picks its theme at load, not live. |
|
| 63 | 63 | - 2026-09-28 O4 done: harness `crates/oxy-core/tests/bench.rs` (ignored; run by hand) and `docs/benchmarks.md`. Full run on disk took 5 h 14 min. **Andy: status and commit are slow at scale**: at 10 000 files / 5 000 changes a commit averages 3.8 s, a 10-file commit 9.1 s, a clean status 3.0 s, blame 2.9 s, peak memory 1.4 GiB; push 0.8 s, clone 3.4 s, log 0.4 s are fine. Cause: every snapshot loads and materializes the whole base state. New item O10 (moved ahead of O5) fixes it. |
|
| 64 | 64 | - 2026-09-28 V2 done: hub API `GET /notifications`, `POST /notifications/{id}/read`, `POST /notifications/read` (scope user:read; deployed). oxygenhub-vscode 0.3.0: status-bar bell with unread count across hubs, new-notification messages, Open Inbox quick pick that marks read and opens proposals/issues in the editor. Installed in both profiles (Reload Window). Tests: hub api test extended; extension pass 7 fail 0. |
|
| 65 | + | - 2026-09-28 O10a done: `State::maximal` was quadratic in heads (4 500 heads in the benchmark); now one walk, with a property test against the old definition. Commit reuses the snapshot's base. At 10 000 files / 5 000 changes: commit 3.8 s to 0.86 s, 10-file commit 9.1 s to 0.86 s, status 3.0 s to 0.80 s, blame 2.9 s to 0.81 s, memory 1.4 to 1.1 GiB; benchmark run 5 h 14 min to 1 h 12 min. Hub redeployed with it. O10b (manifest fast path, lazy base) remains for the per-file cost. |
modified docs/benchmarks.md +28 −0
| … | 68 unchanged lines |
||
| 69 | 69 | callers that need it, and cache materialized snapshots per state. The |
|
| 70 | 70 | thresholds above stay as they are until then, so the harness reports the |
|
| 71 | 71 | gap rather than hiding it. |
|
| 72 | + | ||
| 73 | + | ## 2026-09-28: after O10a |
|
| 74 | + | ||
| 75 | + | `State::maximal` compared every pair of heads, and the benchmark's |
|
| 76 | + | bookmark has about 4 500 of them (changes to different files are |
|
| 77 | + | independent). It now walks once; commit also stops loading the base state |
|
| 78 | + | twice. Same machine and size: |
|
| 79 | + | ||
| 80 | + | | Operation (10 000 files, 5 000 changes) | Before | After | Threshold | | |
|
| 81 | + | |---|---:|---:|---:|---| |
|
| 82 | + | | commit: one file (mean of 4 999) | 3 761 ms | 861 ms | 250 ms | **over** | |
|
| 83 | + | | status: clean working copy | 2 977 ms | 803 ms | 2 000 ms | ok | |
|
| 84 | + | | status: 10 files modified | 3 062 ms | 864 ms | 2 000 ms | ok | |
|
| 85 | + | | commit: 10 files | 9 089 ms | 861 ms | 500 ms | **over** | |
|
| 86 | + | | log: whole bookmark | 408 ms | 400 ms | 2 000 ms | ok | |
|
| 87 | + | | blame: hot file | 2 920 ms | 809 ms | 2 000 ms | ok | |
|
| 88 | + | | blame: ordinary file | 2 927 ms | 828 ms | 1 000 ms | ok | |
|
| 89 | + | | status after checkpoint | 2 873 ms | 770 ms | 2 000 ms | ok | |
|
| 90 | + | | push: everything | 782 ms | 742 ms | 60 000 ms | ok | |
|
| 91 | + | | clone: everything | 3 378 ms | 1 664 ms | 60 000 ms | ok | |
|
| 92 | + | | fsck | 7 955 ms | 6 872 ms | 60 000 ms | ok | |
|
| 93 | + | | gc | 9 489 ms | 9 526 ms | 60 000 ms | ok | |
|
| 94 | + | ||
| 95 | + | Peak resident memory: 1 145 MiB (was 1 405). The run took 1 h 12 min |
|
| 96 | + | (was 5 h 14 min). Commit time no longer grows with history; what remains |
|
| 97 | + | grows with the number of files: at 10 000 files a snapshot spends about |
|
| 98 | + | 320 ms loading the base state, 190 ms materializing it, 130 ms walking the |
|
| 99 | + | working copy and 40 ms building the change. That is O10b. |