test(cypress): defer ResizeObserver callbacks to next frame#60189
Merged
test(cypress): defer ResizeObserver callbacks to next frame#60189
Conversation
-e Signed-off-by: Peter Ringelmann <peter.ringelmann@nextcloud.com>
artonge
approved these changes
May 6, 2026
susnux
approved these changes
May 6, 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.
Summary
users_manager.cy.tshas been crashing the Electron renderer on CI repeatedly. Heap snapshots ruled out OOM (dialog mount only adds ~2 MB to JS heap). A local Cypress pre-crash video showsResizeObserver loop completed with undelivered notificationsfiring several times when the edit dialog and the Manager NcSelect open.The loop seems to come from Floating UI's
autoUpdate(used byNcSelectfor popper positioning): each resize triggers a position recalc, which changes layout, which triggers another resize. We already suppress this as an uncaught exception incypress/support/e2e.ts, but suppression only helps if the renderer survives. On slower CI CPUs the loop tanks the main thread until Electron's page unresponsive watchdog kills the renderer outright. Cypress then reports a generic renderer crashed with boilerplate advice aboutexperimentalMemoryManagementandnumTestsKeptInMemory(red herring, neither helped).This patches
ResizeObserverso callbacks fire on the next animation frame, breaking the synchronous loop. Workaround in the test harness, not a real fix. The proper fix belongs upstream in@nextcloud/vueand will be filed separately.Checklist
3. to review, feature component)stable32)