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

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

Issue 2698473006: Set layer scroll data from PaintArtifactCompositor (Closed)
Patch Set: More comments Created 3 years, 10 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 <memory> 7 #include <memory>
8 8
9 #include "base/test/test_simple_task_runner.h" 9 #include "base/test/test_simple_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
11 #include "cc/layers/layer.h" 11 #include "cc/layers/layer.h"
12 #include "cc/test/fake_compositor_frame_sink.h" 12 #include "cc/test/fake_compositor_frame_sink.h"
13 #include "cc/test/geometry_test_utils.h" 13 #include "cc/test/geometry_test_utils.h"
14 #include "cc/trees/clip_node.h" 14 #include "cc/trees/clip_node.h"
15 #include "cc/trees/effect_node.h" 15 #include "cc/trees/effect_node.h"
16 #include "cc/trees/layer_tree_host.h" 16 #include "cc/trees/layer_tree_host.h"
17 #include "cc/trees/layer_tree_settings.h" 17 #include "cc/trees/layer_tree_settings.h"
18 #include "cc/trees/scroll_node.h" 18 #include "cc/trees/scroll_node.h"
19 #include "cc/trees/transform_node.h" 19 #include "cc/trees/transform_node.h"
20 #include "platform/graphics/paint/EffectPaintPropertyNode.h" 20 #include "platform/graphics/paint/EffectPaintPropertyNode.h"
21 #include "platform/graphics/paint/GeometryMapper.h" 21 #include "platform/graphics/paint/GeometryMapper.h"
22 #include "platform/graphics/paint/PaintArtifact.h" 22 #include "platform/graphics/paint/PaintArtifact.h"
23 #include "platform/graphics/paint/ScrollPaintPropertyNode.h" 23 #include "platform/graphics/paint/ScrollPaintPropertyNode.h"
24 #include "platform/testing/PaintPropertyTestHelpers.h" 24 #include "platform/testing/PaintPropertyTestHelpers.h"
25 #include "platform/testing/PictureMatchers.h" 25 #include "platform/testing/PictureMatchers.h"
26 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" 26 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
27 #include "platform/testing/TestPaintArtifact.h" 27 #include "platform/testing/TestPaintArtifact.h"
28 #include "platform/testing/WebLayerTreeViewImplForTesting.h" 28 #include "platform/testing/WebLayerTreeViewImplForTesting.h"
29 #include "public/platform/WebLayerScrollClient.h"
29 #include "testing/gmock/include/gmock/gmock.h" 30 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
31 32
32 namespace blink { 33 namespace blink {
33 34
34 #define EXPECT_BLINK_FLOAT_RECT_EQ(expected, actual) \ 35 #define EXPECT_BLINK_FLOAT_RECT_EQ(expected, actual) \
35 do { \ 36 do { \
36 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ 37 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
37 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ 38 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
38 EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \ 39 EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 660
660 const cc::EffectNode& convertedEffect3 = *effectTree.Node(4); 661 const cc::EffectNode& convertedEffect3 = *effectTree.Node(4);
661 EXPECT_EQ(convertedRootEffect.id, convertedEffect3.parent_id); 662 EXPECT_EQ(convertedRootEffect.id, convertedEffect3.parent_id);
662 EXPECT_FLOAT_EQ(0.2, convertedEffect3.opacity); 663 EXPECT_FLOAT_EQ(0.2, convertedEffect3.opacity);
663 664
664 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index()); 665 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index());
665 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index()); 666 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index());
666 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index()); 667 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index());
667 } 668 }
668 669
670 class FakeScrollClient : public WebLayerScrollClient {
671 public:
672 FakeScrollClient() : didScrollCount(0) {}
673
674 void didScroll(const gfx::ScrollOffset& scrollOffset) final {
675 didScrollCount++;
676 lastScrollOffset = scrollOffset;
677 };
678
679 gfx::ScrollOffset lastScrollOffset;
680 unsigned didScrollCount;
681 };
682
669 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneScrollNode) { 683 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneScrollNode) {
684 FakeScrollClient scrollClient;
685
670 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0); 686 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0);
671 RefPtr<TransformPaintPropertyNode> scrollTranslation = 687 RefPtr<TransformPaintPropertyNode> scrollTranslation =
672 TransformPaintPropertyNode::createScrollTranslation( 688 TransformPaintPropertyNode::createScrollTranslation(
673 TransformPaintPropertyNode::root(), 689 TransformPaintPropertyNode::root(),
674 TransformationMatrix().translate(7, 9), FloatPoint3D(), false, 0, 690 TransformationMatrix().translate(7, 9), FloatPoint3D(), false, 0,
675 CompositingReasonNone, expectedCompositorElementId, 691 CompositingReasonNone, expectedCompositorElementId,
676 ScrollPaintPropertyNode::root(), IntSize(11, 13), IntSize(27, 31), 692 ScrollPaintPropertyNode::root(), IntSize(11, 13), IntSize(27, 31),
677 true, false, 0 /* mainThreadScrollingReasons */); 693 true, false, 0 /* mainThreadScrollingReasons */, &scrollClient);
678 694
679 TestPaintArtifact artifact; 695 TestPaintArtifact artifact;
680 artifact 696 artifact
681 .chunk(scrollTranslation, ClipPaintPropertyNode::root(), 697 .chunk(scrollTranslation, ClipPaintPropertyNode::root(),
682 EffectPaintPropertyNode::root()) 698 EffectPaintPropertyNode::root())
683 .rectDrawing(FloatRect(11, 13, 17, 19), Color::white); 699 .rectDrawing(FloatRect(11, 13, 17, 19), Color::white);
684 update(artifact.build()); 700 update(artifact.build());
685 701
686 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree; 702 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree;
687 // Node #0 reserved for null; #1 for root render surface. 703 // Node #0 reserved for null; #1 for root render surface.
(...skipping 10 matching lines...) Expand all
698 EXPECT_EQ(expectedCompositorElementId, contentLayerAt(0)->element_id()); 714 EXPECT_EQ(expectedCompositorElementId, contentLayerAt(0)->element_id());
699 715
700 const cc::TransformTree& transformTree = propertyTrees().transform_tree; 716 const cc::TransformTree& transformTree = propertyTrees().transform_tree;
701 const cc::TransformNode& transformNode = 717 const cc::TransformNode& transformNode =
702 *transformTree.Node(scrollNode.transform_id); 718 *transformTree.Node(scrollNode.transform_id);
703 EXPECT_TRUE(transformNode.local.IsIdentity()); 719 EXPECT_TRUE(transformNode.local.IsIdentity());
704 EXPECT_EQ(gfx::ScrollOffset(-7, -9), transformNode.scroll_offset); 720 EXPECT_EQ(gfx::ScrollOffset(-7, -9), transformNode.scroll_offset);
705 721
706 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain, 722 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
707 scrollNode.main_thread_scrolling_reasons); 723 scrollNode.main_thread_scrolling_reasons);
724
725 auto* layer = contentLayerAt(0);
726 EXPECT_EQ(layer->id(), scrollNode.owning_layer_id);
727 auto scrollNodeIndexIt =
728 propertyTrees().layer_id_to_scroll_node_index.find(layer->id());
729 EXPECT_EQ(scrollNodeIndexIt->second, scrollNode.id);
730
731 EXPECT_EQ(0u, scrollClient.didScrollCount);
732 layer->SetScrollOffsetFromImplSide(gfx::ScrollOffset(1, 2));
733 EXPECT_EQ(1u, scrollClient.didScrollCount);
734 EXPECT_EQ(gfx::ScrollOffset(1, 2), scrollClient.lastScrollOffset);
708 } 735 }
709 736
710 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformUnderScrollNode) { 737 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformUnderScrollNode) {
711 RefPtr<TransformPaintPropertyNode> scrollTranslation = 738 RefPtr<TransformPaintPropertyNode> scrollTranslation =
712 TransformPaintPropertyNode::createScrollTranslation( 739 TransformPaintPropertyNode::createScrollTranslation(
713 TransformPaintPropertyNode::root(), 740 TransformPaintPropertyNode::root(),
714 TransformationMatrix().translate(7, 9), FloatPoint3D(), false, 0, 741 TransformationMatrix().translate(7, 9), FloatPoint3D(), false, 0,
715 CompositingReasonNone, CompositorElementId(), 742 CompositingReasonNone, CompositorElementId(),
716 ScrollPaintPropertyNode::root(), IntSize(11, 13), IntSize(27, 31), 743 ScrollPaintPropertyNode::root(), IntSize(11, 13), IntSize(27, 31),
717 true, false, 0 /* mainThreadScrollingReasons */); 744 true, false, 0 /* mainThreadScrollingReasons */, nullptr);
718 745
719 RefPtr<TransformPaintPropertyNode> transform = 746 RefPtr<TransformPaintPropertyNode> transform =
720 TransformPaintPropertyNode::create( 747 TransformPaintPropertyNode::create(
721 scrollTranslation, TransformationMatrix(), FloatPoint3D(), false, 0, 748 scrollTranslation, TransformationMatrix(), FloatPoint3D(), false, 0,
722 CompositingReason3DTransform); 749 CompositingReason3DTransform);
723 750
724 TestPaintArtifact artifact; 751 TestPaintArtifact artifact;
725 artifact 752 artifact
726 .chunk(scrollTranslation, ClipPaintPropertyNode::root(), 753 .chunk(scrollTranslation, ClipPaintPropertyNode::root(),
727 EffectPaintPropertyNode::root()) 754 EffectPaintPropertyNode::root())
(...skipping 24 matching lines...) Expand all
752 RefPtr<EffectPaintPropertyNode> effect = 779 RefPtr<EffectPaintPropertyNode> effect =
753 createOpacityOnlyEffect(EffectPaintPropertyNode::root(), 0.5); 780 createOpacityOnlyEffect(EffectPaintPropertyNode::root(), 0.5);
754 781
755 CompositorElementId expectedCompositorElementIdA = CompositorElementId(2, 0); 782 CompositorElementId expectedCompositorElementIdA = CompositorElementId(2, 0);
756 RefPtr<TransformPaintPropertyNode> scrollTranslationA = 783 RefPtr<TransformPaintPropertyNode> scrollTranslationA =
757 TransformPaintPropertyNode::createScrollTranslation( 784 TransformPaintPropertyNode::createScrollTranslation(
758 TransformPaintPropertyNode::root(), 785 TransformPaintPropertyNode::root(),
759 TransformationMatrix().translate(11, 13), FloatPoint3D(), false, 0, 786 TransformationMatrix().translate(11, 13), FloatPoint3D(), false, 0,
760 CompositingReasonNone, expectedCompositorElementIdA, 787 CompositingReasonNone, expectedCompositorElementIdA,
761 ScrollPaintPropertyNode::root(), IntSize(2, 3), IntSize(5, 7), false, 788 ScrollPaintPropertyNode::root(), IntSize(2, 3), IntSize(5, 7), false,
762 true, 789 true, MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects,
763 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); 790 nullptr);
764 791
765 CompositorElementId expectedCompositorElementIdB = CompositorElementId(3, 0); 792 CompositorElementId expectedCompositorElementIdB = CompositorElementId(3, 0);
766 RefPtr<TransformPaintPropertyNode> scrollTranslationB = 793 RefPtr<TransformPaintPropertyNode> scrollTranslationB =
767 TransformPaintPropertyNode::createScrollTranslation( 794 TransformPaintPropertyNode::createScrollTranslation(
768 scrollTranslationA, TransformationMatrix().translate(37, 41), 795 scrollTranslationA, TransformationMatrix().translate(37, 41),
769 FloatPoint3D(), false, 0, CompositingReasonNone, 796 FloatPoint3D(), false, 0, CompositingReasonNone,
770 expectedCompositorElementIdB, scrollTranslationA->scrollNode(), 797 expectedCompositorElementIdB, scrollTranslationA->scrollNode(),
771 IntSize(19, 23), IntSize(29, 31), true, false, 798 IntSize(19, 23), IntSize(29, 31), true, false,
772 0 /* mainThreadScrollingReasons */); 799 0 /* mainThreadScrollingReasons */, nullptr);
773 TestPaintArtifact artifact; 800 TestPaintArtifact artifact;
774 artifact.chunk(scrollTranslationA, ClipPaintPropertyNode::root(), effect) 801 artifact.chunk(scrollTranslationA, ClipPaintPropertyNode::root(), effect)
775 .rectDrawing(FloatRect(7, 11, 13, 17), Color::white); 802 .rectDrawing(FloatRect(7, 11, 13, 17), Color::white);
776 artifact.chunk(scrollTranslationB, ClipPaintPropertyNode::root(), effect) 803 artifact.chunk(scrollTranslationB, ClipPaintPropertyNode::root(), effect)
777 .rectDrawing(FloatRect(1, 2, 3, 5), Color::white); 804 .rectDrawing(FloatRect(1, 2, 3, 5), Color::white);
778 update(artifact.build()); 805 update(artifact.build());
779 806
780 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree; 807 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree;
781 // Node #0 reserved for null; #1 for root render surface. 808 // Node #0 reserved for null; #1 for root render surface.
782 ASSERT_EQ(3u, scrollTree.size()); 809 ASSERT_EQ(3u, scrollTree.size());
(...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 artifact 1711 artifact
1685 .chunk(TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), 1712 .chunk(TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(),
1686 effect.get()) 1713 effect.get())
1687 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); 1714 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black);
1688 update(artifact.build()); 1715 update(artifact.build());
1689 1716
1690 EXPECT_EQ(2, elementIdToEffectNodeIndex(expectedCompositorElementId)); 1717 EXPECT_EQ(2, elementIdToEffectNodeIndex(expectedCompositorElementId));
1691 } 1718 }
1692 1719
1693 } // namespace blink 1720 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698