The rendering core team is a long-term engineering team that owns the overall rendering pipeline and most of the core rendering stages. Specifically style, layout, compositing, and paint. The team is also responsible for text, fonts, editing, canvas, images, hit testing, and SVG.
The team is made up of contributors from many different companies and see regular contributions from many more as well as from individual contributors.
Last updated: Thu Oct 29, 2019 by Chris
The rendering core team is focused on the architectural principles of reliability, performance and extensibility of the core rendering technologies of the web: HTML, DOM and CSS. We also make sure to satisfy top requests from customers. Our primary customers are web developers and other teams within Chrome which build features on top of rendering.
- Rendering update performance is proportional to the amount of change, and “amount of change” has an intuitive explanation.
- Rendering performance of a component need not depend on where it's put within a containing document, or the size of that document.
- Rendering performance of a document need not depend on the size of components contained within it.
- Same goes for encapsulation - a component can be included without breaking a containing page, and a containing page cannot break a component.
- Rendering features work correctly and have rational, understandable definitions.
- Rendering features work the same on all platforms, and on all browsers.
- Web developers can extend the capabilities of Rendering in novel ways without performance or ergonomic penalties.
- Chromium developers can extend or embed the Rendering code in new and novel ways without excessive effort or performance penalties.
List of ongoing major projects owned by the team or involving multiple team members.
- CSS Containment Ongoing work to optimize performance isolation for CSS containment.
- LayoutNG, issue 591099. A new layout system for Blink designed with fragmentation, extensibility and interruptibility in mind. Phase 1 (block flow) launched in M77. Further layout modes (tables, flexbox, grid) and block-fragmentation support targeted for 2020.
- Composite After Paint (CAP), issue 471333. Previously known as Slimming Paint v2. 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. It will result in a drastic simplification of the way that composited layers are represented in Blink and cc, which in turn will yield improved performance, correctness and flexibility.
- src: local() matching, issue 627143. Font matching and IPC improvements to allow for spec compliant font matching and improved web font performance.
Team organization and communication.
We use a set of public mailing list for technical discussions, questions, and announcements. Access is currently limited to subscribers but anyone may join by posting to the relevant list or following the web archives links below. Once subscribed the full historic archives are available.
- firstname.lastname@example.org Primary list for the team. Used for non-technical and generic technical discussions as well as for announcements.
- DOM team-specific list for technical and standards discussions.
- email@example.com Style (CSS) specific list for technical and standards discussions.
- firstname.lastname@example.org Layout, text, and font specific list for technical and standards discussions.
- email@example.com Paint, Compositing, and SVG specific list for technical and standards discussions. Also see this site.
There is bi-weekly meeting held over video conference every second Tuesday open to all team members, the meeting notes of which are available below and sent out to the public mailing list. If you're interested in participating please talk to Chris and he'll share instructions.
- Every second Tuesday 10:00 PDT (13:00 EDT, 18:00 BST, 19:00 CEST; Wednesday 02:00 JST, 03:00 AEST).
Meeting notes are public and are sent to rendering-core-dev, they're also available in this document: Meeting notes.
There is also a set of dedicated slack channels for the team. For logistical reasons these are limited to team members and collaborators. Please talk to one of the team members and they'll get you added as needed.
Many of the team members may also be found in the #chromium channel on freenode.
Adenilson Cavalcanti adenilson.cavalcanti - ARM San Jose - Performance
Anders Hartvoll Ruud andruud - Google Oslo - Style, Houdini
Chris Harrelson (lead) chrishtr - Google - San Francisco - All areas
David Baron - dbaron - Google Maryland (Remote) - Paint
David Grogan - dgrogan Google San Francisco Layout, Tables, Flexbox
Dominik Röttsches - drott Google Helsinki - Text, Fonts
Fredrik Söderquist fs - Opera Linköping - SVG
Frédéric Wang - fwang - Igalia Paris - Layout, MathML
Ian Kilpatrick (lead) ikilpatrick - Google Mountain View - Layout
Javier Fernandez jfernandez Igalia - A Coruña - Style, Layout, Grid
Joey Arhar jarhar - Google San Francisco - DOM
Kent Tamura tkent - Google Tokyo - Layout, Form controls
Koji Ishii kojii - Google Tokyo - Layout, Text, Fonts
Manuel Rego rego - Igalia Vigo - Layout, Grid
Mason Freed (lead) masonf - Google San Francisco - DOM
Morten Stenshorne mstensho - Google Oslo - Layout, Fragmentation, MultiCol
Oriol Brufau obrufau - Igalia Barcelona - Style, Layout, Grid
Philip Rogers pdr - Google San Francisco - Paint
Richard Townsend richard.townsend - ARM San Jose - Layout, Performance
Rob Buis rbuis - Igalia Hamburg - Layout, MathML
Rune Lillesveen (lead) futhark - Google Oslo - Style
Stefan Zager szager - Google San Francisco - Paint
Steinar H. Gunderson sesse - Google Oslo - Style
Stephen Chenney schenney - Google Atlanta - Paint
Vladimir Levin vmpstr - Google Waterloo - Async
Xianzhu Wang wangxianzhu - Google Mountain View - Paint
Xiaocheng Hu xiaochengh - Google Mountain View - Style
Yoshifumi Inoue yosin - Google Tokyo - Layout
If you're interested in getting involved and contributing to rendering there are many ways you could help and we'd love to have you. These range from filing good bug reports to creating test cases, reducing and triaging failures, fixing bugs and implementing new functionality.
Please see the chromium getting involved guide for generic advice and to help you get set up.
A good way to get started is to fix an existing bug. Bug fixes tend to be limited in scope, uncontroversial, and easy to evaluate.
Going through the bug database to find a suitable bug is quite a daunting task though. To make it a little easier we try to maintain a list of bugs that we think are suitable starter bugs. Those bugs are marked with a GoodFirstBug label. Use the following queries to see GoodFirstBug in the style & layout and paint & compositing components respectively. If you prefer, the following queries will show all open bugs in the respective bucket: style & layout, paint & compositing.
For a high-level overview of the rendering pipeline please see the Life of a Pixel (slide deck) talk that Steve Kobes gave a little while ago. It gives a very good overview and explains how the different steps in the pipeline work and interact with each other.
For more in-depth documentation about specific rendering stages see the relevant markdown files checked into the main source tree. The README.md file in each top level directory is a good starting point. Some of the key documents are linked below.
Each new feature and all major projects require a design document before the implementation work may commence. These documents are updated during the implementation phase and provides a detailed explanation of the feature or project as well as the history and the motivation.
Please add new design documents to the bottom of this list. Make sure they're world readable and, if possible, grant comment privileges to firstname.lastname@example.org rather than Anyone with a chromium.org account as not all contributors have chromium.org accounts.
- LayoutUnit & Subpixel Layout (2012)
- Line Box float -> LayoutUnit transition plan (2014)
- Blink Coordinate Spaces (2015)
- Eliminating Simple Text (2015)
- LayoutObject Tree API Proposal (2015)
- Using Zoom to Implement Device Scale Factor (2015)
- Unprefix CSS Writing Modes (2015)
- Slimming Paint (2016)
- LayoutNG (2016)
- Scroll Anchoring (2016)
- Shaper Driven Line Breaking (2016)
- Hyphenation in Blink (2016)
- "system-ui" generic font family (2016)
- Using ICU BiDi in LayoutNG (2016)
- Root Layer Scrolling (2017)
- Baseline in LayoutNG (2017)
- Offset Mapping between DOM/Canonical Text (2018)
- IntersectionObserver (2018)
- Style Update Roots (2018)
- Caret Position Bidi Affinity (2018)
- Style Memory Improvements (2018)
- Paint Touch-Action Rects (2018)
- Blink-generated property trees (BlinkGenPropertyTrees) (2019)
- Unified ComputedStyle Storage (2019)
- Flat Tree Order Style Recalc (2019)
- StyleResolver Cascade (2019)
- Skip Forced Style Update on Parsing Finished (2019)
- Paint Non-fast Scrollable Regions (2019)
- LayoutNG block fragmentation (2019)
- Moving out from NGPaintFragment (2019)
- NGFragmentItem (2019)
- CSS min/max (2019)
- MathML (2019)
- @font-face Loading and Full Document Style Invalidation (2020)
- Jankless ‘font-display: optional’ (2020)
- Reduce MediaQuery RuleSet changes (2020)
- FastBorderRadius (2019/2020)
- Improving UKM Client Counts (2020)
- Ensuring Rendering of Sub-pixel Borders (2020)
- Metrics for HTML Parsing (2020)
- Improving Tracking of Web Test Changes (2020)
- Dependency-Aware MatchedPropertiesCache (2020)
- Tree-scoped names in CSS (2020)
- Base background for color-scheme (2020)
- Interleaved Style and Layout (2020)
- Resolving Container Queries (2020)
- SVG Text NG (2021)
- Display Locking (vmpstr, Jan 2020)
- Font performance (xiaochengh, Feb 2020)
- Canvas (fserb, Feb 2020)
- Compositing memory (pdr, Feb 2020)
- Portals (lfg, Feb 2020)
- FlexNG (dgrogan, Mar 2020)
- Scrolling (samfort@microsoft, Mar 2020)
Google-internal design documents (aim is to migrate them to the list above; on request we can try to make part/all public)
The rendering core team is responsible for all bugs for the components listed below, including sub-components . Our policy is that all new bugs are to be triaged within a week of being filed and all P-0 and P-1 bugs are to be fixed in time for the next release. Failures to meet the policy is tracked in our weekly meeting and shared as part of the meeting notes
- Triage all bugs within 7 days.
- Fix P0 bugs within 15 days.
- Fix P1 regression bugs within 15 days.
- Re-triage all bugs every 365 days.