| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |