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

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

Issue 2118993002: Detemplatize cc property nodes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/graphics/compositing/PaintArtifactCompositor.h" 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h"
6 6
7 #include "cc/layers/content_layer_client.h" 7 #include "cc/layers/content_layer_client.h"
8 #include "cc/layers/layer.h" 8 #include "cc/layers/layer.h"
9 #include "cc/layers/picture_layer.h" 9 #include "cc/layers/picture_layer.h"
10 #include "cc/playback/display_item_list.h" 10 #include "cc/playback/display_item_list.h"
11 #include "cc/playback/display_item_list_settings.h" 11 #include "cc/playback/display_item_list_settings.h"
12 #include "cc/playback/drawing_display_item.h" 12 #include "cc/playback/drawing_display_item.h"
13 #include "cc/playback/transform_display_item.h" 13 #include "cc/playback/transform_display_item.h"
14 #include "cc/trees/clip_node.h"
15 #include "cc/trees/effect_node.h"
14 #include "cc/trees/layer_tree_host.h" 16 #include "cc/trees/layer_tree_host.h"
15 #include "cc/trees/property_tree.h" 17 #include "cc/trees/property_tree.h"
18 #include "cc/trees/transform_node.h"
16 #include "platform/RuntimeEnabledFeatures.h" 19 #include "platform/RuntimeEnabledFeatures.h"
17 #include "platform/graphics/paint/ClipPaintPropertyNode.h" 20 #include "platform/graphics/paint/ClipPaintPropertyNode.h"
18 #include "platform/graphics/paint/DisplayItem.h" 21 #include "platform/graphics/paint/DisplayItem.h"
19 #include "platform/graphics/paint/DrawingDisplayItem.h" 22 #include "platform/graphics/paint/DrawingDisplayItem.h"
20 #include "platform/graphics/paint/ForeignLayerDisplayItem.h" 23 #include "platform/graphics/paint/ForeignLayerDisplayItem.h"
21 #include "platform/graphics/paint/PaintArtifact.h" 24 #include "platform/graphics/paint/PaintArtifact.h"
22 #include "platform/graphics/paint/PropertyTreeState.h" 25 #include "platform/graphics/paint/PropertyTreeState.h"
23 #include "platform/graphics/paint/TransformPaintPropertyNode.h" 26 #include "platform/graphics/paint/TransformPaintPropertyNode.h"
24 #include "public/platform/Platform.h" 27 #include "public/platform/Platform.h"
25 #include "public/platform/WebCompositorSupport.h" 28 #include "public/platform/WebCompositorSupport.h"
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 constexpr int kPropertyTreeSequenceNumber = 1; 232 constexpr int kPropertyTreeSequenceNumber = 1;
230 233
231 // Creates a minimal set of property trees for the compositor. 234 // Creates a minimal set of property trees for the compositor.
232 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId) 235 void setMinimalPropertyTrees(cc::PropertyTrees* propertyTrees, int ownerId)
233 { 236 {
234 // cc is hardcoded to use transform node index 1 for device scale and transf orm. 237 // cc is hardcoded to use transform node index 1 for device scale and transf orm.
235 cc::TransformTree& transformTree = propertyTrees->transform_tree; 238 cc::TransformTree& transformTree = propertyTrees->transform_tree;
236 transformTree.clear(); 239 transformTree.clear();
237 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert( cc::TransformNode(), kRealRootNodeId)); 240 cc::TransformNode& transformNode = *transformTree.Node(transformTree.Insert( cc::TransformNode(), kRealRootNodeId));
238 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId); 241 DCHECK_EQ(transformNode.id, kSecondaryRootNodeId);
239 transformNode.data.source_node_id = transformNode.parent_id; 242 transformNode.source_node_id = transformNode.parent_id;
240 transformTree.SetTargetId(transformNode.id, kRealRootNodeId); 243 transformTree.SetTargetId(transformNode.id, kRealRootNodeId);
241 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId); 244 transformTree.SetContentTargetId(transformNode.id, kRealRootNodeId);
242 245
243 // cc is hardcoded to use clip node index 1 for viewport clip. 246 // cc is hardcoded to use clip node index 1 for viewport clip.
244 cc::ClipTree& clipTree = propertyTrees->clip_tree; 247 cc::ClipTree& clipTree = propertyTrees->clip_tree;
245 clipTree.clear(); 248 clipTree.clear();
246 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea lRootNodeId)); 249 cc::ClipNode& clipNode = *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRea lRootNodeId));
247 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); 250 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId);
248 clipNode.owner_id = ownerId; 251 clipNode.owner_id = ownerId;
249 252
250 // cc is hardcoded to use effect node index 1 for root render surface. 253 // cc is hardcoded to use effect node index 1 for root render surface.
251 cc::EffectTree& effectTree = propertyTrees->effect_tree; 254 cc::EffectTree& effectTree = propertyTrees->effect_tree;
252 effectTree.clear(); 255 effectTree.clear();
253 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo de(), kRealRootNodeId)); 256 cc::EffectNode& effectNode = *effectTree.Node(effectTree.Insert(cc::EffectNo de(), kRealRootNodeId));
254 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); 257 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId);
255 effectNode.owner_id = ownerId; 258 effectNode.owner_id = ownerId;
256 effectNode.data.clip_id = clipNode.id; 259 effectNode.clip_id = clipNode.id;
257 effectNode.data.has_render_surface = true; 260 effectNode.has_render_surface = true;
258 261
259 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree; 262 cc::ScrollTree& scrollTree = propertyTrees->scroll_tree;
260 scrollTree.clear(); 263 scrollTree.clear();
261 } 264 }
262 265
263 } // namespace 266 } // namespace
264 267
265 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact) 268 void PaintArtifactCompositor::update(const PaintArtifact& paintArtifact)
266 { 269 {
267 DCHECK(m_rootLayer); 270 DCHECK(m_rootLayer);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 if (it != m_transformNodeMap.end()) 375 if (it != m_transformNodeMap.end())
373 return it->value; 376 return it->value;
374 377
375 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); 378 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
376 int parentId = compositorIdForTransformNode(transformNode->parent()); 379 int parentId = compositorIdForTransformNode(transformNode->parent());
377 int id = transformTree().Insert(cc::TransformNode(), parentId); 380 int id = transformTree().Insert(cc::TransformNode(), parentId);
378 381
379 cc::TransformNode& compositorNode = *transformTree().Node(id); 382 cc::TransformNode& compositorNode = *transformTree().Node(id);
380 transformTree().SetTargetId(id, kRealRootNodeId); 383 transformTree().SetTargetId(id, kRealRootNodeId);
381 transformTree().SetContentTargetId(id, kRealRootNodeId); 384 transformTree().SetContentTargetId(id, kRealRootNodeId);
382 compositorNode.data.source_node_id = parentId; 385 compositorNode.source_node_id = parentId;
383 386
384 FloatPoint3D origin = transformNode->origin(); 387 FloatPoint3D origin = transformNode->origin();
385 compositorNode.data.pre_local.matrix().setTranslate( 388 compositorNode.pre_local.matrix().setTranslate(
386 -origin.x(), -origin.y(), -origin.z()); 389 -origin.x(), -origin.y(), -origin.z());
387 compositorNode.data.local.matrix() = TransformationMatrix::toSkMatrix44(tran sformNode->matrix()); 390 compositorNode.local.matrix() = TransformationMatrix::toSkMatrix44(transform Node->matrix());
388 compositorNode.data.post_local.matrix().setTranslate( 391 compositorNode.post_local.matrix().setTranslate(
389 origin.x(), origin.y(), origin.z()); 392 origin.x(), origin.y(), origin.z());
390 compositorNode.data.needs_local_transform_update = true; 393 compositorNode.needs_local_transform_update = true;
391 394
392 m_rootLayer->AddChild(dummyLayer); 395 m_rootLayer->AddChild(dummyLayer);
393 dummyLayer->SetTransformTreeIndex(id); 396 dummyLayer->SetTransformTreeIndex(id);
394 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId); 397 dummyLayer->SetClipTreeIndex(kSecondaryRootNodeId);
395 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); 398 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
396 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 399 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
397 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 400 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
398 401
399 auto result = m_transformNodeMap.set(transformNode, id); 402 auto result = m_transformNodeMap.set(transformNode, id);
400 DCHECK(result.isNewEntry); 403 DCHECK(result.isNewEntry);
(...skipping 11 matching lines...) Expand all
412 return it->value; 415 return it->value;
413 416
414 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); 417 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
415 int parentId = compositorIdForClipNode(clipNode->parent()); 418 int parentId = compositorIdForClipNode(clipNode->parent());
416 int id = clipTree().Insert(cc::ClipNode(), parentId); 419 int id = clipTree().Insert(cc::ClipNode(), parentId);
417 420
418 cc::ClipNode& compositorNode = *clipTree().Node(id); 421 cc::ClipNode& compositorNode = *clipTree().Node(id);
419 compositorNode.owner_id = dummyLayer->id(); 422 compositorNode.owner_id = dummyLayer->id();
420 423
421 // TODO(jbroman): Don't discard rounded corners. 424 // TODO(jbroman): Don't discard rounded corners.
422 compositorNode.data.clip = clipNode->clipRect().rect(); 425 compositorNode.clip = clipNode->clipRect().rect();
423 compositorNode.data.transform_id = compositorIdForTransformNode(clipNode->lo calTransformSpace()); 426 compositorNode.transform_id = compositorIdForTransformNode(clipNode->localTr ansformSpace());
424 compositorNode.data.target_id = kRealRootNodeId; 427 compositorNode.target_id = kRealRootNodeId;
425 compositorNode.data.applies_local_clip = true; 428 compositorNode.applies_local_clip = true;
426 compositorNode.data.layers_are_clipped = true; 429 compositorNode.layers_are_clipped = true;
427 compositorNode.data.layers_are_clipped_when_surfaces_disabled = true; 430 compositorNode.layers_are_clipped_when_surfaces_disabled = true;
428 431
429 m_rootLayer->AddChild(dummyLayer); 432 m_rootLayer->AddChild(dummyLayer);
430 dummyLayer->SetTransformTreeIndex(compositorNode.data.transform_id); 433 dummyLayer->SetTransformTreeIndex(compositorNode.transform_id);
431 dummyLayer->SetClipTreeIndex(id); 434 dummyLayer->SetClipTreeIndex(id);
432 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); 435 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
433 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 436 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
434 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 437 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
435 438
436 auto result = m_clipNodeMap.set(clipNode, id); 439 auto result = m_clipNodeMap.set(clipNode, id);
437 DCHECK(result.isNewEntry); 440 DCHECK(result.isNewEntry);
438 clipTree().set_needs_update(true); 441 clipTree().set_needs_update(true);
439 return id; 442 return id;
440 } 443 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 if (m_extraDataForTestingEnabled) 478 if (m_extraDataForTestingEnabled)
476 m_extraDataForTesting->contentLayers.append(layer); 479 m_extraDataForTesting->contentLayers.append(layer);
477 } 480 }
478 481
479 // Mark the property trees as having been rebuilt. 482 // Mark the property trees as having been rebuilt.
480 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; 483 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber;
481 host->property_trees()->needs_rebuild = false; 484 host->property_trees()->needs_rebuild = false;
482 } 485 }
483 486
484 } // namespace blink 487 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698