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)
- sends a layer list instead of a tree, and generates final property trees in blink instead of re-generating them in cc (Status: launched in M75)
- compositing decisions made after paint (Status: launched in M94)
Presentations
BlinkOn 3.0 Presentation, video (start here to find out more about the project)
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.
platform/graphics/paint/README.md
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.