the Chromium logo

The Chromium Projects

Slimming Paint (a.k.a. Redesigning Painting and Compositing)

Slimming Paint was a project to re-implement the Blink<->cc picture recording API to work in terms of a global display list rather than a tree of cc::Layers (~aka GraphicsLayer in Blink terminology). It was completed in several phases from 2015 to 2021.

The project simplified compositing (following launch, 22,000 lines of c++ were removed), fixed correctness (fundamental compositing bug), improved performance (total chrome CPU usage -1.3%, 3.5%+ improvement to 99th percentile scroll update, 2.2%+ improvement to 95th percentile input delay), and led to a more flexible architecture which has been built upon by many other projects (e.g., HitTestOpaqueness, RasterInducingScroll).

Phases

SlimmingPaintV1 - paint using display items (Status: launched in M45)

SlimmingPaintInvalidation - rewrite of paint invalidation using display items, property trees introduced in blink (Status: launched in M58)

SlimmingPaintV175 - uses property trees for painting in blink, introduces paint chunks, uses paint chunks for raster invalidation (Status: launched in M67)

BlinkGenPropertyTrees

CompositeAfterPaint

Presentations

BlinkOn 3.0 Presentation, video (start here to find out more about the project)

BlinkOn 4 presentation

Blink Property Trees (also reviews the Composite-After-Paint (formerly "SPV2") design)

BlinkOn 9 presentation covering current compositing architecture

Core team members

Chris Harrelson (chrishtr@), overall TL

Mason Freed (masonfreed@) Blink

Philip Rogers (pdr@) Blink

Stephen Chenney (schenney@) Blink

Xianzhu Wang (wangxianzhu@) Blink

Adrienne Walker (enne@) cc

Robert Flack (flackr@) animations

David Bokan (bokan@) viewports

Close relatives

Fredrik Söderquist (fs@opera.com) Blink

Erik Dahlstrom (ed@opera.com) Blink

Florin Malita (fmalita@) Blink / Skia

Mike Klein (mtklein@) Skia

Mike Reed (reed@) Skia

A number of other people are involved at least tangentially for design discussions and related projects.

Resources and Design Docs

The BlinkNG blogpost has a high-level overview of how slimming paint fits into the overall rendering architecture.

core/paint/README.md

platform/graphics/paint/README.md

Slimming paint invalidation

Representation and implementation of display lists in Blink

Layerization based on display lists

Blink paintlist update algorithm details

Bounding Rectangle Strategy for Slimming Paint

Slimming Paint for UI Compositor

Debugging blink objects has information about inspecting the datastructures introduced by slimming paint.

Some out of date/historical docs are here.