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

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

Issue 2517273002: Reland of cc: Remove more references to owning_layer_ from RenderSurfaceImpl (Closed)
Patch Set: Rebase Created 4 years 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 | « cc/trees/damage_tracker.cc ('k') | no next file » | 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 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 transformTree.set_needs_update(true); 439 transformTree.set_needs_update(true);
440 440
441 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id); 441 m_transformNodeMap.set(TransformPaintPropertyNode::root(), transformNode.id);
442 m_rootLayer->SetTransformTreeIndex(transformNode.id); 442 m_rootLayer->SetTransformTreeIndex(transformNode.id);
443 } 443 }
444 444
445 void PropertyTreeManager::setupRootClipNode() { 445 void PropertyTreeManager::setupRootClipNode() {
446 // cc is hardcoded to use clip node index 1 for viewport clip. 446 // cc is hardcoded to use clip node index 1 for viewport clip.
447 cc::ClipTree& clipTree = m_propertyTrees.clip_tree; 447 cc::ClipTree& clipTree = m_propertyTrees.clip_tree;
448 clipTree.clear(); 448 clipTree.clear();
449 m_propertyTrees.clip_id_to_index_map.clear();
449 cc::ClipNode& clipNode = 450 cc::ClipNode& clipNode =
450 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId)); 451 *clipTree.Node(clipTree.Insert(cc::ClipNode(), kRealRootNodeId));
451 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId); 452 DCHECK_EQ(clipNode.id, kSecondaryRootNodeId);
452 453
453 clipNode.resets_clip = true; 454 clipNode.resets_clip = true;
454 clipNode.owner_id = m_rootLayer->id(); 455 clipNode.owner_id = m_rootLayer->id();
455 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; 456 clipNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP;
456 clipNode.clip = gfx::RectF( 457 clipNode.clip = gfx::RectF(
457 gfx::SizeF(m_rootLayer->GetLayerTree()->device_viewport_size())); 458 gfx::SizeF(m_rootLayer->GetLayerTree()->device_viewport_size()));
458 clipNode.transform_id = kRealRootNodeId; 459 clipNode.transform_id = kRealRootNodeId;
459 clipNode.target_transform_id = kRealRootNodeId; 460 clipNode.target_transform_id = kRealRootNodeId;
460 clipNode.target_effect_id = kSecondaryRootNodeId; 461 clipNode.target_effect_id = kSecondaryRootNodeId;
462 m_propertyTrees.clip_id_to_index_map[clipNode.owner_id] = clipNode.id;
461 463
462 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id); 464 m_clipNodeMap.set(ClipPaintPropertyNode::root(), clipNode.id);
463 m_rootLayer->SetClipTreeIndex(clipNode.id); 465 m_rootLayer->SetClipTreeIndex(clipNode.id);
464 } 466 }
465 467
466 void PropertyTreeManager::setupRootEffectNode() { 468 void PropertyTreeManager::setupRootEffectNode() {
467 // cc is hardcoded to use effect node index 1 for root render surface. 469 // cc is hardcoded to use effect node index 1 for root render surface.
468 cc::EffectTree& effectTree = m_propertyTrees.effect_tree; 470 cc::EffectTree& effectTree = m_propertyTrees.effect_tree;
469 effectTree.clear(); 471 effectTree.clear();
472 m_propertyTrees.effect_id_to_index_map.clear();
470 cc::EffectNode& effectNode = 473 cc::EffectNode& effectNode =
471 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId)); 474 *effectTree.Node(effectTree.Insert(cc::EffectNode(), kInvalidNodeId));
472 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId); 475 DCHECK_EQ(effectNode.id, kSecondaryRootNodeId);
473 effectNode.owner_id = m_rootLayer->id(); 476 effectNode.owner_id = m_rootLayer->id();
474 effectNode.transform_id = kRealRootNodeId; 477 effectNode.transform_id = kRealRootNodeId;
475 effectNode.clip_id = kSecondaryRootNodeId; 478 effectNode.clip_id = kSecondaryRootNodeId;
476 effectNode.has_render_surface = true; 479 effectNode.has_render_surface = true;
480 m_propertyTrees.effect_id_to_index_map[effectNode.owner_id] = effectNode.id;
477 481
478 m_effectStack.append( 482 m_effectStack.append(
479 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id}); 483 BlinkEffectAndCcIdPair{EffectPaintPropertyNode::root(), effectNode.id});
480 m_rootLayer->SetEffectTreeIndex(effectNode.id); 484 m_rootLayer->SetEffectTreeIndex(effectNode.id);
481 } 485 }
482 486
483 void PropertyTreeManager::setupRootScrollNode() { 487 void PropertyTreeManager::setupRootScrollNode() {
484 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree; 488 cc::ScrollTree& scrollTree = m_propertyTrees.scroll_tree;
485 scrollTree.clear(); 489 scrollTree.clear();
490 m_propertyTrees.scroll_id_to_index_map.clear();
486 cc::ScrollNode& scrollNode = 491 cc::ScrollNode& scrollNode =
487 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId)); 492 *scrollTree.Node(scrollTree.Insert(cc::ScrollNode(), kRealRootNodeId));
488 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId); 493 DCHECK_EQ(scrollNode.id, kSecondaryRootNodeId);
489 scrollNode.owner_id = m_rootLayer->id(); 494 scrollNode.owner_id = m_rootLayer->id();
490 scrollNode.transform_id = kSecondaryRootNodeId; 495 scrollNode.transform_id = kSecondaryRootNodeId;
496 m_propertyTrees.scroll_id_to_index_map[scrollNode.owner_id] = scrollNode.id;
491 497
492 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id); 498 m_scrollNodeMap.set(ScrollPaintPropertyNode::root(), scrollNode.id);
493 m_rootLayer->SetScrollTreeIndex(scrollNode.id); 499 m_rootLayer->SetScrollTreeIndex(scrollNode.id);
494 } 500 }
495 501
496 int PropertyTreeManager::compositorIdForTransformNode( 502 int PropertyTreeManager::compositorIdForTransformNode(
497 const TransformPaintPropertyNode* transformNode) { 503 const TransformPaintPropertyNode* transformNode) {
498 DCHECK(transformNode); 504 DCHECK(transformNode);
499 // TODO(crbug.com/645615): Remove the failsafe here. 505 // TODO(crbug.com/645615): Remove the failsafe here.
500 if (!transformNode) 506 if (!transformNode)
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 auto it = m_clipNodeMap.find(clipNode); 554 auto it = m_clipNodeMap.find(clipNode);
549 if (it != m_clipNodeMap.end()) 555 if (it != m_clipNodeMap.end())
550 return it->value; 556 return it->value;
551 557
552 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create(); 558 scoped_refptr<cc::Layer> dummyLayer = cc::Layer::Create();
553 int parentId = compositorIdForClipNode(clipNode->parent()); 559 int parentId = compositorIdForClipNode(clipNode->parent());
554 int id = clipTree().Insert(cc::ClipNode(), parentId); 560 int id = clipTree().Insert(cc::ClipNode(), parentId);
555 561
556 cc::ClipNode& compositorNode = *clipTree().Node(id); 562 cc::ClipNode& compositorNode = *clipTree().Node(id);
557 compositorNode.owner_id = dummyLayer->id(); 563 compositorNode.owner_id = dummyLayer->id();
564 m_propertyTrees.clip_id_to_index_map[compositorNode.owner_id] = id;
558 565
559 // TODO(jbroman): Don't discard rounded corners. 566 // TODO(jbroman): Don't discard rounded corners.
560 compositorNode.clip = clipNode->clipRect().rect(); 567 compositorNode.clip = clipNode->clipRect().rect();
561 compositorNode.transform_id = 568 compositorNode.transform_id =
562 compositorIdForTransformNode(clipNode->localTransformSpace()); 569 compositorIdForTransformNode(clipNode->localTransformSpace());
563 compositorNode.target_transform_id = kRealRootNodeId; 570 compositorNode.target_transform_id = kRealRootNodeId;
564 compositorNode.target_effect_id = kSecondaryRootNodeId; 571 compositorNode.target_effect_id = kSecondaryRootNodeId;
565 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; 572 compositorNode.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP;
566 compositorNode.layers_are_clipped = true; 573 compositorNode.layers_are_clipped = true;
567 compositorNode.layers_are_clipped_when_surfaces_disabled = true; 574 compositorNode.layers_are_clipped_when_surfaces_disabled = true;
(...skipping 20 matching lines...) Expand all
588 595
589 auto it = m_scrollNodeMap.find(scrollNode); 596 auto it = m_scrollNodeMap.find(scrollNode);
590 if (it != m_scrollNodeMap.end()) 597 if (it != m_scrollNodeMap.end())
591 return it->value; 598 return it->value;
592 599
593 int parentId = compositorIdForScrollNode(scrollNode->parent()); 600 int parentId = compositorIdForScrollNode(scrollNode->parent());
594 int id = scrollTree().Insert(cc::ScrollNode(), parentId); 601 int id = scrollTree().Insert(cc::ScrollNode(), parentId);
595 602
596 cc::ScrollNode& compositorNode = *scrollTree().Node(id); 603 cc::ScrollNode& compositorNode = *scrollTree().Node(id);
597 compositorNode.owner_id = parentId; 604 compositorNode.owner_id = parentId;
605 m_propertyTrees.scroll_id_to_index_map[compositorNode.owner_id] = id;
598 606
599 compositorNode.scrollable = true; 607 compositorNode.scrollable = true;
600 608
601 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), 609 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(),
602 scrollNode->clip().height()); 610 scrollNode->clip().height());
603 compositorNode.bounds.SetSize(scrollNode->bounds().width(), 611 compositorNode.bounds.SetSize(scrollNode->bounds().width(),
604 scrollNode->bounds().height()); 612 scrollNode->bounds().height());
605 compositorNode.user_scrollable_horizontal = 613 compositorNode.user_scrollable_horizontal =
606 scrollNode->userScrollableHorizontal(); 614 scrollNode->userScrollableHorizontal();
607 compositorNode.user_scrollable_vertical = 615 compositorNode.user_scrollable_vertical =
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 m_rootLayer->AddChild(dummyLayer); 725 m_rootLayer->AddChild(dummyLayer);
718 726
719 // Also cc assumes a clip node is always created by a layer that creates 727 // Also cc assumes a clip node is always created by a layer that creates
720 // render surface. 728 // render surface.
721 cc::ClipNode& dummyClip = 729 cc::ClipNode& dummyClip =
722 *clipTree().Node(clipTree().Insert(cc::ClipNode(), kSecondaryRootNodeId)); 730 *clipTree().Node(clipTree().Insert(cc::ClipNode(), kSecondaryRootNodeId));
723 dummyClip.owner_id = dummyLayer->id(); 731 dummyClip.owner_id = dummyLayer->id();
724 dummyClip.transform_id = kRealRootNodeId; 732 dummyClip.transform_id = kRealRootNodeId;
725 dummyClip.target_transform_id = kRealRootNodeId; 733 dummyClip.target_transform_id = kRealRootNodeId;
726 dummyClip.target_effect_id = kSecondaryRootNodeId; 734 dummyClip.target_effect_id = kSecondaryRootNodeId;
735 m_propertyTrees.clip_id_to_index_map[dummyClip.owner_id] = dummyClip.id;
727 736
728 cc::EffectNode& effectNode = *effectTree().Node(effectTree().Insert( 737 cc::EffectNode& effectNode = *effectTree().Node(effectTree().Insert(
729 cc::EffectNode(), compositorIdForCurrentEffectNode())); 738 cc::EffectNode(), compositorIdForCurrentEffectNode()));
730 effectNode.owner_id = dummyLayer->id(); 739 effectNode.owner_id = dummyLayer->id();
731 effectNode.clip_id = dummyClip.id; 740 effectNode.clip_id = dummyClip.id;
732 // Every effect is supposed to have render surface enabled for grouping, 741 // Every effect is supposed to have render surface enabled for grouping,
733 // but we can get away without one if the effect is opacity-only and has only 742 // but we can get away without one if the effect is opacity-only and has only
734 // one compositing child. This is both for optimization and not introducing 743 // one compositing child. This is both for optimization and not introducing
735 // sub-pixel differences in layout tests. 744 // sub-pixel differences in layout tests.
736 // See PropertyTreeManager::switchToEffectNode() where we retrospectively 745 // See PropertyTreeManager::switchToEffectNode() where we retrospectively
737 // enable render surface when more than one compositing child is detected. 746 // enable render surface when more than one compositing child is detected.
738 // TODO(crbug.com/504464): There is ongoing work in cc to delay render surface 747 // TODO(crbug.com/504464): There is ongoing work in cc to delay render surface
739 // decision until later phase of the pipeline. Remove premature optimization 748 // decision until later phase of the pipeline. Remove premature optimization
740 // here once the work is ready. 749 // here once the work is ready.
741 effectNode.opacity = nextEffect->opacity(); 750 effectNode.opacity = nextEffect->opacity();
751 m_propertyTrees.effect_id_to_index_map[effectNode.owner_id] = effectNode.id;
742 m_effectStack.append(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); 752 m_effectStack.append(BlinkEffectAndCcIdPair{nextEffect, effectNode.id});
743 753
744 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 754 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
745 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); 755 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId);
746 dummyLayer->SetClipTreeIndex(dummyClip.id); 756 dummyLayer->SetClipTreeIndex(dummyClip.id);
747 dummyLayer->SetEffectTreeIndex(effectNode.id); 757 dummyLayer->SetEffectTreeIndex(effectNode.id);
748 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 758 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
749 } 759 }
750 760
751 } // namespace 761 } // namespace
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 m_contentLayerClients.clear(); 825 m_contentLayerClients.clear();
816 m_contentLayerClients.swap(newContentLayerClients); 826 m_contentLayerClients.swap(newContentLayerClients);
817 827
818 // Mark the property trees as having been rebuilt. 828 // Mark the property trees as having been rebuilt.
819 layerTree->property_trees()->sequence_number = kPropertyTreeSequenceNumber; 829 layerTree->property_trees()->sequence_number = kPropertyTreeSequenceNumber;
820 layerTree->property_trees()->needs_rebuild = false; 830 layerTree->property_trees()->needs_rebuild = false;
821 layerTree->property_trees()->ResetCachedData(); 831 layerTree->property_trees()->ResetCachedData();
822 } 832 }
823 833
824 } // namespace blink 834 } // namespace blink
OLDNEW
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698