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

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

Issue 2638333007: Add compositor element id for scroll nodes in SPv2. (Closed)
Patch Set: Sync to head. Created 3 years, 11 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/test/test_simple_task_runner.h" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/threading/thread_task_runner_handle.h" 8 #include "base/threading/thread_task_runner_handle.h"
9 #include "cc/layers/layer.h" 9 #include "cc/layers/layer.h"
10 #include "cc/test/fake_compositor_frame_sink.h" 10 #include "cc/test/fake_compositor_frame_sink.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 WTF::makeUnique<WebLayerTreeViewWithCompositorFrameSink>(settings); 89 WTF::makeUnique<WebLayerTreeViewWithCompositorFrameSink>(settings);
90 m_webLayerTreeView->setRootLayer(*m_paintArtifactCompositor->getWebLayer()); 90 m_webLayerTreeView->setRootLayer(*m_paintArtifactCompositor->getWebLayer());
91 } 91 }
92 92
93 const cc::PropertyTrees& propertyTrees() { 93 const cc::PropertyTrees& propertyTrees() {
94 return *m_webLayerTreeView->layerTreeHost() 94 return *m_webLayerTreeView->layerTreeHost()
95 ->GetLayerTree() 95 ->GetLayerTree()
96 ->property_trees(); 96 ->property_trees();
97 } 97 }
98 98
99 int elementIdToScrollNodeIndex(CompositorElementId elementId) {
100 return m_webLayerTreeView->layerTreeHost()
101 ->GetLayerTree()
102 ->property_trees()
103 ->element_id_to_scroll_node_index[elementId];
104 }
105
99 const cc::TransformNode& transformNode(const cc::Layer* layer) { 106 const cc::TransformNode& transformNode(const cc::Layer* layer) {
100 return *propertyTrees().transform_tree.Node(layer->transform_tree_index()); 107 return *propertyTrees().transform_tree.Node(layer->transform_tree_index());
101 } 108 }
102 109
103 void update(const PaintArtifact& artifact) { 110 void update(const PaintArtifact& artifact) {
104 m_paintArtifactCompositor->update(artifact, nullptr, false); 111 m_paintArtifactCompositor->update(artifact, nullptr, false);
105 m_webLayerTreeView->layerTreeHost()->LayoutAndUpdateLayers(); 112 m_webLayerTreeView->layerTreeHost()->LayoutAndUpdateLayers();
106 } 113 }
107 114
108 cc::Layer* rootLayer() { return m_paintArtifactCompositor->rootLayer(); } 115 cc::Layer* rootLayer() { return m_paintArtifactCompositor->rootLayer(); }
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index()); 654 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index());
648 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index()); 655 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index());
649 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index()); 656 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index());
650 } 657 }
651 658
652 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneScrollNode) { 659 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneScrollNode) {
653 RefPtr<TransformPaintPropertyNode> scrollTranslation = 660 RefPtr<TransformPaintPropertyNode> scrollTranslation =
654 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(), 661 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
655 TransformationMatrix().translate(7, 9), 662 TransformationMatrix().translate(7, 9),
656 FloatPoint3D()); 663 FloatPoint3D());
664 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0);
657 RefPtr<ScrollPaintPropertyNode> scroll = ScrollPaintPropertyNode::create( 665 RefPtr<ScrollPaintPropertyNode> scroll = ScrollPaintPropertyNode::create(
658 ScrollPaintPropertyNode::root(), scrollTranslation, IntSize(11, 13), 666 ScrollPaintPropertyNode::root(), scrollTranslation, IntSize(11, 13),
659 IntSize(27, 31), true, false, 0); 667 IntSize(27, 31), true, false, 0 /* mainThreadScrollingReasons */,
668 expectedCompositorElementId);
660 669
661 TestPaintArtifact artifact; 670 TestPaintArtifact artifact;
662 artifact 671 artifact
663 .chunk(scrollTranslation, ClipPaintPropertyNode::root(), 672 .chunk(scrollTranslation, ClipPaintPropertyNode::root(),
664 EffectPaintPropertyNode::root(), scroll) 673 EffectPaintPropertyNode::root(), scroll)
665 .rectDrawing(FloatRect(11, 13, 17, 19), Color::white); 674 .rectDrawing(FloatRect(11, 13, 17, 19), Color::white);
666 update(artifact.build()); 675 update(artifact.build());
667 676
668 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree; 677 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree;
669 // Node #0 reserved for null; #1 for root render surface. 678 // Node #0 reserved for null; #1 for root render surface.
670 ASSERT_EQ(3u, scrollTree.size()); 679 ASSERT_EQ(3u, scrollTree.size());
671 const cc::ScrollNode& scrollNode = *scrollTree.Node(2); 680 const cc::ScrollNode& scrollNode = *scrollTree.Node(2);
672 EXPECT_EQ(gfx::Size(11, 13), scrollNode.scroll_clip_layer_bounds); 681 EXPECT_EQ(gfx::Size(11, 13), scrollNode.scroll_clip_layer_bounds);
673 EXPECT_EQ(gfx::Size(27, 31), scrollNode.bounds); 682 EXPECT_EQ(gfx::Size(27, 31), scrollNode.bounds);
674 EXPECT_TRUE(scrollNode.user_scrollable_horizontal); 683 EXPECT_TRUE(scrollNode.user_scrollable_horizontal);
675 EXPECT_FALSE(scrollNode.user_scrollable_vertical); 684 EXPECT_FALSE(scrollNode.user_scrollable_vertical);
676 EXPECT_EQ(1, scrollNode.parent_id); 685 EXPECT_EQ(1, scrollNode.parent_id);
686 EXPECT_EQ(expectedCompositorElementId, scrollNode.element_id);
687 EXPECT_EQ(scrollNode.id,
688 elementIdToScrollNodeIndex(expectedCompositorElementId));
677 689
678 const cc::TransformTree& transformTree = propertyTrees().transform_tree; 690 const cc::TransformTree& transformTree = propertyTrees().transform_tree;
679 const cc::TransformNode& transformNode = 691 const cc::TransformNode& transformNode =
680 *transformTree.Node(scrollNode.transform_id); 692 *transformTree.Node(scrollNode.transform_id);
681 EXPECT_TRUE(transformNode.local.IsIdentity()); 693 EXPECT_TRUE(transformNode.local.IsIdentity());
682 694
683 EXPECT_EQ(gfx::ScrollOffset(-7, -9), 695 EXPECT_EQ(gfx::ScrollOffset(-7, -9),
684 scrollTree.current_scroll_offset(contentLayerAt(0)->id())); 696 scrollTree.current_scroll_offset(contentLayerAt(0)->id()));
685 697
686 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain, 698 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
687 scrollNode.main_thread_scrolling_reasons); 699 scrollNode.main_thread_scrolling_reasons);
688 } 700 }
689 701
690 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, NestedScrollNodes) { 702 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, NestedScrollNodes) {
691 RefPtr<EffectPaintPropertyNode> effect = 703 RefPtr<EffectPaintPropertyNode> effect =
692 createOpacityOnlyEffect(EffectPaintPropertyNode::root(), 0.5); 704 createOpacityOnlyEffect(EffectPaintPropertyNode::root(), 0.5);
693 705
706 CompositorElementId expectedCompositorElementIdA = CompositorElementId(2, 0);
707 CompositorElementId expectedCompositorElementIdB = CompositorElementId(3, 0);
694 RefPtr<TransformPaintPropertyNode> scrollTranslationA = 708 RefPtr<TransformPaintPropertyNode> scrollTranslationA =
695 TransformPaintPropertyNode::create( 709 TransformPaintPropertyNode::create(
696 TransformPaintPropertyNode::root(), 710 TransformPaintPropertyNode::root(),
697 TransformationMatrix().translate(11, 13), FloatPoint3D()); 711 TransformationMatrix().translate(11, 13), FloatPoint3D());
698 RefPtr<ScrollPaintPropertyNode> scrollA = ScrollPaintPropertyNode::create( 712 RefPtr<ScrollPaintPropertyNode> scrollA = ScrollPaintPropertyNode::create(
699 ScrollPaintPropertyNode::root(), scrollTranslationA, IntSize(2, 3), 713 ScrollPaintPropertyNode::root(), scrollTranslationA, IntSize(2, 3),
700 IntSize(5, 7), false, true, 714 IntSize(5, 7), false, true,
701 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); 715 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects,
716 expectedCompositorElementIdA);
702 RefPtr<TransformPaintPropertyNode> scrollTranslationB = 717 RefPtr<TransformPaintPropertyNode> scrollTranslationB =
703 TransformPaintPropertyNode::create( 718 TransformPaintPropertyNode::create(
704 scrollTranslationA, TransformationMatrix().translate(37, 41), 719 scrollTranslationA, TransformationMatrix().translate(37, 41),
705 FloatPoint3D()); 720 FloatPoint3D());
706 RefPtr<ScrollPaintPropertyNode> scrollB = ScrollPaintPropertyNode::create( 721 RefPtr<ScrollPaintPropertyNode> scrollB = ScrollPaintPropertyNode::create(
707 scrollA, scrollTranslationB, IntSize(19, 23), IntSize(29, 31), true, 722 scrollA, scrollTranslationB, IntSize(19, 23), IntSize(29, 31), true,
708 false, 0); 723 false, 0 /* mainThreadScrollingReasons */, expectedCompositorElementIdB);
709 TestPaintArtifact artifact; 724 TestPaintArtifact artifact;
710 artifact 725 artifact
711 .chunk(scrollTranslationA, ClipPaintPropertyNode::root(), effect, scrollA) 726 .chunk(scrollTranslationA, ClipPaintPropertyNode::root(), effect, scrollA)
712 .rectDrawing(FloatRect(7, 11, 13, 17), Color::white); 727 .rectDrawing(FloatRect(7, 11, 13, 17), Color::white);
713 artifact 728 artifact
714 .chunk(scrollTranslationB, ClipPaintPropertyNode::root(), effect, scrollB) 729 .chunk(scrollTranslationB, ClipPaintPropertyNode::root(), effect, scrollB)
715 .rectDrawing(FloatRect(1, 2, 3, 5), Color::white); 730 .rectDrawing(FloatRect(1, 2, 3, 5), Color::white);
716 update(artifact.build()); 731 update(artifact.build());
717 732
718 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree; 733 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree;
719 // Node #0 reserved for null; #1 for root render surface. 734 // Node #0 reserved for null; #1 for root render surface.
720 ASSERT_EQ(4u, scrollTree.size()); 735 ASSERT_EQ(4u, scrollTree.size());
721 const cc::ScrollNode& scrollNodeA = *scrollTree.Node(2); 736 const cc::ScrollNode& scrollNodeA = *scrollTree.Node(2);
722 EXPECT_EQ(gfx::Size(2, 3), scrollNodeA.scroll_clip_layer_bounds); 737 EXPECT_EQ(gfx::Size(2, 3), scrollNodeA.scroll_clip_layer_bounds);
723 EXPECT_EQ(gfx::Size(5, 7), scrollNodeA.bounds); 738 EXPECT_EQ(gfx::Size(5, 7), scrollNodeA.bounds);
724 EXPECT_FALSE(scrollNodeA.user_scrollable_horizontal); 739 EXPECT_FALSE(scrollNodeA.user_scrollable_horizontal);
725 EXPECT_TRUE(scrollNodeA.user_scrollable_vertical); 740 EXPECT_TRUE(scrollNodeA.user_scrollable_vertical);
726 EXPECT_EQ(1, scrollNodeA.parent_id); 741 EXPECT_EQ(1, scrollNodeA.parent_id);
727 const cc::ScrollNode& scrollNodeB = *scrollTree.Node(3); 742 const cc::ScrollNode& scrollNodeB = *scrollTree.Node(3);
728 EXPECT_EQ(gfx::Size(19, 23), scrollNodeB.scroll_clip_layer_bounds); 743 EXPECT_EQ(gfx::Size(19, 23), scrollNodeB.scroll_clip_layer_bounds);
729 EXPECT_EQ(gfx::Size(29, 31), scrollNodeB.bounds); 744 EXPECT_EQ(gfx::Size(29, 31), scrollNodeB.bounds);
730 EXPECT_TRUE(scrollNodeB.user_scrollable_horizontal); 745 EXPECT_TRUE(scrollNodeB.user_scrollable_horizontal);
731 EXPECT_FALSE(scrollNodeB.user_scrollable_vertical); 746 EXPECT_FALSE(scrollNodeB.user_scrollable_vertical);
732 EXPECT_EQ(scrollNodeA.id, scrollNodeB.parent_id); 747 EXPECT_EQ(scrollNodeA.id, scrollNodeB.parent_id);
748 EXPECT_EQ(expectedCompositorElementIdA, scrollNodeA.element_id);
749 EXPECT_EQ(scrollNodeA.id,
750 elementIdToScrollNodeIndex(expectedCompositorElementIdA));
751 EXPECT_EQ(expectedCompositorElementIdB, scrollNodeB.element_id);
752 EXPECT_EQ(scrollNodeB.id,
753 elementIdToScrollNodeIndex(expectedCompositorElementIdB));
733 754
734 const cc::TransformTree& transformTree = propertyTrees().transform_tree; 755 const cc::TransformTree& transformTree = propertyTrees().transform_tree;
735 const cc::TransformNode& transformNodeA = 756 const cc::TransformNode& transformNodeA =
736 *transformTree.Node(scrollNodeA.transform_id); 757 *transformTree.Node(scrollNodeA.transform_id);
737 EXPECT_TRUE(transformNodeA.local.IsIdentity()); 758 EXPECT_TRUE(transformNodeA.local.IsIdentity());
738 const cc::TransformNode& transformNodeB = 759 const cc::TransformNode& transformNodeB =
739 *transformTree.Node(scrollNodeB.transform_id); 760 *transformTree.Node(scrollNodeB.transform_id);
740 EXPECT_TRUE(transformNodeB.local.IsIdentity()); 761 EXPECT_TRUE(transformNodeB.local.IsIdentity());
741 762
742 EXPECT_EQ(gfx::ScrollOffset(-11, -13), 763 EXPECT_EQ(gfx::ScrollOffset(-11, -13),
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 chunk3.properties.propertyTreeState = chunk1.properties.propertyTreeState; 1569 chunk3.properties.propertyTreeState = chunk1.properties.propertyTreeState;
1549 chunk3.bounds = FloatRect(0, 0, 50, 60); 1570 chunk3.bounds = FloatRect(0, 0, 50, 60);
1550 chunk3.knownToBeOpaque = true; 1571 chunk3.knownToBeOpaque = true;
1551 pendingLayer.add(chunk3, nullptr); 1572 pendingLayer.add(chunk3, nullptr);
1552 1573
1553 // Chunk 3 covers the entire layer, so now it's opaque. 1574 // Chunk 3 covers the entire layer, so now it's opaque.
1554 EXPECT_TRUE(pendingLayer.knownToBeOpaque); 1575 EXPECT_TRUE(pendingLayer.knownToBeOpaque);
1555 } 1576 }
1556 1577
1557 } // namespace blink 1578 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698