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(395)

Chrome Compositor Animation Architecture (cc)

Chrome Compositor Animation Architecture (cc)

The sources provide an extensive architectural overview of the Chrome Compositor Animation (cc) subsystem, which is responsible for executing visual animations like transforms and opacity changes effi...

15 Loka 202541min

Blink's Graph Data Structures and Traversals

Blink's Graph Data Structures and Traversals

The text provides an extensive overview of the graph-structured data structures used within Blink, Chromium's rendering engine, detailing how web content is processed from initial input to final displ...

13 Loka 202539min

blink::PropertyTreeManager

blink::PropertyTreeManager

bridges Blink property trees → cc property trees. Given Blink’s Transform/Clip/Effect/Scroll nodes (from paint property trees), this class creates/updates the cc counterparts (cc::TransformNode, cc::C...

10 Loka 202546min

blink::PaintArtifactCompositor

blink::PaintArtifactCompositor

turns chunks into compositor layers & updates cc property trees. Consumes the new PaintArtifact and does the layerization and property‑tree updates required for compositor draw. It supports fast paths...

10 Loka 202529min

blink::PaintChunk and blink::DisplayItemList

blink::PaintChunk and blink::DisplayItemList

grouping and content. PaintChunk: groups sequential display items that share the same property‑tree state and cull/visibility; it’s the unit we layerize and invalidate.DisplayItemList: the recorded Sk...

10 Loka 202537min

blink::PaintArtifact

blink::PaintArtifact

the immutable “what to draw” package for this frame. A PaintArtifact is the product of Blink painting: a DisplayItemList plus an ordered vector of PaintChunks. It is immutable post‑creation and design...

10 Loka 202531min

blink::PaintController

blink::PaintController

builds the display list + paint chunks and manages caching. As painters call into GraphicsContext, they also drive a PaintController which groups drawing into display items and paint chunks (each keye...

10 Loka 202529min

blink::GraphicsContext

blink::GraphicsContext

immediate drawing API that records to a display list. Painters for layout objects use GraphicsContext to “draw”—but in modern Blink those calls get recorded into a display list (PaintRecord) backed by...

10 Loka 202544min