Chrome's CSS Scroll Snap Implementation: Blink and Compositor Deep Dive
Blink28629 Loka 2025

Chrome's CSS Scroll Snap Implementation: Blink and Compositor Deep Dive

The source provides an extensive technical explanation of the implementation of CSS Scroll Snap within the Google Chrome browser, specifically detailing how the feature is managed across the Blink rendering engine and the Chromium Compositor (CC). It begins by outlining the historical evolution of scroll snapping from early coordinate-based specifications to the modern element-based model, which uses properties like scroll-snap-type and scroll-snap-align. The text then describes the division of labor: Blink handles the interpretation of CSS and calculates precise snap coordinates (SnapContainerData), while the Compositor thread utilizes this data along with various SnapSelectionStrategy objects to manage smooth scroll animations, handle user input, and ensure correct snapping behavior (including managing the 50% proximity threshold and scroll-snap-stop priority). Finally, the document discusses future developments for the feature, such as the introduction of scroll snap events and potential fine-grained control for developers.


Jaksot(486)

blink::PropertyTreeManager

blink::PropertyTreeManager

Bridges Blink’s paint property trees into cc property trees: creates/updates cc TransformNode, ClipNode, EffectNode, and ScrollNode (including inner/outer viewport scroll nodes).

22 Syys 202539min

blink::PaintArtifactCompositor

blink::PaintArtifactCompositor

Decides what needs to be composited and prepares the main‑thread representation to feed cc (layers if needed, scrollbar compositing, etc.).

22 Syys 202542min

blink::PaintArtifact

blink::PaintArtifact

The immutable package of paint chunks + display items for this frame, used to drive compositing without re‑painting.

21 Syys 202536min

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

The paint property trees captured during painting (transform, clip, effect/opacity, scroll offset) that define visual & coordinate‑space state.

21 Syys 202541min

blink::PaintController

blink::PaintController

Records drawing into a DisplayItemList, segmenting it into PaintChunks keyed by property‑tree state. (Output: a PaintArtifact.)

21 Syys 202533min

blink::LayoutView (root of the layout tree)

blink::LayoutView (root of the layout tree)

Computes geometry for boxes when layout is dirty.

21 Syys 202539min

blink::StyleEngine / style resolver

blink::StyleEngine / style resolver

Recalculates computed styles that changed since last frame (if any).

21 Syys 202542min

blink::Page → blink::LocalFrame / LocalFrameView

blink::Page → blink::LocalFrame / LocalFrameView

The document’s frame & viewport; LocalFrameView is the scrollable root that triggers layout/paint when needed. provided source outlines the fundamental components of the Blink rendering engine, specif...

21 Syys 202539min