| 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 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 root_layer->SetScrollOffset(scroll_offset); | 476 root_layer->SetScrollOffset(scroll_offset); |
| 477 root_layer->ScrollBy(scroll_delta); | 477 root_layer->ScrollBy(scroll_delta); |
| 478 host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); | 478 host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); |
| 479 } | 479 } |
| 480 LayerImpl* root = host_impl_->active_tree()->root_layer()->children()[0]; | 480 LayerImpl* root = host_impl_->active_tree()->root_layer()->children()[0]; |
| 481 | 481 |
| 482 scoped_ptr<ScrollAndScaleSet> scroll_info; | 482 scoped_ptr<ScrollAndScaleSet> scroll_info; |
| 483 | 483 |
| 484 scroll_info = host_impl_->ProcessScrollDeltas(); | 484 scroll_info = host_impl_->ProcessScrollDeltas(); |
| 485 ASSERT_EQ(scroll_info->scrolls.size(), 1u); | 485 ASSERT_EQ(scroll_info->scrolls.size(), 1u); |
| 486 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), scroll_delta); | |
| 487 ExpectContains(*scroll_info, root->id(), scroll_delta); | 486 ExpectContains(*scroll_info, root->id(), scroll_delta); |
| 488 | 487 |
| 489 gfx::Vector2d scroll_delta2(-5, 27); | 488 gfx::Vector2d scroll_delta2(-5, 27); |
| 490 root->ScrollBy(scroll_delta2); | 489 root->ScrollBy(scroll_delta2); |
| 491 scroll_info = host_impl_->ProcessScrollDeltas(); | 490 scroll_info = host_impl_->ProcessScrollDeltas(); |
| 492 ASSERT_EQ(scroll_info->scrolls.size(), 1u); | 491 ASSERT_EQ(scroll_info->scrolls.size(), 1u); |
| 493 EXPECT_VECTOR_EQ(root->sent_scroll_delta(), scroll_delta + scroll_delta2); | |
| 494 ExpectContains(*scroll_info, root->id(), scroll_delta + scroll_delta2); | 492 ExpectContains(*scroll_info, root->id(), scroll_delta + scroll_delta2); |
| 495 | 493 |
| 496 root->ScrollBy(gfx::Vector2d()); | 494 root->ScrollBy(gfx::Vector2d()); |
| 497 scroll_info = host_impl_->ProcessScrollDeltas(); | 495 scroll_info = host_impl_->ProcessScrollDeltas(); |
| 498 EXPECT_EQ(root->sent_scroll_delta(), scroll_delta + scroll_delta2); | 496 ExpectContains(*scroll_info, root->id(), scroll_delta + scroll_delta2); |
| 499 } | 497 } |
| 500 | 498 |
| 501 TEST_F(LayerTreeHostImplTest, ScrollRootCallsCommitAndRedraw) { | 499 TEST_F(LayerTreeHostImplTest, ScrollRootCallsCommitAndRedraw) { |
| 502 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 500 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 503 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 501 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
| 504 DrawFrame(); | 502 DrawFrame(); |
| 505 | 503 |
| 506 EXPECT_EQ(InputHandler::ScrollStarted, | 504 EXPECT_EQ(InputHandler::ScrollStarted, |
| 507 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); | 505 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); |
| 508 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(), | 506 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(), |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1024 scoped_ptr<ScrollAndScaleSet> scroll_info = | 1022 scoped_ptr<ScrollAndScaleSet> scroll_info = |
| 1025 host_impl_->ProcessScrollDeltas(); | 1023 host_impl_->ProcessScrollDeltas(); |
| 1026 EXPECT_EQ(scroll_info->page_scale_delta, max_page_scale); | 1024 EXPECT_EQ(scroll_info->page_scale_delta, max_page_scale); |
| 1027 } | 1025 } |
| 1028 | 1026 |
| 1029 // Zoom-out clamping | 1027 // Zoom-out clamping |
| 1030 { | 1028 { |
| 1031 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, | 1029 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, |
| 1032 max_page_scale); | 1030 max_page_scale); |
| 1033 scroll_layer->SetScrollDelta(gfx::Vector2d()); | 1031 scroll_layer->SetScrollDelta(gfx::Vector2d()); |
| 1032 scroll_layer->PullDeltaForMainThread(); |
| 1034 scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50)); | 1033 scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50)); |
| 1035 | 1034 |
| 1036 float page_scale_delta = 0.1f; | 1035 float page_scale_delta = 0.1f; |
| 1037 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); | 1036 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture); |
| 1038 host_impl_->PinchGestureBegin(); | 1037 host_impl_->PinchGestureBegin(); |
| 1039 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); | 1038 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); |
| 1040 host_impl_->PinchGestureEnd(); | 1039 host_impl_->PinchGestureEnd(); |
| 1041 host_impl_->ScrollEnd(); | 1040 host_impl_->ScrollEnd(); |
| 1042 | 1041 |
| 1043 scoped_ptr<ScrollAndScaleSet> scroll_info = | 1042 scoped_ptr<ScrollAndScaleSet> scroll_info = |
| 1044 host_impl_->ProcessScrollDeltas(); | 1043 host_impl_->ProcessScrollDeltas(); |
| 1045 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale); | 1044 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale); |
| 1046 | 1045 |
| 1047 EXPECT_TRUE(scroll_info->scrolls.empty()); | 1046 EXPECT_TRUE(scroll_info->scrolls.empty()); |
| 1048 } | 1047 } |
| 1049 | 1048 |
| 1050 // Two-finger panning should not happen based on pinch events only | 1049 // Two-finger panning should not happen based on pinch events only |
| 1051 { | 1050 { |
| 1052 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, | 1051 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, |
| 1053 max_page_scale); | 1052 max_page_scale); |
| 1054 scroll_layer->SetScrollDelta(gfx::Vector2d()); | 1053 scroll_layer->SetScrollDelta(gfx::Vector2d()); |
| 1054 scroll_layer->PullDeltaForMainThread(); |
| 1055 scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20)); | 1055 scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20)); |
| 1056 | 1056 |
| 1057 float page_scale_delta = 1.f; | 1057 float page_scale_delta = 1.f; |
| 1058 host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture); | 1058 host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture); |
| 1059 host_impl_->PinchGestureBegin(); | 1059 host_impl_->PinchGestureBegin(); |
| 1060 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); | 1060 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); |
| 1061 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); | 1061 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); |
| 1062 host_impl_->PinchGestureEnd(); | 1062 host_impl_->PinchGestureEnd(); |
| 1063 host_impl_->ScrollEnd(); | 1063 host_impl_->ScrollEnd(); |
| 1064 | 1064 |
| 1065 scoped_ptr<ScrollAndScaleSet> scroll_info = | 1065 scoped_ptr<ScrollAndScaleSet> scroll_info = |
| 1066 host_impl_->ProcessScrollDeltas(); | 1066 host_impl_->ProcessScrollDeltas(); |
| 1067 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); | 1067 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); |
| 1068 EXPECT_TRUE(scroll_info->scrolls.empty()); | 1068 EXPECT_TRUE(scroll_info->scrolls.empty()); |
| 1069 } | 1069 } |
| 1070 | 1070 |
| 1071 // Two-finger panning should work with interleaved scroll events | 1071 // Two-finger panning should work with interleaved scroll events |
| 1072 { | 1072 { |
| 1073 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, | 1073 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, |
| 1074 max_page_scale); | 1074 max_page_scale); |
| 1075 scroll_layer->SetScrollDelta(gfx::Vector2d()); | 1075 scroll_layer->SetScrollDelta(gfx::Vector2d()); |
| 1076 scroll_layer->PullDeltaForMainThread(); |
| 1076 scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20)); | 1077 scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20)); |
| 1077 | 1078 |
| 1078 float page_scale_delta = 1.f; | 1079 float page_scale_delta = 1.f; |
| 1079 host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture); | 1080 host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture); |
| 1080 host_impl_->PinchGestureBegin(); | 1081 host_impl_->PinchGestureBegin(); |
| 1081 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); | 1082 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); |
| 1082 host_impl_->ScrollBy(gfx::Point(10, 10), gfx::Vector2d(-10, -10)); | 1083 host_impl_->ScrollBy(gfx::Point(10, 10), gfx::Vector2d(-10, -10)); |
| 1083 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); | 1084 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); |
| 1084 host_impl_->PinchGestureEnd(); | 1085 host_impl_->PinchGestureEnd(); |
| 1085 host_impl_->ScrollEnd(); | 1086 host_impl_->ScrollEnd(); |
| 1086 | 1087 |
| 1087 scoped_ptr<ScrollAndScaleSet> scroll_info = | 1088 scoped_ptr<ScrollAndScaleSet> scroll_info = |
| 1088 host_impl_->ProcessScrollDeltas(); | 1089 host_impl_->ProcessScrollDeltas(); |
| 1089 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); | 1090 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); |
| 1090 ExpectContains(*scroll_info, scroll_layer->id(), gfx::Vector2d(-10, -10)); | 1091 ExpectContains(*scroll_info, scroll_layer->id(), gfx::Vector2d(-10, -10)); |
| 1091 } | 1092 } |
| 1092 | 1093 |
| 1093 // Two-finger panning should work when starting fully zoomed out. | 1094 // Two-finger panning should work when starting fully zoomed out. |
| 1094 { | 1095 { |
| 1095 host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f); | 1096 host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f); |
| 1096 scroll_layer->SetScrollDelta(gfx::Vector2d()); | 1097 scroll_layer->SetScrollDelta(gfx::Vector2d()); |
| 1098 scroll_layer->PullDeltaForMainThread(); |
| 1097 scroll_layer->SetScrollOffset(gfx::ScrollOffset(0, 0)); | 1099 scroll_layer->SetScrollOffset(gfx::ScrollOffset(0, 0)); |
| 1098 | 1100 |
| 1099 host_impl_->ScrollBegin(gfx::Point(0, 0), InputHandler::Gesture); | 1101 host_impl_->ScrollBegin(gfx::Point(0, 0), InputHandler::Gesture); |
| 1100 host_impl_->PinchGestureBegin(); | 1102 host_impl_->PinchGestureBegin(); |
| 1101 host_impl_->PinchGestureUpdate(2.f, gfx::Point(0, 0)); | 1103 host_impl_->PinchGestureUpdate(2.f, gfx::Point(0, 0)); |
| 1102 host_impl_->PinchGestureUpdate(1.f, gfx::Point(0, 0)); | 1104 host_impl_->PinchGestureUpdate(1.f, gfx::Point(0, 0)); |
| 1103 host_impl_->ScrollBy(gfx::Point(0, 0), gfx::Vector2d(10, 10)); | 1105 host_impl_->ScrollBy(gfx::Point(0, 0), gfx::Vector2d(10, 10)); |
| 1104 host_impl_->PinchGestureUpdate(1.f, gfx::Point(10, 10)); | 1106 host_impl_->PinchGestureUpdate(1.f, gfx::Point(10, 10)); |
| 1105 host_impl_->PinchGestureEnd(); | 1107 host_impl_->PinchGestureEnd(); |
| 1106 host_impl_->ScrollEnd(); | 1108 host_impl_->ScrollEnd(); |
| (...skipping 2627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3734 float min_page_scale_factor, | 3736 float min_page_scale_factor, |
| 3735 float max_page_scale_factor) override { | 3737 float max_page_scale_factor) override { |
| 3736 DCHECK(total_scroll_offset.x() <= max_scroll_offset.x()); | 3738 DCHECK(total_scroll_offset.x() <= max_scroll_offset.x()); |
| 3737 DCHECK(total_scroll_offset.y() <= max_scroll_offset.y()); | 3739 DCHECK(total_scroll_offset.y() <= max_scroll_offset.y()); |
| 3738 last_set_scroll_offset_ = total_scroll_offset; | 3740 last_set_scroll_offset_ = total_scroll_offset; |
| 3739 max_scroll_offset_ = max_scroll_offset; | 3741 max_scroll_offset_ = max_scroll_offset; |
| 3740 scrollable_size_ = scrollable_size; | 3742 scrollable_size_ = scrollable_size; |
| 3741 page_scale_factor_ = page_scale_factor; | 3743 page_scale_factor_ = page_scale_factor; |
| 3742 min_page_scale_factor_ = min_page_scale_factor; | 3744 min_page_scale_factor_ = min_page_scale_factor; |
| 3743 max_page_scale_factor_ = max_page_scale_factor; | 3745 max_page_scale_factor_ = max_page_scale_factor; |
| 3746 |
| 3747 set_getter_return_value(last_set_scroll_offset_); |
| 3744 } | 3748 } |
| 3745 | 3749 |
| 3746 gfx::ScrollOffset last_set_scroll_offset() { | 3750 gfx::ScrollOffset last_set_scroll_offset() { |
| 3747 return last_set_scroll_offset_; | 3751 return last_set_scroll_offset_; |
| 3748 } | 3752 } |
| 3749 | 3753 |
| 3750 void set_getter_return_value(const gfx::ScrollOffset& value) { | 3754 void set_getter_return_value(const gfx::ScrollOffset& value) { |
| 3751 getter_return_value_ = value; | 3755 getter_return_value_ = value; |
| 3752 } | 3756 } |
| 3753 | 3757 |
| (...skipping 4120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7874 | 7878 |
| 7875 EXPECT_VECTOR_EQ(gfx::ScrollOffset(0, 100), | 7879 EXPECT_VECTOR_EQ(gfx::ScrollOffset(0, 100), |
| 7876 scrolling_layer->TotalScrollOffset()); | 7880 scrolling_layer->TotalScrollOffset()); |
| 7877 EXPECT_EQ(NULL, host_impl_->CurrentlyScrollingLayer()); | 7881 EXPECT_EQ(NULL, host_impl_->CurrentlyScrollingLayer()); |
| 7878 } | 7882 } |
| 7879 | 7883 |
| 7880 TEST_F(LayerTreeHostImplTest, GetPictureLayerImplPairs) { | 7884 TEST_F(LayerTreeHostImplTest, GetPictureLayerImplPairs) { |
| 7881 host_impl_->CreatePendingTree(); | 7885 host_impl_->CreatePendingTree(); |
| 7882 | 7886 |
| 7883 scoped_ptr<PictureLayerImpl> layer = | 7887 scoped_ptr<PictureLayerImpl> layer = |
| 7884 PictureLayerImpl::Create(host_impl_->pending_tree(), 10, false); | 7888 FakePictureLayerImpl::Create(host_impl_->pending_tree(), 10); |
| 7885 layer->SetBounds(gfx::Size(10, 10)); | 7889 layer->SetBounds(gfx::Size(10, 10)); |
| 7886 | 7890 |
| 7887 scoped_refptr<RasterSource> pile(FakePicturePileImpl::CreateEmptyPile( | 7891 scoped_refptr<RasterSource> pile(FakePicturePileImpl::CreateEmptyPile( |
| 7888 gfx::Size(10, 10), gfx::Size(10, 10))); | 7892 gfx::Size(10, 10), gfx::Size(10, 10))); |
| 7889 Region empty_invalidation; | 7893 Region empty_invalidation; |
| 7890 const PictureLayerTilingSet* null_tiling_set = nullptr; | 7894 const PictureLayerTilingSet* null_tiling_set = nullptr; |
| 7891 layer->UpdateRasterSource(pile, &empty_invalidation, null_tiling_set); | 7895 layer->UpdateRasterSource(pile, &empty_invalidation, null_tiling_set); |
| 7892 | 7896 |
| 7893 host_impl_->pending_tree()->SetRootLayer(layer.Pass()); | 7897 host_impl_->pending_tree()->SetRootLayer(layer.Pass()); |
| 7894 | 7898 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 7924 layer_pairs.clear(); | 7928 layer_pairs.clear(); |
| 7925 host_impl_->GetPictureLayerImplPairs(&layer_pairs, true); | 7929 host_impl_->GetPictureLayerImplPairs(&layer_pairs, true); |
| 7926 EXPECT_EQ(1u, layer_pairs.size()); | 7930 EXPECT_EQ(1u, layer_pairs.size()); |
| 7927 EXPECT_EQ(active_layer, layer_pairs[0].active); | 7931 EXPECT_EQ(active_layer, layer_pairs[0].active); |
| 7928 EXPECT_EQ(nullptr, layer_pairs[0].pending); | 7932 EXPECT_EQ(nullptr, layer_pairs[0].pending); |
| 7929 | 7933 |
| 7930 // Create another layer in the pending tree that's not in the active tree. We | 7934 // Create another layer in the pending tree that's not in the active tree. We |
| 7931 // should get two pairs. | 7935 // should get two pairs. |
| 7932 host_impl_->CreatePendingTree(); | 7936 host_impl_->CreatePendingTree(); |
| 7933 host_impl_->pending_tree()->root_layer()->AddChild( | 7937 host_impl_->pending_tree()->root_layer()->AddChild( |
| 7934 PictureLayerImpl::Create(host_impl_->pending_tree(), 11, false)); | 7938 FakePictureLayerImpl::Create(host_impl_->pending_tree(), 11)); |
| 7935 | 7939 |
| 7936 LayerImpl* new_pending_layer = pending_tree->root_layer()->children()[0]; | 7940 LayerImpl* new_pending_layer = pending_tree->root_layer()->children()[0]; |
| 7937 | 7941 |
| 7938 layer_pairs.clear(); | 7942 layer_pairs.clear(); |
| 7939 host_impl_->GetPictureLayerImplPairs(&layer_pairs, true); | 7943 host_impl_->GetPictureLayerImplPairs(&layer_pairs, true); |
| 7940 EXPECT_EQ(2u, layer_pairs.size()); | 7944 EXPECT_EQ(2u, layer_pairs.size()); |
| 7941 | 7945 |
| 7942 // The pair ordering is flaky, so make it consistent. | 7946 // The pair ordering is flaky, so make it consistent. |
| 7943 if (layer_pairs[0].active != active_layer) | 7947 if (layer_pairs[0].active != active_layer) |
| 7944 std::swap(layer_pairs[0], layer_pairs[1]); | 7948 std::swap(layer_pairs[0], layer_pairs[1]); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8047 // surface. | 8051 // surface. |
| 8048 EXPECT_EQ(0, num_lost_surfaces_); | 8052 EXPECT_EQ(0, num_lost_surfaces_); |
| 8049 host_impl_->DidLoseOutputSurface(); | 8053 host_impl_->DidLoseOutputSurface(); |
| 8050 EXPECT_EQ(1, num_lost_surfaces_); | 8054 EXPECT_EQ(1, num_lost_surfaces_); |
| 8051 host_impl_->DidLoseOutputSurface(); | 8055 host_impl_->DidLoseOutputSurface(); |
| 8052 EXPECT_LE(1, num_lost_surfaces_); | 8056 EXPECT_LE(1, num_lost_surfaces_); |
| 8053 } | 8057 } |
| 8054 | 8058 |
| 8055 } // namespace | 8059 } // namespace |
| 8056 } // namespace cc | 8060 } // namespace cc |
| OLD | NEW |