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

Unified Diff: mojo/services/gfx/composition/interfaces/nodes.mojom

Issue 1749063002: Mozart: Improve internal scene graph representation. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-0
Patch Set: avoid unnecessary hashtable lookups Created 4 years, 10 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
« no previous file with comments | « no previous file | mojo/services/gfx/composition/interfaces/scenes.mojom » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/gfx/composition/interfaces/nodes.mojom
diff --git a/mojo/services/gfx/composition/interfaces/nodes.mojom b/mojo/services/gfx/composition/interfaces/nodes.mojom
index 588a8eb2e7754a90779a1d72e6fe541c298c9555..602ec44b591c4917e8811dc1028f7dde88034d59 100644
--- a/mojo/services/gfx/composition/interfaces/nodes.mojom
+++ b/mojo/services/gfx/composition/interfaces/nodes.mojom
@@ -16,7 +16,9 @@ import "mojo/services/gfx/composition/interfaces/hit_tests.mojom";
// references to embedded scenes. Nodes are arranged to form a directed
// acyclic graph of drawing commands.
//
-// The node graph is processed in pre-order traversal. Starting from the
+// RENDERING
+//
+// The node graph is renderer in pre-order traversal. Starting from the
// root, the compositor applies the transformation, clip, applies the
// node's operation (if any), then recursively processes the node's children
// according to the node's combinator rule.
@@ -53,15 +55,51 @@ import "mojo/services/gfx/composition/interfaces/hit_tests.mojom";
// missing content for an earlier version of that content or for a placeholder
// if not available.
//
+// INSTANCING
+//
+// The compositor allows nodes to be referenced and reused multiple times
+// within a scene (this is known as instancing). Instancing makes it easier
+// to take advantage of combinators for interleaving placeholder content
+// when certain nodes are blocked from rendering (see above). It also allows
+// common elements to be reused if desired.
+//
+// Likewise, the compositor allows scenes to be multiply referenced so that
+// the same content can be presented simultaneously in several places.
+//
+// CYCLES
+//
+// The compositor forbids cycles among nodes within scenes and will
+// reject scene updates which introduce node cycles by closing the client's
+// connection.
+//
+// Likewise, the compositor forbids cycles across scenes and will respond
+// to them by considering any scene within a cycle to be blocked from
+// rendering.
+//
+// For example, if there are scenes A, B, and C linked such that rendering
+// would traverse a path A -> B -> C -> B, the compositor will consider both
+// scenes B and C to be blocked and will apply A's combinator rules as required
+// to resolve the problem at the point where it would have entered the cycle.
+// This may cause A itself to be blocked if there are no applicable |PRUNE|
+// or |FALLBACK| predicated alternatives.
+//
+// This policy protects clients from cross-scene cycles which may have been
+// introduced downstream in the graph without their knowledge or which may
+// occur transiently, so long as they are not within the cycle themselves.
+// It also ensures that cycles are resolved deterministically regardless of
+// where they are encountered during traversal; all scenes within the cycle
+// are suppressed.
+//
// TIPS
//
// 1. Reuse nodes when possible to reduce the size of the graph. Consider
// using LayerNodeOps to flatten common elements to a texture which can
// be redrawn efficiently in many places.
//
-// 2. Insert PRUNE or FALLBACK nodes in places where blocking is likely to
+// 2. Insert |PRUNE| or |FALLBACK| nodes in places where blocking is likely to
// occur, such as when embedding scenes produced by other applications.
-// Provide alternate content where possible.
+// Provide alternate content where possible to avoid stalling the
+// rendering pipeline at these points.
//
struct Node {
// The combinator specifies how child nodes are processed.
@@ -101,11 +139,8 @@ struct Node {
// The ids of the children of this node.
// It is an error to specify a node id that does not refer to a valid
- // node; the compositor will close the connection when the scene
- // is published.
- // If a cycle is introduced then the node will be considered to be blocked
- // at the point where recursion occurs. A subsequent rearrangement of
- // scenes which removes the cycle will unblock the node.
+ // node or which creates a cycle in the graph; the compositor will close
+ // the connection when the scene is published.
array<uint32>? child_node_ids;
// The drawing operation to apply when processing this node.
@@ -171,9 +206,8 @@ struct SceneNodeOp {
// It is an error to specify a resource id that does not refer to a scene
// resource; the compositor will close the connection when the scene
// is published.
- // If a cycle is introduced then the node will be considered to be blocked
- // at the point where recursion occurs. A subsequent rearrangement of
- // scenes which removes the cycle will unblock the node.
+ // If a cycle is introduced then the scene will be substituted with
+ // placeholder content by the compositor.
uint32 scene_resource_id;
// The version of the scene that we would like to reference.
« no previous file with comments | « no previous file | mojo/services/gfx/composition/interfaces/scenes.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698