Index: cc/trees/layer_tree_host_impl_unittest.cc |
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc |
index 07f0250591ffe372db87057c9a13bccca396d6d0..4a8082a07b816ef2258b3f5ef884fb5c6a2803d8 100644 |
--- a/cc/trees/layer_tree_host_impl_unittest.cc |
+++ b/cc/trees/layer_tree_host_impl_unittest.cc |
@@ -61,6 +61,7 @@ |
#include "cc/test/test_compositor_frame_sink.h" |
#include "cc/test/test_task_graph_runner.h" |
#include "cc/test/test_web_graphics_context_3d.h" |
+#include "cc/trees/draw_property_utils.h" |
#include "cc/trees/effect_node.h" |
#include "cc/trees/layer_tree_host_common.h" |
#include "cc/trees/layer_tree_impl.h" |
@@ -2274,6 +2275,53 @@ TEST_F(LayerTreeHostImplTest, PinchGesture) { |
} |
} |
+TEST_F(LayerTreeHostImplTest, SyncSubpixelScrollDelta) { |
+ SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
+ host_impl_->SetViewportSize(gfx::Size(50, 50)); |
+ DrawFrame(); |
+ |
+ LayerImpl* scroll_layer = host_impl_->InnerViewportScrollLayer(); |
+ DCHECK(scroll_layer); |
+ |
+ float min_page_scale = 1.f; |
+ float max_page_scale = 4.f; |
+ |
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, |
+ max_page_scale); |
+ SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); |
+ scroll_layer->layer_tree_impl() |
+ ->property_trees() |
+ ->scroll_tree.CollectScrollDeltasForTesting(); |
+ scroll_layer->layer_tree_impl() |
+ ->property_trees() |
+ ->scroll_tree.UpdateScrollOffsetBaseForTesting(scroll_layer->id(), |
+ gfx::ScrollOffset(0, 20)); |
+ |
+ float page_scale_delta = 1.f; |
+ host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(), |
+ InputHandler::TOUCHSCREEN); |
+ host_impl_->PinchGestureBegin(); |
+ host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); |
+ host_impl_->ScrollBy( |
+ UpdateState(gfx::Point(10, 10), gfx::Vector2dF(0, -1.001f)).get()); |
+ host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 9)); |
+ host_impl_->PinchGestureEnd(); |
+ host_impl_->ScrollEnd(EndState().get()); |
+ |
+ std::unique_ptr<ScrollAndScaleSet> scroll_info = |
+ host_impl_->ProcessScrollDeltas(); |
+ EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); |
+ EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), |
+ gfx::Vector2d(0, -1))); |
+ |
+ // Verify this scroll delta is consistent with the snapped position of the |
+ // scroll layer. |
+ draw_property_utils::ComputeTransforms( |
+ &scroll_layer->layer_tree_impl()->property_trees()->transform_tree); |
+ EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, -19.f), |
+ scroll_layer->ScreenSpaceTransform().To2dTranslation()); |
+} |
+ |
TEST_F(LayerTreeHostImplTest, PageScaleAnimation) { |
SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
host_impl_->SetViewportSize(gfx::Size(50, 50)); |
@@ -5681,12 +5729,12 @@ TEST_F(LayerTreeHostImplTest, ScrollPerspectiveTransformedLayer) { |
gfx::Vector2d expected_scroll_deltas[4]; |
// Perspective affects the vertical delta by a different |
// amount depending on the vertical position of the |viewport_point|. |
- expected_scroll_deltas[0] = gfx::Vector2d(2, 8); |
+ expected_scroll_deltas[0] = gfx::Vector2d(2, 9); |
expected_scroll_deltas[1] = gfx::Vector2d(1, 4); |
// Deltas which start with the same vertical position of the |
// |viewport_point| are subject to identical perspective effects. |
- expected_scroll_deltas[2] = gfx::Vector2d(4, 0); |
- expected_scroll_deltas[3] = gfx::Vector2d(4, 0); |
+ expected_scroll_deltas[2] = gfx::Vector2d(5, 0); |
+ expected_scroll_deltas[3] = gfx::Vector2d(5, 0); |
gfx::Point viewport_point(1, 1); |