Conversation
Member
Jenkins BuildsClick to see older builds (44)
|
alexjba
marked this pull request as ready for review
August 24, 2026 19:02
alexjba
requested review from
alaibe,
caybro,
friofry,
jrainville and
saledjenic
August 24, 2026 19:09
jrainville
approved these changes
Aug 24, 2026
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 1, 2026 14:51
a327e32 to
0378e66
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 1, 2026 14:57
0378e66 to
8b77efe
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 2, 2026 07:09
8b77efe to
17c2973
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 2, 2026 07:11
6cb2680 to
17c2973
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The regression test does not enforce the advertised exact cadence, and duplicated C declarations already exhibit signature drift.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 3
- Review effort level: Balanced
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 4, 2026 12:42
17c2973 to
caa277a
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 11, 2026 07:20
caa277a to
5d430fa
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 15, 2026 08:42
5d430fa to
131a022
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 15, 2026 13:26
131a022 to
f995c03
Compare
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 15, 2026 13:38
f995c03 to
5f6d574
Compare
The boosted incubation controller paced its gentle phase off the screen's
frame period: a bite of frameperiod/4 once per frame, which on the 60Hz the
bench process reports is 4ms every 16ms - a 24% duty cycle. Three quarters of
every metered load was the controller waiting for its next tick, and that
constant is what made preemptibility cost 4x and left a surface with 14ms of
work reading 56ms.
Neither quantity is a property of the refresh rate. The bite bounds how long a
posted event waits behind incubation; the interval bounds how much of the GUI
thread incubation takes. Both are absolute times, so they are constants now: a
2ms bite every 4ms.
Every measurement below comes from offscreen storybook benches that are not
part of this PR; they live on branch feat/storybook-wallet-loader.
Release, offscreen, whale profile, arms alternated between rounds, eight rounds
per arm at load average 3.5-6.2. Warm phase, before -> after:
wallet section t_first_asset_row 110.6-152.8 -> 51.0-74.2 (no overlap)
t_ready 92.7-130.3 -> 34.7-53.1
max_stall 9.6-16.2 -> 10.1-14.3
stalls_over_8ms 1-3 med 2 -> 1-3 med 1
asset detail t_content 53.7-89.8 med 65.1 -> 20.1-42.9 med 27.2
cold t_content 48.9-66.5 med 50.3 -> 29.0-35.4 med 34.7
max_stall 4.3-9.8 med 7.4 -> 5.3-7.0 med 6.6
cold max_stall 8.4-12.9 med 12.3 -> 9.2-11.3 med 9.8
Both surfaces are inside their wall-clock budgets for the first time, with an
object graph identical to before, run for run.
Halving the bite is not what did it: a bite is a lower bound on the block it
produces, because incubateFor() returns only after finishing the object it is
midway through creating. Across every arm measured, incubated blocks stayed in
the same 4-7ms band whether the budget was 2ms or 4ms. Only the duty cycle
moves the wall clock, which is why the two metrics stopped opposing each other.
The cadence paces every asynchronous Loader in the app, so it was also measured
away from the two wallet surfaces it was chosen on. A chat section load (1000
chats / 2000 messages, offscreen, eight rounds per arm alternated) reproduces
the result with no change in shape - warm t_first_message_row 196.7-382.1 med
254.2 -> 121.9-173.0 med 145.8, cold 607.9-701.9 med 653.6 -> 473.1-551.3 med
487.5, max_stall unmoved in both phases, objects_settled 19131 on all 32 rows
of both arms. An interaction bench scrolling a list through repeated section
loads with a gentle hint held, counting frames on QQuickWindow::afterAnimating
against control windows of the same scroll with nothing incubating, is better
or equal at every frame load against the old cadence on a 60Hz display; on a
120Hz display it costs 2-3.5 points of late-frame rate at light frame load,
with the late-frame count unmoved because the incubation window is 10-16%
shorter.
That is the complement of the load result: the duty cycle is the load time and
the bite is not, the bite is the frame cost and the duty is not. Halving the
bite at constant duty more than halves the late-frame rate; a third less duty
barely moves it. The new test pins all three constants with the reason each one
is what it is.
The gentle window, the hint mechanism, the boosted phase and the idle poll are
untouched; PR #21921 still owns those.
alexjba
force-pushed
the
perf/incubation-duty-cycle
branch
from
September 15, 2026 14:43
5f6d574 to
7030c86
Compare
…laration The controller test declared the install function with three arguments while the export takes four, so its boost gap was whatever sat in the register. The cadence test now installs the shipped configuration and compares the bite and interval exactly instead of by one-sided bounds. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Stacked on #22072.