⚡ Render eligible frame drop shadows without filter surfaces - #11260
Open
superalex wants to merge 8 commits into
Open
⚡ Render eligible frame drop shadows without filter surfaces#11260superalex wants to merge 8 commits into
superalex wants to merge 8 commits into
Conversation
superalex
marked this pull request as draft
August 18, 2026 06:34
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
5 times, most recently
from
August 18, 2026 06:55
b25d85d to
8fde76f
Compare
superalex
marked this pull request as ready for review
August 18, 2026 06:55
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
from
August 18, 2026 07:04
8fde76f to
2331f98
Compare
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
4 times, most recently
from
August 19, 2026 07:46
be1ce2b to
d0f084a
Compare
belen-albeza
marked this pull request as draft
August 19, 2026 08:20
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
from
August 19, 2026 08:38
d0f084a to
88ba49c
Compare
superalex
marked this pull request as ready for review
August 19, 2026 08:45
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
from
August 19, 2026 10:10
88ba49c to
a8cf55d
Compare
Add a direct container-geometry path for frames with fill whose descendants stay inside the frame bounds. This skips the filter surface and per-child silhouette passes, drawing the frame shape on DropShadows with a blur saveLayer instead. Tighten the blur saveLayer to compute_fast_bounds so Skia does not allocate the full surface.
When clip_content is true, clipped frames only need a lightweight check for nested drop shadows before using the direct container path. Overflow frames still walk descendant extrects for containment. Document that visible strokes can make the fast-path shadow slightly narrower than the slow path; we keep those frames eligible for speed.
HQ tiles are 512px and the atlas stays at 4096² (64 full-size slots). Browser zoom plus a forced ?dpr= can need more visible tiles than that, and a framebuffer larger than the GPU allows. Pack interest tiles into smaller atlas cells, blit at 512 then scale, and inset Linear samples so seams do not bleed. Clamp the canvas backing store and DPR together, wrap Skia at the real drawingBuffer size, and wait one frame after DPR changes so CSS client size and overlays stay aligned.
During view gestures, fast mode renders tiles without shadows or blur. Writing those tiles into the doc/tile atlas left shadowless patches when render_from_cache overlayed them on the scaled preview. Keep the last HQ atlas tiles until the post-gesture full-quality render completes.
superalex
force-pushed
the
superalex-frame-shadow-happy-path
branch
from
August 19, 2026 16:23
fa06518 to
f882836
Compare
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.
What
Why
How
render_frame_container_drop_shadow(rrect + blur saveLayer on DropShadows) instead of filter surfaces and child silhouettes.compute_fast_boundsso Skia does not allocate the offscreen layer to the full surface clip.