# cc/

This directory contains a compositor, used in both the renderer and the
browser.  In the renderer, Blink is the client.  In the browser, both
ui and Android browser compositor are the clients.

The public API of the compositor is LayerTreeHost and Layer and its
derived types.  Embedders create a LayerTreeHost (single, multithreaded,
or synchronous) and then attach a tree of Layers to it.

When Layers are updated they request a commit, which takes the structure
of the tree of Layers, the data on each Layer, and the data of its host and
atomically pushes it all to a tree of LayerImpls and a LayerTreeHostImpl
and LayerTreeImpl.  The main thread (which owns the tree of Layers
and the embedder) is blocked during this commit operation.

The commit is from the main thread Layer tree to the pending tree in
multithreaded mode.  The pending tree is a staging tree for
rasterization.  When enough rasterization has completed for
invalidations, the pending tree is ready to activate.  Activate is an
analogous operation to commit, and pushes data from the pending tree to
the active tree.  The pending tree exists so that all of the updates
from the main thread can be displayed to the user atomically while
the previous frame can be scrolled or animated.

The single threaded compositor commits directly to the active
tree and then stops drawing until the content is ready to be drawn.

The active tree is responsible for drawing.  The Scheduler and its
SchedulerStateMachine decide when to draw (along with when to commit,
etc etc).  "Drawing" in a compositor consists of LayerImpl::AppendQuads
which batches up a set of DrawQuads and RenderPasses into a
CompositorFrame which is sent via a CompositorFrameSink.

CompositorFrames from individual compositors are sent to the
SurfaceManager (which is in the GPU process). The SurfaceAggregator combines all
CompositorFrames together when asked to by the Display. These are given to the
viz::DirectRenderer, which finally draws the entire composited browser contents.
See //components/viz for more details on the display compositor.

