LCD Text Rendering – Algorithm, Heuristics & Scroll Raster Impacts
Blink28611 Marras 2025

LCD Text Rendering – Algorithm, Heuristics & Scroll Raster Impacts

The source text provides an extensive technical overview of LCD text rendering (subpixel antialiasing) within the Google Chrome browser's architecture, involving the Blink rendering engine and the Skia graphics library. It details how LCD rendering exploits subpixel geometry to enhance text sharpness but introduces significant complexity regarding color alignment, which Skia manages using a "gamma hack" for correct blending. A major focus is placed on the numerous heuristics Chrome uses to enable or disable LCD text, such as requiring opaque backgrounds, integer transforms, and specific platform capabilities, to prevent color fringing artifacts. Furthermore, the document thoroughly explains the trade-off between text quality and performance when scrolling, noting that modern Chrome often prioritizes smooth composited scrolling by falling back to grayscale antialiasing over preserving crisp LCD text.

Jaksot(417)

cc::PropertyTrees

cc::PropertyTrees

(TransformTree / ClipTree / EffectTree / ScrollTree) with nodes cc::TransformNode / ClipNode / EffectNode / ScrollNode — The impl‑side property‑tree state that positions, clips, blends, and scrolls co...

22 Syys 202534min

cc::LayerTreeHostImpl

cc::LayerTreeHostImpl

The compositor‑thread twin that owns the active/pending trees, runs impl‑side animations/scroll, and prepares draw. Implements cc::InputHandler for threaded scrolling/pinch.

22 Syys 202546min

main —> impl cc::LayerTreeHost

main —> impl cc::LayerTreeHost

Packages updated layers/property trees; kicks a commit to the compositor thread (via the proxy).

22 Syys 202536min

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