[release/11.0] Stabilize Virtualize initial item positioning - #69170
Open
github-actions[bot] wants to merge 1 commit into
Open
[release/11.0] Stabilize Virtualize initial item positioning#69170github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
* Stabilize Virtualize initial item positioning. * Rename. * Boarder should not take part in calculations. * Improve unit test readibility. * Treat unavailable final InitialItemIndex alignment as aborted. * Preserve Virtualize running item size average. Use the accumulated measurement when applying initial-index geometry instead of replacing it with the latest rendered window, and add regression coverage for the measurement history. * Unquarantine.
dariatiurina
approved these changes
Sep 9, 2026
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.
Backport of #68886 to release/11.0
/cc @ilonatommy
Stabilize Virtualize initial item positioning
Prevent viewport oscillation while applying
InitialItemIndex.Description
When
Virtualizeor a virtualizedQuickGridinitially positions a large list near its end, rendered-item measurements can repeatedly change the spacer geometry while the requested item is still being aligned. This creates a feedback loop:Depending on rendering and network timing, users can see the viewport repeatedly jump, temporarily become empty, or finish at the wrong item.
This change keeps spacer geometry fixed while the initial viewport is being filled. Once real items cover the viewport, the accumulated measured item size is applied once and the requested item is realigned against the resulting spacer geometry.
The positioning process is split into two explicit phases:
The existing running average is preserved. The change also corrects the E2E viewport-coverage helper to compare against the scroll container's scaled content viewport instead of its outer border box, and unquarantines the existing QuickGrid regression test.
Fixes #68724
Customer Impact
Customers using
InitialItemIndexwithVirtualizeor virtualizedQuickGrid, particularly with tall containers and rendered rows whose size differs from the initial estimate, can see severe initial viewport instability (a few seconds of jumps).The reported behavior includes repeated visible jumps, blank viewport frames, and the requested item being lost under slower Server-side rendering or network conditions. Avoiding
InitialItemIndexor disabling virtualization are the only practical application-level workarounds.Regression?
InitialItemIndexis new functionality in net11.Risk
The change is limited to
InitialItemIndexpositioning and does not modify public API or normal user-driven virtualization behavior. However, it changes the internal measurement, spacer, and alignment lifecycle used by bothVirtualizeandQuickGrid.Verification
Manual verification was performed with Server-side and WebAssembly
QuickGridscenarios using provider delay, CPU throttling, and network throttling. Before the fix, the viewport visibly oscillated and could lose the target item. After the fix, the requested item remained stable while the viewport filled.Packaging changes reviewed?