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

Unified Diff: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp

Issue 2124753004: [SPv2] Build simple cc clip trees from Blink clip trees. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clip-tree-refactor
Patch Set: rebase Created 4 years, 5 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 | third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
index 40ecd354acd44da1e60db21f78ef50041d84d149..0eb639fbf389ffe8fadbaeda3df2d29ee8cf53d3 100644
--- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
+++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
@@ -345,9 +345,11 @@ public:
, m_rootLayer(rootLayer) {}
int compositorIdForTransformNode(const TransformPaintPropertyNode*);
+ int compositorIdForClipNode(const ClipPaintPropertyNode*);
private:
cc::TransformTree& transformTree() { return m_propertyTrees.transform_tree; }
+ cc::ClipTree& clipTree() { return m_propertyTrees.clip_tree; }
// Property trees which should be updated by the manager.
cc::PropertyTrees& m_propertyTrees;
@@ -356,8 +358,9 @@ private:
// have any actual children, but at present must exist in the tree.
cc::Layer* m_rootLayer;
- // Map from Blink-side transform nodes to cc transform node indices.
+ // Maps from Blink-side property tree nodes to cc property node indices.
HashMap<const TransformPaintPropertyNode*, int> m_transformNodeMap;
+ HashMap<const ClipPaintPropertyNode*, int> m_clipNodeMap;
};
int PropertyTreeManager::compositorIdForTransformNode(const TransformPaintPropertyNode* transformNode)
@@ -399,6 +402,43 @@ int PropertyTreeManager::compositorIdForTransformNode(const TransformPaintProper
return id;
}
+int PropertyTreeManager::compositorIdForClipNode(const ClipPaintPropertyNode* clipNode)
+{
+ if (!clipNode)
+ return kSecondaryRootNodeId;
+
+ auto it = m_clipNodeMap.find(clipNode);
+ if (it != m_clipNodeMap.end())
+ return it->value;
+
+ scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
+ int parentId = compositorIdForClipNode(clipNode->parent());
+ int id = clipTree().Insert(cc::ClipNode(), parentId);
+
+ cc::ClipNode& compositorNode = *clipTree().Node(id);
+ compositorNode.owner_id = dummyLayer->id();
+
+ // TODO(jbroman): Don't discard rounded corners.
+ compositorNode.data.clip = clipNode->clipRect().rect();
+ compositorNode.data.transform_id = compositorIdForTransformNode(clipNode->localTransformSpace());
+ compositorNode.data.target_id = kRealRootNodeId;
+ compositorNode.data.applies_local_clip = true;
+ compositorNode.data.layers_are_clipped = true;
+ compositorNode.data.layers_are_clipped_when_surfaces_disabled = true;
+
+ m_rootLayer->AddChild(dummyLayer);
+ dummyLayer->SetTransformTreeIndex(compositorNode.data.transform_id);
+ dummyLayer->SetClipTreeIndex(id);
+ dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
+ dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
+ dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
+
+ auto result = m_clipNodeMap.set(clipNode, id);
+ DCHECK(result.isNewEntry);
+ clipTree().set_needs_update(true);
+ return id;
+}
+
} // namespace
void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintArtifact)
@@ -421,12 +461,14 @@ void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr
scoped_refptr<cc::Layer> layer = layerForPaintChunk(paintArtifact, paintChunk, layerOffset);
int transformId = propertyTreeManager.compositorIdForTransformNode(paintChunk.properties.transform.get());
+ int clipId = propertyTreeManager.compositorIdForClipNode(paintChunk.properties.clip.get());
+
layer->set_offset_to_transform_parent(layerOffset);
m_rootLayer->AddChild(layer);
layer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
layer->SetTransformTreeIndex(transformId);
- layer->SetClipTreeIndex(kSecondaryRootNodeId);
+ layer->SetClipTreeIndex(clipId);
layer->SetEffectTreeIndex(kSecondaryRootNodeId);
layer->SetScrollTreeIndex(kRealRootNodeId);
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698