cc::EffectTree
Blink2862 Marras 2025

cc::EffectTree

The source provides an extensive technical explanation of the Effect Property Tree within the Chromium compositor, which is crucial for managing how visual effects are applied to web content. This tree structure, composed of EffectNodes, decouples effects (such as opacity, filters, and blending modes) from the traditional layer hierarchy to centralize calculations, improving rendering performance. A primary function of the effect tree is determining when content must be rendered into a separate RenderSurface (an offscreen texture) for correct compositing, flagged by the render_surface_reason field for complex needs like filters or non-standard blend modes. The document details the structure of an EffectNode, including fields that track cumulative properties like screen_space_opacity and visibility flags like is_drawn, and explains how the effect tree seamlessly interacts with the Transform and Clip property trees to ensure correct coordinate spaces and boundaries are maintained during effect application. Finally, it addresses the tree's role in facilitating performant CSS animations by allowing real-time property updates on the compositor thread and ensuring stability through element identification.

Jaksot(397)

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

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

These are the nodes within those four trees. Every piece of painted content (a “paint chunk”) is associated with a tuple of (Transform, Clip, Effect, Scroll) nodes—its PropertyTreeState. This precisel...

10 Loka 202533min

blink::PaintPropertyTreeBuilder

blink::PaintPropertyTreeBuilder

builds/updates paint property trees.Consumes the layout/fragment data and produces the four paint property trees (Transform, Clip, Effect, Scroll) for the current frame. These trees encode coordinate ...

10 Loka 202547min

blink::PrePaintTreeWalk

blink::PrePaintTreeWalk

cross‑frame pre‑paint traversal. Runs in the InPrePaint lifecycle phase. Walks the entire layout tree starting at the root LocalFrameView, updating paint invalidation state and computing the context n...

10 Loka 202531min

blink::NGPhysicalFragment and friends

blink::NGPhysicalFragment and friends

Layout takes the styled DOM and produces a fragment tree of positioned boxes. In modern Blink this is LayoutNG; the core artifact is NGPhysicalFragment, which stores geometry and is used downstream fo...

10 Loka 202537min

blink::StyleEngine

blink::StyleEngine

style invalidation & resolution (recalc). 
Given DOM/style changes since the last frame, StyleEngine computes updated ComputedStyles, manages active stylesheets/media query state, and marks the right ...

10 Loka 202534min

blink::Document & blink::DocumentLifecycle

blink::Document & blink::DocumentLifecycle

states that gate phases. The document owns the DOM and keeps a DocumentLifecycle state machine that ensures we do things in phase order (style before layout, pre‑paint before paint, etc.). Lifecycle t...

10 Loka 202535min