| OLD | NEW |
| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 1826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1837 DrawFrame(); | 1837 DrawFrame(); |
| 1838 { | 1838 { |
| 1839 CompositorFrameMetadata metadata = | 1839 CompositorFrameMetadata metadata = |
| 1840 host_impl_->MakeCompositorFrameMetadata(); | 1840 host_impl_->MakeCompositorFrameMetadata(); |
| 1841 EXPECT_EQ(gfx::Vector2dF(), metadata.root_scroll_offset); | 1841 EXPECT_EQ(gfx::Vector2dF(), metadata.root_scroll_offset); |
| 1842 EXPECT_EQ(1.f, metadata.page_scale_factor); | 1842 EXPECT_EQ(1.f, metadata.page_scale_factor); |
| 1843 EXPECT_EQ(gfx::SizeF(50.f, 50.f), metadata.scrollable_viewport_size); | 1843 EXPECT_EQ(gfx::SizeF(50.f, 50.f), metadata.scrollable_viewport_size); |
| 1844 EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size); | 1844 EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size); |
| 1845 EXPECT_EQ(0.5f, metadata.min_page_scale_factor); | 1845 EXPECT_EQ(0.5f, metadata.min_page_scale_factor); |
| 1846 EXPECT_EQ(4.f, metadata.max_page_scale_factor); | 1846 EXPECT_EQ(4.f, metadata.max_page_scale_factor); |
| 1847 EXPECT_FALSE(metadata.root_overflow_x_hidden); |
| 1848 EXPECT_FALSE(metadata.root_overflow_y_hidden); |
| 1847 } | 1849 } |
| 1848 | 1850 |
| 1849 // Scrolling should update metadata immediately. | 1851 // Scrolling should update metadata immediately. |
| 1850 EXPECT_EQ(InputHandler::ScrollStarted, | 1852 EXPECT_EQ(InputHandler::ScrollStarted, |
| 1851 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); | 1853 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); |
| 1852 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); | 1854 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); |
| 1853 { | 1855 { |
| 1854 CompositorFrameMetadata metadata = | 1856 CompositorFrameMetadata metadata = |
| 1855 host_impl_->MakeCompositorFrameMetadata(); | 1857 host_impl_->MakeCompositorFrameMetadata(); |
| 1856 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); | 1858 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); |
| 1857 } | 1859 } |
| 1858 host_impl_->ScrollEnd(); | 1860 host_impl_->ScrollEnd(); |
| 1859 { | 1861 { |
| 1860 CompositorFrameMetadata metadata = | 1862 CompositorFrameMetadata metadata = |
| 1861 host_impl_->MakeCompositorFrameMetadata(); | 1863 host_impl_->MakeCompositorFrameMetadata(); |
| 1862 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); | 1864 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); |
| 1863 } | 1865 } |
| 1864 | 1866 |
| 1867 // Root "overflow: hidden" properties should be reflected. |
| 1868 { |
| 1869 host_impl_->active_tree() |
| 1870 ->InnerViewportScrollLayer() |
| 1871 ->set_user_scrollable_horizontal(false); |
| 1872 CompositorFrameMetadata metadata = |
| 1873 host_impl_->MakeCompositorFrameMetadata(); |
| 1874 EXPECT_TRUE(metadata.root_overflow_x_hidden); |
| 1875 EXPECT_FALSE(metadata.root_overflow_y_hidden); |
| 1876 |
| 1877 host_impl_->active_tree() |
| 1878 ->InnerViewportScrollLayer() |
| 1879 ->set_user_scrollable_vertical(false); |
| 1880 metadata = host_impl_->MakeCompositorFrameMetadata(); |
| 1881 EXPECT_TRUE(metadata.root_overflow_x_hidden); |
| 1882 EXPECT_TRUE(metadata.root_overflow_y_hidden); |
| 1883 } |
| 1884 |
| 1865 // Page scale should update metadata correctly (shrinking only the viewport). | 1885 // Page scale should update metadata correctly (shrinking only the viewport). |
| 1866 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); | 1886 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); |
| 1867 host_impl_->PinchGestureBegin(); | 1887 host_impl_->PinchGestureBegin(); |
| 1868 host_impl_->PinchGestureUpdate(2.f, gfx::Point()); | 1888 host_impl_->PinchGestureUpdate(2.f, gfx::Point()); |
| 1869 host_impl_->PinchGestureEnd(); | 1889 host_impl_->PinchGestureEnd(); |
| 1870 host_impl_->ScrollEnd(); | 1890 host_impl_->ScrollEnd(); |
| 1871 { | 1891 { |
| 1872 CompositorFrameMetadata metadata = | 1892 CompositorFrameMetadata metadata = |
| 1873 host_impl_->MakeCompositorFrameMetadata(); | 1893 host_impl_->MakeCompositorFrameMetadata(); |
| 1874 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); | 1894 EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset); |
| (...skipping 6068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7943 ExpectContains(*scroll_info, child_scroll->id(), scroll_delta); | 7963 ExpectContains(*scroll_info, child_scroll->id(), scroll_delta); |
| 7944 ExpectContains(*scroll_info, inner_scroll->id(), scroll_delta); | 7964 ExpectContains(*scroll_info, inner_scroll->id(), scroll_delta); |
| 7945 | 7965 |
| 7946 // As the locked layer is at its limit, no further scrolling can occur. | 7966 // As the locked layer is at its limit, no further scrolling can occur. |
| 7947 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); | 7967 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); |
| 7948 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), inner_scroll); | 7968 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), inner_scroll); |
| 7949 host_impl_->ScrollEnd(); | 7969 host_impl_->ScrollEnd(); |
| 7950 } | 7970 } |
| 7951 } | 7971 } |
| 7952 | 7972 |
| 7973 TEST_F(LayerTreeHostImplVirtualViewportTest, |
| 7974 NoOverscrollWhenRootMarkedNonUserScrollable) { |
| 7975 gfx::Size content_size = gfx::Size(100, 160); |
| 7976 gfx::Size outer_viewport = gfx::Size(50, 80); |
| 7977 gfx::Size inner_viewport = gfx::Size(25, 40); |
| 7978 |
| 7979 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); |
| 7980 |
| 7981 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); |
| 7982 outer_scroll->set_user_scrollable_vertical(false); |
| 7983 |
| 7984 InputHandlerScrollResult scroll_result; |
| 7985 DrawFrame(); |
| 7986 EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll()); |
| 7987 |
| 7988 // In-bounds scrolling does not affect overscroll. |
| 7989 EXPECT_EQ(InputHandler::ScrollStarted, |
| 7990 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 7991 scroll_result = host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); |
| 7992 EXPECT_TRUE(scroll_result.did_scroll); |
| 7993 EXPECT_FALSE(scroll_result.did_overscroll_root); |
| 7994 EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta); |
| 7995 EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll()); |
| 7996 |
| 7997 // As the outer viewport is marked as non-scrollable on the y-axis, |
| 7998 // overscroll reporting should be suppressed, and indicated as such. |
| 7999 scroll_result = host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 50)); |
| 8000 EXPECT_TRUE(scroll_result.did_scroll); |
| 8001 EXPECT_FALSE(scroll_result.did_overscroll_root); |
| 8002 EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta); |
| 8003 EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll()); |
| 8004 |
| 8005 // Repeated overscrolls should also be suppressed. |
| 8006 scroll_result = host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 50)); |
| 8007 EXPECT_FALSE(scroll_result.did_scroll); |
| 8008 EXPECT_FALSE(scroll_result.did_overscroll_root); |
| 8009 EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta); |
| 8010 EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll()); |
| 8011 |
| 8012 // Scrolling the inner viewport back up should be possible. |
| 8013 scroll_result = host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, -10)); |
| 8014 EXPECT_TRUE(scroll_result.did_scroll); |
| 8015 EXPECT_FALSE(scroll_result.did_overscroll_root); |
| 8016 EXPECT_EQ(gfx::Vector2dF(), scroll_result.unused_scroll_delta); |
| 8017 EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll()); |
| 8018 |
| 8019 host_impl_->ScrollEnd(); |
| 8020 } |
| 8021 |
| 7953 class LayerTreeHostImplWithImplicitLimitsTest : public LayerTreeHostImplTest { | 8022 class LayerTreeHostImplWithImplicitLimitsTest : public LayerTreeHostImplTest { |
| 7954 public: | 8023 public: |
| 7955 void SetUp() override { | 8024 void SetUp() override { |
| 7956 LayerTreeSettings settings = DefaultSettings(); | 8025 LayerTreeSettings settings = DefaultSettings(); |
| 7957 settings.max_memory_for_prepaint_percentage = 50; | 8026 settings.max_memory_for_prepaint_percentage = 50; |
| 7958 CreateHostImpl(settings, CreateOutputSurface()); | 8027 CreateHostImpl(settings, CreateOutputSurface()); |
| 7959 } | 8028 } |
| 7960 }; | 8029 }; |
| 7961 | 8030 |
| 7962 TEST_F(LayerTreeHostImplWithImplicitLimitsTest, ImplicitMemoryLimits) { | 8031 TEST_F(LayerTreeHostImplWithImplicitLimitsTest, ImplicitMemoryLimits) { |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8215 // surface. | 8284 // surface. |
| 8216 EXPECT_EQ(0, num_lost_surfaces_); | 8285 EXPECT_EQ(0, num_lost_surfaces_); |
| 8217 host_impl_->DidLoseOutputSurface(); | 8286 host_impl_->DidLoseOutputSurface(); |
| 8218 EXPECT_EQ(1, num_lost_surfaces_); | 8287 EXPECT_EQ(1, num_lost_surfaces_); |
| 8219 host_impl_->DidLoseOutputSurface(); | 8288 host_impl_->DidLoseOutputSurface(); |
| 8220 EXPECT_LE(1, num_lost_surfaces_); | 8289 EXPECT_LE(1, num_lost_surfaces_); |
| 8221 } | 8290 } |
| 8222 | 8291 |
| 8223 } // namespace | 8292 } // namespace |
| 8224 } // namespace cc | 8293 } // namespace cc |
| OLD | NEW |