Skip to content

Stop polling while minimised and parse the query once per keystroke - #25

Merged
donislawdev merged 2 commits into
mainfrom
perf/w2-window
Sep 28, 2026
Merged

donislawdev merged 2 commits into
mainfrom
perf/w2-window

Conversation

@donislawdev

Copy link
Copy Markdown
Owner

The first two commits of W2 in the performance series that follows the external
performance report of 2026-09-28. No change of look and no change to any frozen
contract.

Guards that could not fail. The full mutation run before 0.3.0 left three
entries alive. The plan panel contrast guard now picks a driver, so the problem
list and its template are actually on screen. The search box wiring is held by
a new window test that types key by key and moves the caret alone.

Window work.

  • A minimised window stops reading the service list every second and reads at
    once when it is restored. A window started minimised reads once and waits.
  • One keystroke parses the query once instead of eighteen times, through a new
    core type, QueryAsTyped, kept beside the query text.
  • The details panel rebuilds only when a cell or the name changes.
  • The second pass announces itself with the sentence alone.
  • The plan sheet builds its commands and warnings once per plan.
  • The row highlight fades once per tick instead of twice.
  • Cost figures in comments are brought up to date with dated measurements.

Evidence.

  • New tests: MinimisedWindowGuards (two), QueryParsedOnceGuards,
    SecondPassSettingOutTests, PlanSheetListsTests, SuggestingWindowTests and one
    more in ChosenGuards.
  • Mutation registry: 3 of 3 for the old gaps, then 19 of 19 for the new and
    re-anchored entries.
  • Window tests 772 of 776. The four that fail are the known ones on a session
    without administrator rights, all on the sentence about missing rights.
  • Architecture 182 of 182, core query tests 271 of 271, portable integration
    tests 24 of 24.
  • Measured on a live window, minimised for 30 seconds, single runs: processor
    time went from 375 ms to 125 ms when minimised after the list filled, and
    from 203 ms to 109 ms when started minimised. What the remainder is was not
    separated.

🤖 Generated with Claude Code

donislawdev and others added 2 commits September 28, 2026 20:12
The full mutation run before 0.3.0 left three entries alive, and each was a
test that no longer reached what its name promised.

The plan panel contrast guard now picks a driver beside the two services.
Since the warnings got their own template, the plain sentence template draws
only the problem list, and a plan over two services has no problems, so its
colour could go without the guard noticing. A driver is refused on sight by
the core, which puts a sentence into that list, and the test now asserts the
sentence is on the panel.

The wiring of the search box to the list under it is held by a new window
test that types key by key and then moves the caret alone. The old test wrote
a row, which since the suggestions rework tells the list itself, so it stayed
green with both events unwired. The two typing helpers moved out of
KeyboardTests into SearchBoxKeys, because the new test would have pushed that
file over the share of its size ceiling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first batch of window fixes from the external performance report of
2026-09-28, each backed by a new test and a mutation that proves it can fail.

A minimised window no longer reads the service list every second. WPF leaves
IsVisible true on a minimised window, so the timer only ever stopped when the
window was hidden. The timer now follows the window state as well, and a
restore asks at once rather than a second later. A window started minimised
reads once for its first look and then waits the same way.

One keystroke parsed the same query eighteen times, once to narrow the list,
once for the scope sentence and once for each of the sixteen filter chips. The
core gains QueryAsTyped, the text together with its parse, and the window keeps
one beside the query text and replaces it whenever the text differs. The chips
still hold nothing of their own.

Smaller changes in the same vein:
- the details panel rebuilds only when a cell or the name changes, not for
  every shape and highlight a row raises
- the second pass announces itself by saying the sentence rather than by
  rereading the whole list
- the plan sheet renders its commands once per plan and builds its warnings
  once per plan and state of the offer
- the row highlight fades once per tick instead of twice
- a row works out its start type label and account once per full reading

Cost figures in comments that were measured before the readings ran in
parallel are replaced with dated figures from the measurements of 2026-09-28,
and three comments that claimed the version and hash come from the file
already opened for the signature now say that each answer opens it.

The method count ceiling in ShapeCeilings goes down from 79 to 78, as the
ratchet asks when the largest type shrinks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 28, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 4bd95df3-466c-47c6-907e-6ba0c58c0e19


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@donislawdev
donislawdev merged commit b561d47 into main Sep 28, 2026
8 checks passed
@donislawdev
donislawdev deleted the perf/w2-window branch September 28, 2026 21:51
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.

1 participant