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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 namespace { 338 namespace {
339 339
340 class PropertyTreeManager { 340 class PropertyTreeManager {
341 WTF_MAKE_NONCOPYABLE(PropertyTreeManager); 341 WTF_MAKE_NONCOPYABLE(PropertyTreeManager);
342 public: 342 public:
343 PropertyTreeManager(cc::PropertyTrees& propertyTrees, cc::Layer* rootLayer) 343 PropertyTreeManager(cc::PropertyTrees& propertyTrees, cc::Layer* rootLayer)
344 : m_propertyTrees(propertyTrees) 344 : m_propertyTrees(propertyTrees)
345 , m_rootLayer(rootLayer) {} 345 , m_rootLayer(rootLayer) {}
346 346
347 int compositorIdForTransformNode(const TransformPaintPropertyNode*); 347 int compositorIdForTransformNode(const TransformPaintPropertyNode*);
348 int compositorIdForClipNode(const ClipPaintPropertyNode*);
348 349
349 private: 350 private:
350 cc::TransformTree& transformTree() { return m_propertyTrees.transform_tree; } 351 cc::TransformTree& transformTree() { return m_propertyTrees.transform_tree; }
352 cc::ClipTree& clipTree() { return m_propertyTrees.clip_tree; }
351 353
352 // Property trees which should be updated by the manager. 354 // Property trees which should be updated by the manager.
353 cc::PropertyTrees& m_propertyTrees; 355 cc::PropertyTrees& m_propertyTrees;
354 356
355 // Layer to which transform "owner" layers should be added. These will not 357 // Layer to which transform "owner" layers should be added. These will not
356 // have any actual children, but at present must exist in the tree. 358 // have any actual children, but at present must exist in the tree.
357 cc::Layer* m_rootLayer; 359 cc::Layer* m_rootLayer;
358 360
359 // Map from Blink-side transform nodes to cc transform node indices. 361 // Maps from Blink-side property tree nodes to cc property node indices.
360 HashMap<const TransformPaintPropertyNode*, int> m_transformNodeMap; 362 HashMap<const TransformPaintPropertyNode*, int> m_transformNodeMap;
363 HashMap<const ClipPaintPropertyNode*, int> m_clipNodeMap;
361 }; 364 };
362 365
363 int PropertyTreeManager::compositorIdForTransformNode(const TransformPaintProper tyNode* transformNode) 366 int PropertyTreeManager::compositorIdForTransformNode(const TransformPaintProper tyNode* transformNode)
364 { 367 {
365 if (!transformNode) 368 if (!transformNode)
366 return kSecondaryRootNodeId; 369 return kSecondaryRootNodeId;
367 370
368 auto it = m_transformNodeMap.find(transformNode); 371 auto it = m_transformNodeMap.find(transformNode);
369 if (it != m_transformNodeMap.end()) 372 if (it != m_transformNodeMap.end())
370 return it->value; 373 return it->value;
(...skipping 21 matching lines...) Expand all
392 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId); 395 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
393 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 396 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
394 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 397 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
395 398
396 auto result = m_transformNodeMap.set(transformNode, id); 399 auto result = m_transformNodeMap.set(transformNode, id);
397 DCHECK(result.isNewEntry); 400 DCHECK(result.isNewEntry);
398 transformTree().set_needs_update(true); 401 transformTree().set_needs_update(true);
399 return id; 402 return id;
400 } 403 }
401 404
405 int PropertyTreeManager::compositorIdForClipNode(const ClipPaintPropertyNode* cl ipNode)
406 {
407 if (!clipNode)
408 return kSecondaryRootNodeId;
409
410 auto it = m_clipNodeMap.find(clipNode);
411 if (it != m_clipNodeMap.end())
412 return it->value;
413
414 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
415 int parentId = compositorIdForClipNode(clipNode->parent());
416 int id = clipTree().Insert(cc::ClipNode(), parentId);
417
418 cc::ClipNode& compositorNode = *clipTree().Node(id);
419 compositorNode.owner_id = dummyLayer->id();
420
421 // TODO(jbroman): Don't discard rounded corners.
422 compositorNode.data.clip = clipNode->clipRect().rect();
423 compositorNode.data.transform_id = compositorIdForTransformNode(clipNode->lo calTransformSpace());
424 compositorNode.data.target_id = kRealRootNodeId;
425 compositorNode.data.applies_local_clip = true;
426 compositorNode.data.layers_are_clipped = true;
427 compositorNode.data.layers_are_clipped_when_surfaces_disabled = true;
428
429 m_rootLayer->AddChild(dummyLayer);
430 dummyLayer->SetTransformTreeIndex(compositorNode.data.transform_id);
431 dummyLayer->SetClipTreeIndex(id);
432 dummyLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
433 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
434 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
435
436 auto result = m_clipNodeMap.set(clipNode, id);
437 DCHECK(result.isNewEntry);
438 clipTree().set_needs_update(true);
439 return id;
440 }
441
402 } // namespace 442 } // namespace
403 443
404 void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr tifact) 444 void PaintArtifactCompositor::updateInLayerListMode(const PaintArtifact& paintAr tifact)
405 { 445 {
406 cc::LayerTreeHost* host = m_rootLayer->layer_tree_host(); 446 cc::LayerTreeHost* host = m_rootLayer->layer_tree_host();
407 447
408 setMinimalPropertyTrees(host->property_trees(), m_rootLayer->id()); 448 setMinimalPropertyTrees(host->property_trees(), m_rootLayer->id());
409 m_rootLayer->RemoveAllChildren(); 449 m_rootLayer->RemoveAllChildren();
410 m_rootLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 450 m_rootLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
411 m_rootLayer->SetTransformTreeIndex(kSecondaryRootNodeId); 451 m_rootLayer->SetTransformTreeIndex(kSecondaryRootNodeId);
412 m_rootLayer->SetClipTreeIndex(kSecondaryRootNodeId); 452 m_rootLayer->SetClipTreeIndex(kSecondaryRootNodeId);
413 m_rootLayer->SetEffectTreeIndex(kSecondaryRootNodeId); 453 m_rootLayer->SetEffectTreeIndex(kSecondaryRootNodeId);
414 m_rootLayer->SetScrollTreeIndex(kRealRootNodeId); 454 m_rootLayer->SetScrollTreeIndex(kRealRootNodeId);
415 455
416 PropertyTreeManager propertyTreeManager(*host->property_trees(), m_rootLayer .get()); 456 PropertyTreeManager propertyTreeManager(*host->property_trees(), m_rootLayer .get());
417 m_contentLayerClients.clear(); 457 m_contentLayerClients.clear();
418 m_contentLayerClients.reserveCapacity(paintArtifact.paintChunks().size()); 458 m_contentLayerClients.reserveCapacity(paintArtifact.paintChunks().size());
419 for (const PaintChunk& paintChunk : paintArtifact.paintChunks()) { 459 for (const PaintChunk& paintChunk : paintArtifact.paintChunks()) {
420 gfx::Vector2dF layerOffset; 460 gfx::Vector2dF layerOffset;
421 scoped_refptr<cc::Layer> layer = layerForPaintChunk(paintArtifact, paint Chunk, layerOffset); 461 scoped_refptr<cc::Layer> layer = layerForPaintChunk(paintArtifact, paint Chunk, layerOffset);
422 462
423 int transformId = propertyTreeManager.compositorIdForTransformNode(paint Chunk.properties.transform.get()); 463 int transformId = propertyTreeManager.compositorIdForTransformNode(paint Chunk.properties.transform.get());
464 int clipId = propertyTreeManager.compositorIdForClipNode(paintChunk.prop erties.clip.get());
465
424 layer->set_offset_to_transform_parent(layerOffset); 466 layer->set_offset_to_transform_parent(layerOffset);
425 467
426 m_rootLayer->AddChild(layer); 468 m_rootLayer->AddChild(layer);
427 layer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 469 layer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
428 layer->SetTransformTreeIndex(transformId); 470 layer->SetTransformTreeIndex(transformId);
429 layer->SetClipTreeIndex(kSecondaryRootNodeId); 471 layer->SetClipTreeIndex(clipId);
430 layer->SetEffectTreeIndex(kSecondaryRootNodeId); 472 layer->SetEffectTreeIndex(kSecondaryRootNodeId);
431 layer->SetScrollTreeIndex(kRealRootNodeId); 473 layer->SetScrollTreeIndex(kRealRootNodeId);
432 474
433 if (m_extraDataForTestingEnabled) 475 if (m_extraDataForTestingEnabled)
434 m_extraDataForTesting->contentLayers.append(layer); 476 m_extraDataForTesting->contentLayers.append(layer);
435 } 477 }
436 478
437 // Mark the property trees as having been rebuilt. 479 // Mark the property trees as having been rebuilt.
438 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber; 480 host->property_trees()->sequence_number = kPropertyTreeSequenceNumber;
439 host->property_trees()->needs_rebuild = false; 481 host->property_trees()->needs_rebuild = false;
440 } 482 }
441 483
442 } // namespace blink 484 } // namespace blink
OLDNEW
« 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