Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/README.md

Issue 1379883003: Create PaintChunk and begin writing code to build paint chunks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: enable RuntimeEnabledFeature for PaintChunkerTest Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/paint/README.md
diff --git a/third_party/WebKit/Source/platform/graphics/paint/README.md b/third_party/WebKit/Source/platform/graphics/paint/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2de5acaa676fe4971a447ad98f86edca862c1216
--- /dev/null
+++ b/third_party/WebKit/Source/platform/graphics/paint/README.md
@@ -0,0 +1,115 @@
+# Platform paint code
+
+This directory contains the implementation of display lists and display
+list-based painting, except for code which requires knowledge of `core/`
+concepts, such as DOM elements and layout objects.
+
+This code is owned by the [paint team][paint-team-site].
+
+Slimming Paint v2 is currently being implemented. Unlike Slimming Paint v1, SPv2
+represents its paint artifact not as a flat display list, but as a list of
+drawings, and a list of paint chunks, stored together.
+
+This document explains the SPv2 world as it develops, not the SPv1 world it
+replaces.
+
+[paint-team-site]: https://www.chromium.org/developers/paint-team
+
+## Paint artifact
+
+The SPv2 paint artifact consists of a list of display items (ideally mostly or
+all drawings), partitioned into *paint chunks* which define certain *paint
+properties* which affect how the content should be drawn or composited.
+
+## Paint properties
+
+Paint properties define characteristics of how a paint chunk should be drawn,
+such as the transform it should be drawn with. To enable efficient updates,
+a chunk's paint properties are described hierarchically. For instance, each
+chunk is associated with a transform node, whose matrix should be multiplied by
+its ancestor transform nodes in order to compute the final transformation matrix
+to the screen.
+
+*** note
+Support for all paint properties has yet to be implemented in SPv2.
+***
+
+*** aside
+TODO(jbroman): Explain the semantics of transforms, clips, scrolls and effects
+as support for them is added to SPv2.
+***
+
+## Display items
+
+A display item is the smallest unit of a display list in Blink. Each display
+item is identified by an ID consisting of:
+
+* an opaque pointer to the *display item client* that produced it
+* a type (from the `DisplayItem::Type` enum)
+* a scope number
+
+*** aside
+TODO(jbroman): Explain scope numbers.
+***
+
+In practice, display item clients are generally subclasses of `LayoutObject`,
+but can be other Blink objects which get painted, such as inline boxes and drag
+images.
+
+*** note
+It is illegal for there to be two drawings with the same ID in a display item
+list.
+***
+
+Generally, clients of this code should use stack-allocated recorder classes to
+emit display items to a `DisplayItemList` (using `GraphicsContext`).
+
+### Standalone display items
+
+#### [CachedDisplayItem](CachedDisplayItem.h)
+
+The type `DisplayItem::CachedSubsequence` indicates that the previous frame's
+display item list contains a contiguous sequence of display items which should
+be reused in place of this `CachedDisplayItem`.
+
+*** note
+Support for cached subsequences for SPv2 is planned, but not yet fully
+implemented.
+***
+
+Other cached display items refer to a single `DrawingDisplayItem` with a
+corresponding type which should be reused in place of this `CachedDisplayItem`.
+
+#### [DrawingDisplayItem](DrawingDisplayItem.h)
+
+Holds an `SkPicture` which contains the Skia commands required to draw some atom
+of content.
+
+### Paired begin/end display items
+
+*** aside
+TODO(jbroman): Describe how these work, once we've worked out what happens to
+them in SPv2.
+***
+
+## Display item list
+
+Callers use `GraphicsContext` (via its drawing methods, and its
+`displayItemList()` accessor) and scoped recorder classes, which emit items into
+a `DisplayItemList`.
+
+`DisplayItemList` is responsible for producing the paint artifact. It contains
+the *current* paint artifact, which is always complete (i.e. it has no
+`CachedDisplayItem` objects), and *new* display items and paint chunks, which
+are added as content is painted.
+
+When the new display items have been populated, clients call
+`commitNewDisplayItems`, which merges the previous artifact with the new data,
+producing a new paint artifact, where `CachedDisplayItem` objects have been
+replaced with the cached content from the previous artifact.
+
+At this point, the paint artifact is ready to be drawn or composited.
+
+*** aside
+TODO(jbroman): Explain invalidation.
+***

Powered by Google App Engine
This is Rietveld 408576698