Repository navigation
Conversation
WIP before merging main.
# Conflicts: # src/app/collection.rs
Each thread's arena kept what that thread freed, so the watcher held about twice the memory it was using.
# Conflicts: # src/app/collection.rs
GraemeF
added a commit
that referenced
this pull request
Oct 9, 2026
The watcher change in #299 landed after the notes were written. The board highlight now gives the effect of both performance changes together, from the board benchmark's figures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On a busy tracker the watcher drew every project's trees on every collection and told each board about every project, even when the probe had found nothing new. Now a collection draws nothing when no read finds its tracker has moved. It only vouches that each project it read is as current as the read. A collection that does draw tells the watcher only of projects that were read again, or whose beads' readiness changed because a blocker in another project moved.
The watcher's threads now allocate from one malloc arena. Its live heap was the same before and after the read change, but each thread's arena kept what that thread freed, so resident memory sat at about twice the live heap. The arena setting has no unit test, because its effect shows only in a measurement.
Measured on the reproduced workload in
bench/boards: the watcher plus five boards, a 90 s warm-up and a 300 s window, with runs interleaved main, branch, main, branch.The boards stay as current as before. They saw the same writes, with a median delay of about 1.5 to 2 s on both sides and a longest delay under 3 s. The longest time a board's freshness answer went stale fell from 14 to 22 s to under 3 s. CPU time spent in
bdunder the watcher is unchanged, because the watcher asksbdthe same things.