Design documents for the graphics stack can be found at
[chromium-graphics](https://www.chromium.org/developers/design-documents/chromium-graphics).

## Other Docs

* [How cc Works](../docs/how_cc_works.md)

## Glossaries

### Active CompositorFrame

### Active Tree
The set of layers and property trees that was/will be used to submit a
CompositorFrame from the layer compositor. Composited effects such as scrolling,
pinch, and animations are done by modifying the active tree, which allows for
producing and submitting a new CompositorFrame.

### CompositorFrame
A set of RenderPasses (which are a list of DrawQuads) along with metadata.
Conceptually this is the instructions (transforms, texture ids, etc) for how to
draw an entire scene which will be presented in a surface.

### CopyOutputRequest (or Copy Request)
A request for a texture (or bitmap) copy of some part of the compositor's
output. Such requests force the compositor to use a separate RenderPass for the
content to be copied, which allows it to do the copy operation once the
RenderPass has been drawn to.

### ElementID
Chosen by cc's clients and can be used as a stable identifier across updates.
For example, blink uses ElementIDs as a stable id for the object (opaque to cc)
that is responsible for a composited animation. Some additional information in
[element_id.h](https://codesearch.chromium.org/chromium/src/cc/paint/element_id.h)

### DirectRenderer
An abstraction that provides an API for the Display to draw a fully-aggregated
CompositorFrame to a physical output. Subclasses of it provide implementations
for various backends, currently GL, Skia, or Software. See [viz::DirectRenderer](https://codesearch.chromium.org/chromium/src/components/viz/service/display/direct_renderer.h)
for details.

### Layer
A conceptual piece of content that can appear on screen and has some known
position with respect to the viewport.  The Layer class only is used on the
main thread.  This, along with LayerTreeHost, is the main API for the
compositor.

### LayerImpl
The same as Layer, but on the compositor thread.

### LayerTree

### Occlusion Culling
Avoiding work by skipping over things which are not visible due to being
occluded (hidden from sight by other opaque things in front of them). Most
commonly refers to skipping drawing (ie culling) of DrawQuads when other
DrawQuads will be in front and occluding them.

### Property Trees

See also presentations on [Compositor Property Trees](https://docs.google.com/presentation/d/1V7gCqKR-edNdRDv0bDnJa_uEs6iARAU2h5WhgxHyejQ/preview)
and [Blink Property Trees](https://docs.google.com/presentation/u/1/d/1ak7YVrJITGXxqQ7tyRbwOuXB1dsLJlfpgC4wP7lykeo/preview).

### Display
A controller class that takes CompositorFrames for each surface and draws them
to a physical output. See [viz::Display](https://codesearch.chromium.org/chromium/src/components/viz/service/display/display.h)  for details.

### Draw
Filling pixels in a physical output (technically could be to an offscreen
texture), but this is the final output of the display compositor.

### DrawQuad
A unit of work for drawing. Each DrawQuad has its own texture id, transform,
offset, etc.

### Shared Quad State
A shared set of states used by multiple draw quads. DrawQuads that are linked to
the same shared quad state will all use the same properties from it, with the
addition of things found on their individual DrawQuad structures.

### Render Pass
A list of DrawQuads which will all be drawn together into the same render target
(either a texture or physical output). Most times all DrawQuads are part of a
single RenderPass. Additional RenderPasses are used for effects that require a
set of DrawQuads to be drawn together into a buffer first, with the effect
applied then to the buffer instead of each individual DrawQuad.

### Render Surface
Synonym for RenderPass now. Historically part of the Layer tree data structures,
with a 1:1 mapping to RenderPasses. RenderSurfaceImpl is a legacy piece that
remains.

### Surface

### Record

### Raster

### Paint

### Pending CompositorFrame

### Pending Tree
The set of layers and property trees that is generated from a main frame (or
BeginMainFrame, or commit). The pending tree exists to do raster work in the
layer compositor without clobbering the active tree until it is done. This
allows the active tree to be used in the meantime.

### Composite
To produce a single graphical output from multiple inputs. In practice, the
layer compositor does raster from recordings and manages memory, performs
composited effects such as scrolling, pinch, animations, producing a
CompositorFrame. The display compositor does an actual "composite" to draw the
final output into a single physical output.

### Invalidation
Invalidation is a unit of content update.  Any content updates from
Blink or ui must be accompanied by an invalidation to tell the compositor
that a piece of content must be rerasterized.  For example, if a 10x10
div with a background color has its width increased by 5 pixels, then
there will be a 5x10 invalidation (at least) for the new space covered
by the larger div.

Ideally, invalidations represent the minimum amount of content that must
be rerastered from the previous frame.  They are passed to the compositor
via Layer::SetNeedsDisplay(Rect).  Invalidation is tracked both to
minimize the amount of raster work needed, but also to allow for
partial raster of Tiles.  Invalidations also eventually become damage.

### Damage
Damage is the equivalent of invalidation, but for the final display.
As invalidation is the difference between two frames worth of content,
damage is the difference between two CompositorFrames.  Damage is
tracked via the DamageTracker.  This allows for partial swap, where
only the parts of the final CompositorFrame that touch the screen
are drawn, and only that drawn portion is swapped, which saves quite
a bit of power for small bits of damage.

Invalidation creates damage, in that if a piece of content updates, then
that content invalidation creates damage on screen.  Other things that
cause damage are analogous operations to invalidations, but on Layers.
For example, moving a Layer around, changing properties of Layers (e.g.
opacity), and adding/removing/reordering Layers will all create damage
(aka screen updates) but do not create invalidations (aka raster work).

### Tiles
An abstraction of a piece of content of a Layer.  A tile may be
rasterized or not.  It may be known to be a solid color or not.
A PictureLayerImpl indirectly owns a sparse set of Tiles to
represent its rasterizable content.  When tiles are invalidated,
they are replaced with new tiles.

### Prepare Tiles
Prioritize and schedule needed tiles for raster. This is the entry point to a
system that converts painting (raster sources / recording sources) into
rasterized resources that live on tiles. This also kicks off any dependent image
decodes for images that need to be decode for the raster to take place.

### Device Scale Factor
The scale at which we want to display content on the output device. For very
high resolution monitors, everything would become too small if just presented
1:1 with the pixels. So we use a larger number of physical pixels per logical
pixels. This ratio is the device scale factor. 1 or 2 is the most common on
ChromeOS. Values between 1 and 2 are common on Windows.
