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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 1642093002: Purge the ScrollBlocksOn code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix android build failures Created 4 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_unittest_scroll.cc » ('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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 712
713 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnWheelEventHandlers) { 713 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnWheelEventHandlers) {
714 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 714 SetupScrollAndContentsLayers(gfx::Size(100, 100));
715 host_impl_->SetViewportSize(gfx::Size(50, 50)); 715 host_impl_->SetViewportSize(gfx::Size(50, 50));
716 DrawFrame(); 716 DrawFrame();
717 LayerImpl* root = host_impl_->active_tree()->root_layer(); 717 LayerImpl* root = host_impl_->active_tree()->root_layer();
718 718
719 // With registered event handlers, wheel scrolls don't necessarily 719 // With registered event handlers, wheel scrolls don't necessarily
720 // have to go to the main thread. 720 // have to go to the main thread.
721 root->SetHaveWheelEventHandlers(true); 721 root->SetHaveWheelEventHandlers(true);
722 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 722 InputHandler::ScrollStatus status =
723 BeginState(gfx::Point()).get(), InputHandler::WHEEL); 723 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
724 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
725 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
726 status.main_thread_scrolling_reasons);
727 host_impl_->ScrollEnd(EndState().get());
728
729 // But typically the scroll-blocks-on mode will require them to.
730 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_WHEEL_EVENT |
731 SCROLL_BLOCKS_ON_START_TOUCH);
732 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
733 InputHandler::WHEEL); 724 InputHandler::WHEEL);
734 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread); 725 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
735 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers, 726 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
736 status.main_thread_scrolling_reasons); 727 status.main_thread_scrolling_reasons);
737 728
738 // But gesture scrolls can still be handled. 729 // But gesture scrolls can still be handled.
739 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 730 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
740 InputHandler::GESTURE); 731 InputHandler::GESTURE);
741 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread); 732 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
742 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain, 733 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
(...skipping 24 matching lines...) Expand all
767 child = child_layer.get(); 758 child = child_layer.get();
768 child_layer->SetDrawsContent(true); 759 child_layer->SetDrawsContent(true);
769 child_layer->SetPosition(gfx::PointF(0, 20)); 760 child_layer->SetPosition(gfx::PointF(0, 20));
770 child_layer->SetBounds(gfx::Size(50, 50)); 761 child_layer->SetBounds(gfx::Size(50, 50));
771 scroll->AddChild(std::move(child_layer)); 762 scroll->AddChild(std::move(child_layer));
772 RebuildPropertyTrees(); 763 RebuildPropertyTrees();
773 } 764 }
774 765
775 // Touch handler regions determine whether touch events block scroll. 766 // Touch handler regions determine whether touch events block scroll.
776 root->SetTouchEventHandlerRegion(gfx::Rect(0, 0, 100, 100)); 767 root->SetTouchEventHandlerRegion(gfx::Rect(0, 0, 100, 100));
777 EXPECT_FALSE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 10)));
778 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_START_TOUCH |
779 SCROLL_BLOCKS_ON_WHEEL_EVENT);
780 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 10))); 768 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 10)));
781 769
782 // But they don't influence the actual handling of the scroll gestures. 770 // But they don't influence the actual handling of the scroll gestures.
783 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 771 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
784 BeginState(gfx::Point()).get(), InputHandler::GESTURE); 772 BeginState(gfx::Point()).get(), InputHandler::GESTURE);
785 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread); 773 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
786 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain, 774 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
787 status.main_thread_scrolling_reasons); 775 status.main_thread_scrolling_reasons);
788 host_impl_->ScrollEnd(EndState().get()); 776 host_impl_->ScrollEnd(EndState().get());
789 777
790 // It's the union of scroll-blocks-on mode bits across all layers in the
791 // scroll paret chain that matters.
792 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30))); 778 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30)));
793 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_NONE); 779 root->SetTouchEventHandlerRegion(gfx::Rect());
794 EXPECT_FALSE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30))); 780 EXPECT_FALSE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30)));
795 child->SetScrollBlocksOn(SCROLL_BLOCKS_ON_START_TOUCH); 781 child->SetTouchEventHandlerRegion(gfx::Rect(0, 0, 50, 50));
796 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30))); 782 EXPECT_TRUE(host_impl_->DoTouchEventsBlockScrollAt(gfx::Point(10, 30)));
797 } 783 }
798 784
799 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnScrollEventHandlers) {
800 SetupScrollAndContentsLayers(gfx::Size(100, 100));
801 host_impl_->SetViewportSize(gfx::Size(50, 50));
802 DrawFrame();
803 LayerImpl* root = host_impl_->active_tree()->root_layer();
804
805 // With registered scroll handlers, scrolls don't generally have to go
806 // to the main thread.
807 root->SetHaveScrollEventHandlers(true);
808 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
809 BeginState(gfx::Point()).get(), InputHandler::WHEEL);
810 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
811 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
812 status.main_thread_scrolling_reasons);
813
814 host_impl_->ScrollEnd(EndState().get());
815
816 // Even the default scroll blocks on mode doesn't require this.
817 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_WHEEL_EVENT |
818 SCROLL_BLOCKS_ON_START_TOUCH);
819 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
820 InputHandler::GESTURE);
821 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
822 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
823 status.main_thread_scrolling_reasons);
824
825 host_impl_->ScrollEnd(EndState().get());
826
827 // But the page can opt in to blocking on scroll event handlers.
828 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_SCROLL_EVENT);
829 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
830 InputHandler::GESTURE);
831 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
832 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
833 status.main_thread_scrolling_reasons);
834
835 // GESTURE and WHEEL scrolls behave identically in this regard.
836 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
837 InputHandler::WHEEL);
838 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
839 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
840 status.main_thread_scrolling_reasons);
841
842 // And if the handlers go away, scrolls can again be processed on impl
843 // (despite the scroll-blocks-on mode).
844 root->SetHaveScrollEventHandlers(false);
845 status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
846 InputHandler::GESTURE);
847 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
848 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
849 status.main_thread_scrolling_reasons);
850
851 host_impl_->ScrollEnd(EndState().get());
852 }
853
854 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnLayerTopology) {
855 host_impl_->SetViewportSize(gfx::Size(50, 50));
856
857 // Create a normal scrollable root layer
858 LayerImpl* root_scroll = SetupScrollAndContentsLayers(gfx::Size(100, 100));
859 LayerImpl* root_child = root_scroll->children()[0].get();
860 LayerImpl* root = host_impl_->active_tree()->root_layer();
861 DrawFrame();
862
863 // Create two child scrollable layers
864 LayerImpl* child1 = 0;
865 {
866 scoped_ptr<LayerImpl> scrollable_child_clip_1 =
867 LayerImpl::Create(host_impl_->active_tree(), 6);
868 scoped_ptr<LayerImpl> scrollable_child_1 = CreateScrollableLayer(
869 7, gfx::Size(10, 10), scrollable_child_clip_1.get());
870 child1 = scrollable_child_1.get();
871 scrollable_child_1->SetPosition(gfx::PointF(5.f, 5.f));
872 scrollable_child_1->SetHaveWheelEventHandlers(true);
873 scrollable_child_1->SetHaveScrollEventHandlers(true);
874 scrollable_child_clip_1->AddChild(std::move(scrollable_child_1));
875 root_child->AddChild(std::move(scrollable_child_clip_1));
876 RebuildPropertyTrees();
877 }
878
879 LayerImpl* child2 = 0;
880 {
881 scoped_ptr<LayerImpl> scrollable_child_clip_2 =
882 LayerImpl::Create(host_impl_->active_tree(), 8);
883 scoped_ptr<LayerImpl> scrollable_child_2 = CreateScrollableLayer(
884 9, gfx::Size(10, 10), scrollable_child_clip_2.get());
885 child2 = scrollable_child_2.get();
886 scrollable_child_2->SetPosition(gfx::PointF(5.f, 20.f));
887 scrollable_child_2->SetHaveWheelEventHandlers(true);
888 scrollable_child_2->SetHaveScrollEventHandlers(true);
889 scrollable_child_clip_2->AddChild(std::move(scrollable_child_2));
890 root_child->AddChild(std::move(scrollable_child_clip_2));
891 RebuildPropertyTrees();
892 }
893
894 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
895 BeginState(gfx::Point(10, 10)).get(), InputHandler::GESTURE);
896 // Scroll-blocks-on on a layer affects scrolls that hit that layer.
897 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
898 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
899 status.main_thread_scrolling_reasons);
900 host_impl_->ScrollEnd(EndState().get());
901
902 child1->SetScrollBlocksOn(SCROLL_BLOCKS_ON_SCROLL_EVENT);
903 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(),
904 InputHandler::GESTURE);
905 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
906 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
907 status.main_thread_scrolling_reasons);
908
909 // But not those that hit only other layers.
910 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
911 InputHandler::GESTURE);
912 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
913 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
914 status.main_thread_scrolling_reasons);
915 host_impl_->ScrollEnd(EndState().get());
916
917 // It's the union of bits set across the scroll ancestor chain that matters.
918 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
919 InputHandler::GESTURE);
920 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
921 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
922 status.main_thread_scrolling_reasons);
923
924 host_impl_->ScrollEnd(EndState().get());
925 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
926 InputHandler::WHEEL);
927 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
928 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
929 status.main_thread_scrolling_reasons);
930
931 host_impl_->ScrollEnd(EndState().get());
932 root->SetScrollBlocksOn(SCROLL_BLOCKS_ON_WHEEL_EVENT);
933 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
934 InputHandler::GESTURE);
935 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, status.thread);
936 EXPECT_EQ(MainThreadScrollingReason::kNotScrollingOnMain,
937 status.main_thread_scrolling_reasons);
938
939 host_impl_->ScrollEnd(EndState().get());
940 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
941 InputHandler::WHEEL);
942 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
943 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
944 status.main_thread_scrolling_reasons);
945
946 child2->SetScrollBlocksOn(SCROLL_BLOCKS_ON_SCROLL_EVENT);
947 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
948 InputHandler::WHEEL);
949 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
950 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
951 status.main_thread_scrolling_reasons);
952
953 status = host_impl_->ScrollBegin(BeginState(gfx::Point(10, 25)).get(),
954 InputHandler::GESTURE);
955 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread);
956 EXPECT_EQ(MainThreadScrollingReason::kEventHandlers,
957 status.main_thread_scrolling_reasons);
958 }
959
960 TEST_F(LayerTreeHostImplTest, FlingOnlyWhenScrollingTouchscreen) { 785 TEST_F(LayerTreeHostImplTest, FlingOnlyWhenScrollingTouchscreen) {
961 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 786 SetupScrollAndContentsLayers(gfx::Size(100, 100));
962 host_impl_->SetViewportSize(gfx::Size(50, 50)); 787 host_impl_->SetViewportSize(gfx::Size(50, 50));
963 DrawFrame(); 788 DrawFrame();
964 789
965 // Ignore the fling since no layer is being scrolled 790 // Ignore the fling since no layer is being scrolled
966 InputHandler::ScrollStatus status = host_impl_->FlingScrollBegin(); 791 InputHandler::ScrollStatus status = host_impl_->FlingScrollBegin();
967 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread); 792 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread);
968 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer, 793 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer,
969 status.main_thread_scrolling_reasons); 794 status.main_thread_scrolling_reasons);
(...skipping 9167 matching lines...) Expand 10 before | Expand all | Expand 10 after
10137 // There should not be any jitter measured till we hit the fixed point hits 9962 // There should not be any jitter measured till we hit the fixed point hits
10138 // threshold. 9963 // threshold.
10139 float expected_jitter = 9964 float expected_jitter =
10140 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0; 9965 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0;
10141 EXPECT_EQ(jitter, expected_jitter); 9966 EXPECT_EQ(jitter, expected_jitter);
10142 } 9967 }
10143 } 9968 }
10144 9969
10145 } // namespace 9970 } // namespace
10146 } // namespace cc 9971 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_unittest_scroll.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698