Repository navigation
[Linux] Clear the frame when there is nothing to render - #192461
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the Linux platform shell's OpenGL and software compositors and renderers to correctly handle frames with zero layers by clearing the previous frame's contents instead of returning early. It also updates the software compositor to support rendering multiple layers with their respective offsets and sizes, and adds corresponding unit tests and mock OpenGL functions to verify these behaviors. There are no review comments, and I have no feedback to provide.
If everything on screen is transparent the engine sends a frame with no layers in it. We treated that as "nothing to do" and kept showing the last frame, so the old contents stayed on screen forever. Now each frame clears before the layers are drawn, so an empty frame clears the window. This also fixes transparent parts of a frame showing the previous frame through them. Two other things stopped an empty frame working: - The Wayland renderer returned before presenting the frame, so a first frame with no layers never showed the window. - The software renderer only drew a layer if it was the only layer, and drew it in the corner instead of at its position. It now draws all the layers like the OpenGL renderer does. Fixes flutter#191870
220e19f to
24d3c33
Compare
mattkae
left a comment
There was a problem hiding this comment.
Makes sense to me! So many code paths 🙃
|
autosubmit label was removed for flutter/flutter/192461, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/flutter/192461, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/flutter/192461, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/flutter/192461, because Pull request flutter/flutter/192461 is not in a mergeable state. |
# Conflicts: # engine/src/flutter/shell/platform/linux/fl_view_renderer_subsurface.cc
|
autosubmit label was removed for flutter/flutter/192461, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/flutter/192461, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
flutter/flutter@8b3e8f5...27fec0e 2026-09-14 [email protected] Add dedicated rubber band spring for overscroll recovery in BouncingScrollPhysics (flutter/flutter#187568) 2026-09-14 [email protected] Roll Skia from 83c984a6daf5 to 59904977fcbb (8 revisions) (flutter/flutter#192767) 2026-09-14 [email protected] Request unbuffered dispatch for platform view motion events after `_PlatformViewGestureRecognizer` rejects gesture (flutter/flutter#192259) 2026-09-14 [email protected] Roll Fuchsia GN SDK from ZsxUUK2SfA-TrNvb8... to PDJz3b3CL31uoLOkD... (flutter/flutter#192440) 2026-09-14 [email protected] ci(bringup): cleanup some bringup (flutter/flutter#192752) 2026-09-14 [email protected] Warn users on potential removal of dart:html in dry run (flutter/flutter#192710) 2026-09-14 [email protected] docs: migrate design document guidance to flutter/rfc (flutter/flutter#192648) 2026-09-14 [email protected] Sync CHANGELOG.md from stable (flutter/flutter#192499) 2026-09-14 [email protected] Roll Skia from 7a6fd7ff72d5 to 83c984a6daf5 (1 revision) (flutter/flutter#192745) 2026-09-14 [email protected] RELAND: [devicelab] Clean up Chrome profile directories and trap abort signals in web benchmarks (flutter/flutter#192655) 2026-09-14 [email protected] fix(web): hide --web-content-hash until content hashing is complete (flutter/flutter#192663) 2026-09-14 [email protected] Roll Skia from 527751088719 to 7a6fd7ff72d5 (2 revisions) (flutter/flutter#192725) 2026-09-14 [email protected] Roll Skia from eaf9f82813eb to 527751088719 (1 revision) (flutter/flutter#192722) 2026-09-14 [email protected] Roll Fuchsia Linux SDK from AQu85JoTHCMET3Q8G... to 7R1l5MhSZZUr1Q6D1... (flutter/flutter#192719) 2026-09-14 [email protected] [Linux] Clear the frame when there is nothing to render (flutter/flutter#192461) If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
If everything on screen is transparent the engine sends a frame with no layers in it. We treated that as "nothing to do" and kept showing the last frame, so the old contents stayed on screen forever.
Now each frame clears before the layers are drawn, so an empty frame clears the window. This also fixes transparent parts of a frame showing the previous frame through them.
Two other things stopped an empty frame working:
Fixes #191870