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

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

Issue 1306193006: Remove touch scroll chaining from compositor scrolling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@disable_chaining_no_bubbling
Patch Set: Rebase. Created 5 years, 2 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') | no next file » | 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 <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 1048
1049 overflow->set_user_scrollable_horizontal(false); 1049 overflow->set_user_scrollable_horizontal(false);
1050 1050
1051 EXPECT_EQ(InputHandler::SCROLL_STARTED, 1051 EXPECT_EQ(InputHandler::SCROLL_STARTED,
1052 host_impl_->ScrollBegin(scroll_position, InputHandler::WHEEL)); 1052 host_impl_->ScrollBegin(scroll_position, InputHandler::WHEEL));
1053 EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset()); 1053 EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
1054 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset()); 1054 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
1055 1055
1056 host_impl_->ScrollBy(scroll_position, scroll_delta); 1056 host_impl_->ScrollBy(scroll_position, scroll_delta);
1057 host_impl_->ScrollEnd(); 1057 host_impl_->ScrollEnd();
1058 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->CurrentScrollOffset()); 1058 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), scroll_layer->CurrentScrollOffset());
1059 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset()); 1059 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
1060 1060
1061 overflow->set_user_scrollable_vertical(false); 1061 overflow->set_user_scrollable_vertical(false);
1062 1062
1063 EXPECT_EQ(InputHandler::SCROLL_STARTED, 1063 EXPECT_EQ(InputHandler::SCROLL_STARTED,
1064 host_impl_->ScrollBegin(scroll_position, InputHandler::WHEEL)); 1064 host_impl_->ScrollBegin(scroll_position, InputHandler::WHEEL));
1065 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->CurrentScrollOffset()); 1065 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), scroll_layer->CurrentScrollOffset());
1066 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset()); 1066 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
1067 1067
1068 host_impl_->ScrollBy(scroll_position, scroll_delta); 1068 host_impl_->ScrollBy(scroll_position, scroll_delta);
1069 host_impl_->ScrollEnd(); 1069 host_impl_->ScrollEnd();
1070 EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 10), scroll_layer->CurrentScrollOffset()); 1070 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), scroll_layer->CurrentScrollOffset());
1071 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset()); 1071 EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
1072 } 1072 }
1073 1073
1074 TEST_F(LayerTreeHostImplTest, AnimationSchedulingPendingTree) { 1074 TEST_F(LayerTreeHostImplTest, AnimationSchedulingPendingTree) {
1075 host_impl_->SetViewportSize(gfx::Size(50, 50)); 1075 host_impl_->SetViewportSize(gfx::Size(50, 50));
1076 1076
1077 host_impl_->CreatePendingTree(); 1077 host_impl_->CreatePendingTree();
1078 host_impl_->pending_tree()->SetRootLayer( 1078 host_impl_->pending_tree()->SetRootLayer(
1079 LayerImpl::Create(host_impl_->pending_tree(), 1)); 1079 LayerImpl::Create(host_impl_->pending_tree(), 1));
1080 LayerImpl* root = host_impl_->pending_tree()->root_layer(); 1080 LayerImpl* root = host_impl_->pending_tree()->root_layer();
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE)); 1500 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE));
1501 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); 1501 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10));
1502 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(swap_promise.Pass()); 1502 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(swap_promise.Pass());
1503 host_impl_->ScrollEnd(); 1503 host_impl_->ScrollEnd();
1504 1504
1505 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 1505 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
1506 EXPECT_EQ(1u, scroll_info->swap_promises.size()); 1506 EXPECT_EQ(1u, scroll_info->swap_promises.size());
1507 EXPECT_EQ(latency_info.trace_id(), scroll_info->swap_promises[0]->TraceId()); 1507 EXPECT_EQ(latency_info.trace_id(), scroll_info->swap_promises[0]->TraceId());
1508 } 1508 }
1509 1509
1510 // Test that scrolls targeting a layer with a non-null scroll_parent() bubble 1510 // Test that scrolls targeting a layer with a non-null scroll_parent() don't
1511 // up to the scroll_parent, rather than the stacking parent. 1511 // bubble up.
1512 TEST_F(LayerTreeHostImplTest, ScrollBubblesToScrollParent) { 1512 TEST_F(LayerTreeHostImplTest, ScrollDoesntBubble) {
1513 LayerImpl* viewport_scroll = 1513 LayerImpl* viewport_scroll =
1514 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 1514 SetupScrollAndContentsLayers(gfx::Size(100, 100));
1515 host_impl_->SetViewportSize(gfx::Size(50, 50)); 1515 host_impl_->SetViewportSize(gfx::Size(50, 50));
1516 1516
1517 // Set up two scrolling children of the root, one of which is a scroll parent 1517 // Set up two scrolling children of the root, one of which is a scroll parent
1518 // to the other. Scrolls bubbling from the child should bubble to the parent, 1518 // to the other. Scrolls shouldn't bubbling from the child.
1519 // not the viewport.
1520 LayerImpl *parent; 1519 LayerImpl *parent;
1521 LayerImpl *child; 1520 LayerImpl *child;
1522 LayerImpl *child_clip; 1521 LayerImpl *child_clip;
1523 1522
1524 scoped_ptr<LayerImpl> scroll_parent_clip = 1523 scoped_ptr<LayerImpl> scroll_parent_clip =
1525 LayerImpl::Create(host_impl_->active_tree(), 6); 1524 LayerImpl::Create(host_impl_->active_tree(), 6);
1526 scoped_ptr<LayerImpl> scroll_parent = CreateScrollableLayer( 1525 scoped_ptr<LayerImpl> scroll_parent = CreateScrollableLayer(
1527 7, gfx::Size(10, 10), scroll_parent_clip.get()); 1526 7, gfx::Size(10, 10), scroll_parent_clip.get());
1528 parent = scroll_parent.get(); 1527 parent = scroll_parent.get();
1529 scroll_parent_clip->AddChild(scroll_parent.Pass()); 1528 scroll_parent_clip->AddChild(scroll_parent.Pass());
(...skipping 11 matching lines...) Expand all
1541 child_clip = scroll_child_clip.get(); 1540 child_clip = scroll_child_clip.get();
1542 viewport_scroll->AddChild(scroll_child_clip.Pass()); 1541 viewport_scroll->AddChild(scroll_child_clip.Pass());
1543 1542
1544 child_clip->SetScrollParent(parent); 1543 child_clip->SetScrollParent(parent);
1545 1544
1546 DrawFrame(); 1545 DrawFrame();
1547 1546
1548 { 1547 {
1549 host_impl_->ScrollBegin(gfx::Point(21, 21), InputHandler::GESTURE); 1548 host_impl_->ScrollBegin(gfx::Point(21, 21), InputHandler::GESTURE);
1550 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(5, 5)); 1549 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(5, 5));
1551 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(2, 1)); 1550 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(100, 100));
1552 host_impl_->ScrollEnd(); 1551 host_impl_->ScrollEnd();
1553 1552
1554 // The child should be fully scrolled by the first ScrollBy. 1553 // The child should be fully scrolled by the first ScrollBy.
1555 EXPECT_VECTOR_EQ(gfx::Vector2dF(5, 5), child->CurrentScrollOffset()); 1554 EXPECT_VECTOR_EQ(gfx::Vector2dF(5, 5), child->CurrentScrollOffset());
1556 1555
1557 // The scroll_parent should receive the bubbled up second ScrollBy. 1556 // The scroll_parent shouldn't receive the second ScrollBy.
1558 EXPECT_VECTOR_EQ(gfx::Vector2dF(2, 1), parent->CurrentScrollOffset()); 1557 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), parent->CurrentScrollOffset());
1559 1558
1560 // The viewport shouldn't have been scrolled at all. 1559 // The viewport shouldn't have been scrolled at all.
1561 EXPECT_VECTOR_EQ( 1560 EXPECT_VECTOR_EQ(
1562 gfx::Vector2dF(0, 0), 1561 gfx::Vector2dF(0, 0),
1563 host_impl_->InnerViewportScrollLayer()->CurrentScrollOffset()); 1562 host_impl_->InnerViewportScrollLayer()->CurrentScrollOffset());
1564 EXPECT_VECTOR_EQ( 1563 EXPECT_VECTOR_EQ(
1565 gfx::Vector2dF(0, 0), 1564 gfx::Vector2dF(0, 0),
1566 host_impl_->OuterViewportScrollLayer()->CurrentScrollOffset()); 1565 host_impl_->OuterViewportScrollLayer()->CurrentScrollOffset());
1567 } 1566 }
1568 1567
1569 { 1568 {
1570 host_impl_->ScrollBegin(gfx::Point(21, 21), InputHandler::GESTURE); 1569 host_impl_->ScrollBegin(gfx::Point(21, 21), InputHandler::GESTURE);
1571 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(3, 4)); 1570 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(3, 4));
1572 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(2, 1)); 1571 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(2, 1));
1572 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(2, 1));
1573 host_impl_->ScrollBy(gfx::Point(21, 21), gfx::Vector2d(2, 1));
1573 host_impl_->ScrollEnd(); 1574 host_impl_->ScrollEnd();
1574 1575
1575 // The first ScrollBy should scroll the parent to its extent. 1576 // The ScrollBy's should scroll the parent to its extent.
1576 EXPECT_VECTOR_EQ(gfx::Vector2dF(5, 5), parent->CurrentScrollOffset()); 1577 EXPECT_VECTOR_EQ(gfx::Vector2dF(5, 5), parent->CurrentScrollOffset());
1577 1578
1578 // The viewport should now be next in bubbling order. 1579 // The viewport shouldn't receive any scroll delta.
1579 EXPECT_VECTOR_EQ( 1580 EXPECT_VECTOR_EQ(
1580 gfx::Vector2dF(2, 1), 1581 gfx::Vector2dF(0, 0),
1581 host_impl_->InnerViewportScrollLayer()->CurrentScrollOffset()); 1582 host_impl_->InnerViewportScrollLayer()->CurrentScrollOffset());
1582 EXPECT_VECTOR_EQ( 1583 EXPECT_VECTOR_EQ(
1583 gfx::Vector2dF(0, 0), 1584 gfx::Vector2dF(0, 0),
1584 host_impl_->OuterViewportScrollLayer()->CurrentScrollOffset()); 1585 host_impl_->OuterViewportScrollLayer()->CurrentScrollOffset());
1585 } 1586 }
1586 } 1587 }
1587 1588
1588 1589
1589 TEST_F(LayerTreeHostImplTest, PinchGesture) { 1590 TEST_F(LayerTreeHostImplTest, PinchGesture) {
1590 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 1591 SetupScrollAndContentsLayers(gfx::Size(100, 100));
(...skipping 2072 matching lines...) Expand 10 before | Expand all | Expand 10 after
3663 3664
3664 EXPECT_EQ(top_controls_height_, 3665 EXPECT_EQ(top_controls_height_,
3665 host_impl_->top_controls_manager()->ContentTopOffset()); 3666 host_impl_->top_controls_manager()->ContentTopOffset());
3666 3667
3667 // Send a gesture scroll that will scroll the outer viewport, make sure the 3668 // Send a gesture scroll that will scroll the outer viewport, make sure the
3668 // top controls get scrolled. 3669 // top controls get scrolled.
3669 gfx::Vector2dF scroll_delta(0.f, 15.f); 3670 gfx::Vector2dF scroll_delta(0.f, 15.f);
3670 EXPECT_EQ(InputHandler::SCROLL_STARTED, 3671 EXPECT_EQ(InputHandler::SCROLL_STARTED,
3671 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE)); 3672 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE));
3672 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 3673 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
3674
3673 EXPECT_EQ(host_impl_->InnerViewportScrollLayer(), 3675 EXPECT_EQ(host_impl_->InnerViewportScrollLayer(),
3674 host_impl_->CurrentlyScrollingLayer()); 3676 host_impl_->CurrentlyScrollingLayer());
3675 host_impl_->ScrollEnd(); 3677 host_impl_->ScrollEnd();
3676 3678
3677 EXPECT_FLOAT_EQ(scroll_delta.y(), 3679 EXPECT_FLOAT_EQ(scroll_delta.y(),
3678 top_controls_height_ - 3680 top_controls_height_ -
3679 host_impl_->top_controls_manager()->ContentTopOffset()); 3681 host_impl_->top_controls_manager()->ContentTopOffset());
3680 3682
3681 scroll_delta = gfx::Vector2dF(0.f, 50.f); 3683 scroll_delta = gfx::Vector2dF(0.f, 50.f);
3682 EXPECT_EQ(InputHandler::SCROLL_STARTED, 3684 EXPECT_EQ(InputHandler::SCROLL_STARTED,
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
4061 // The scroll range should not have changed. 4063 // The scroll range should not have changed.
4062 EXPECT_EQ(outer_scroll->MaxScrollOffset(), expected_max_scroll); 4064 EXPECT_EQ(outer_scroll->MaxScrollOffset(), expected_max_scroll);
4063 4065
4064 // The page scale delta remains constant because the impl thread did not 4066 // The page scale delta remains constant because the impl thread did not
4065 // scale. 4067 // scale.
4066 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta()); 4068 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta());
4067 } 4069 }
4068 4070
4069 TEST_F(LayerTreeHostImplTest, ScrollChildBeyondLimit) { 4071 TEST_F(LayerTreeHostImplTest, ScrollChildBeyondLimit) {
4070 // Scroll a child layer beyond its maximum scroll range and make sure the 4072 // Scroll a child layer beyond its maximum scroll range and make sure the
4071 // parent layer is scrolled on the axis on which the child was unable to 4073 // parent layer isn't scrolled.
4072 // scroll.
4073 gfx::Size surface_size(10, 10); 4074 gfx::Size surface_size(10, 10);
4074 gfx::Size content_size(20, 20); 4075 gfx::Size content_size(20, 20);
4075 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4076 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1);
4076 root->SetBounds(surface_size); 4077 root->SetBounds(surface_size);
4077 root->SetHasRenderSurface(true); 4078 root->SetHasRenderSurface(true);
4078 scoped_ptr<LayerImpl> grand_child = 4079 scoped_ptr<LayerImpl> grand_child =
4079 CreateScrollableLayer(3, content_size, root.get()); 4080 CreateScrollableLayer(3, content_size, root.get());
4080 4081
4081 scoped_ptr<LayerImpl> child = 4082 scoped_ptr<LayerImpl> child =
4082 CreateScrollableLayer(2, content_size, root.get()); 4083 CreateScrollableLayer(2, content_size, root.get());
(...skipping 18 matching lines...) Expand all
4101 4102
4102 scoped_ptr<ScrollAndScaleSet> scroll_info = 4103 scoped_ptr<ScrollAndScaleSet> scroll_info =
4103 host_impl_->ProcessScrollDeltas(); 4104 host_impl_->ProcessScrollDeltas();
4104 4105
4105 // The grand child should have scrolled up to its limit. 4106 // The grand child should have scrolled up to its limit.
4106 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; 4107 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0];
4107 LayerImpl* grand_child = child->children()[0]; 4108 LayerImpl* grand_child = child->children()[0];
4108 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(), 4109 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(),
4109 gfx::Vector2d(0, -5))); 4110 gfx::Vector2d(0, -5)));
4110 4111
4111 // The child should have only scrolled on the other axis. 4112 // The child should not have scrolled.
4112 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child->id(), 4113 ExpectNone(*scroll_info.get(), child->id());
4113 gfx::Vector2d(-3, 0)));
4114 } 4114 }
4115 } 4115 }
4116 4116
4117 TEST_F(LayerTreeHostImplTest, ScrollWithoutBubbling) { 4117 TEST_F(LayerTreeHostImplTest, ScrollWithoutBubbling) {
4118 // Scroll a child layer beyond its maximum scroll range and make sure the 4118 // Scroll a child layer beyond its maximum scroll range and make sure the
4119 // the scroll doesn't bubble up to the parent layer. 4119 // the scroll doesn't bubble up to the parent layer.
4120 gfx::Size surface_size(20, 20); 4120 gfx::Size surface_size(20, 20);
4121 gfx::Size viewport_size(10, 10); 4121 gfx::Size viewport_size(10, 10);
4122 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4122 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1);
4123 root->SetHasRenderSurface(true); 4123 root->SetHasRenderSurface(true);
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
4402 } 4402 }
4403 { 4403 {
4404 // Now reset and scroll the same amount horizontally. 4404 // Now reset and scroll the same amount horizontally.
4405 child_ptr->SetScrollDelta(gfx::Vector2dF()); 4405 child_ptr->SetScrollDelta(gfx::Vector2dF());
4406 gfx::Vector2d gesture_scroll_delta(10, 0); 4406 gfx::Vector2d gesture_scroll_delta(10, 0);
4407 EXPECT_EQ(InputHandler::SCROLL_STARTED, 4407 EXPECT_EQ(InputHandler::SCROLL_STARTED,
4408 host_impl_->ScrollBegin(gfx::Point(1, 1), InputHandler::GESTURE)); 4408 host_impl_->ScrollBegin(gfx::Point(1, 1), InputHandler::GESTURE));
4409 host_impl_->ScrollBy(gfx::Point(), gesture_scroll_delta); 4409 host_impl_->ScrollBy(gfx::Point(), gesture_scroll_delta);
4410 host_impl_->ScrollEnd(); 4410 host_impl_->ScrollEnd();
4411 4411
4412 // The child layer should have scrolled down in its local coordinates an 4412 // The child layer shouldn't have scrolled.
4413 // amount proportional to the angle between it and the input scroll delta.
4414 gfx::Vector2d expected_scroll_delta( 4413 gfx::Vector2d expected_scroll_delta(
4415 0, -gesture_scroll_delta.x() * 4414 0, -gesture_scroll_delta.x() *
4416 std::sin(MathUtil::Deg2Rad(child_layer_angle))); 4415 std::sin(MathUtil::Deg2Rad(child_layer_angle)));
4417 scoped_ptr<ScrollAndScaleSet> scroll_info = 4416 scoped_ptr<ScrollAndScaleSet> scroll_info =
4418 host_impl_->ProcessScrollDeltas(); 4417 host_impl_->ProcessScrollDeltas();
4419 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id, 4418 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id,
4420 expected_scroll_delta)); 4419 expected_scroll_delta));
4421 4420
4422 // The root scroll layer should have scrolled more, since the input scroll 4421 // The root scroll layer shouldn't have scrolled.
4423 // delta was mostly orthogonal to the child layer's vertical scroll axis. 4422 ExpectNone(*scroll_info.get(), scroll_layer->id());
4424 gfx::Vector2d expected_root_scroll_delta(
4425 gesture_scroll_delta.x() *
4426 std::pow(std::cos(MathUtil::Deg2Rad(child_layer_angle)), 2),
4427 0);
4428 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(),
4429 expected_root_scroll_delta));
4430 } 4423 }
4431 } 4424 }
4432 4425
4433 TEST_F(LayerTreeHostImplTest, ScrollPerspectiveTransformedLayer) { 4426 TEST_F(LayerTreeHostImplTest, ScrollPerspectiveTransformedLayer) {
4434 // When scrolling an element with perspective, the distance scrolled 4427 // When scrolling an element with perspective, the distance scrolled
4435 // depends on the point at which the scroll begins. 4428 // depends on the point at which the scroll begins.
4436 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); 4429 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
4437 int child_clip_layer_id = 6; 4430 int child_clip_layer_id = 6;
4438 int child_layer_id = 7; 4431 int child_layer_id = 7;
4439 4432
(...skipping 2259 matching lines...) Expand 10 before | Expand all | Expand 10 after
6699 6692
6700 scoped_ptr<ScrollAndScaleSet> scroll_info = 6693 scoped_ptr<ScrollAndScaleSet> scroll_info =
6701 host_impl_->ProcessScrollDeltas(); 6694 host_impl_->ProcessScrollDeltas();
6702 6695
6703 // Only the child should have scrolled. 6696 // Only the child should have scrolled.
6704 ASSERT_EQ(1u, scroll_info->scrolls.size()); 6697 ASSERT_EQ(1u, scroll_info->scrolls.size());
6705 ExpectNone(*scroll_info.get(), root_id); 6698 ExpectNone(*scroll_info.get(), root_id);
6706 } 6699 }
6707 } 6700 }
6708 6701
6709 TEST_F(LayerTreeHostImplTest, TouchFlingShouldLockToFirstScrolledLayer) { 6702 TEST_F(LayerTreeHostImplTest, TouchFlingShouldContinueScrollingCurrentLayer) {
6710 // Scroll a child layer beyond its maximum scroll range and make sure the 6703 // Scroll a child layer beyond its maximum scroll range and make sure the
6711 // the scroll doesn't bubble up to the parent layer. 6704 // the scroll doesn't bubble up to the parent layer.
6712 gfx::Size surface_size(10, 10); 6705 gfx::Size surface_size(10, 10);
6713 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 6706 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1);
6714 root->SetHasRenderSurface(true); 6707 root->SetHasRenderSurface(true);
6715 scoped_ptr<LayerImpl> root_scrolling = 6708 scoped_ptr<LayerImpl> root_scrolling =
6716 CreateScrollableLayer(2, surface_size, root.get()); 6709 CreateScrollableLayer(2, surface_size, root.get());
6717 6710
6718 scoped_ptr<LayerImpl> grand_child = 6711 scoped_ptr<LayerImpl> grand_child =
6719 CreateScrollableLayer(4, surface_size, root.get()); 6712 CreateScrollableLayer(4, surface_size, root.get());
(...skipping 21 matching lines...) Expand all
6741 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE)); 6734 host_impl_->ScrollBegin(gfx::Point(), InputHandler::GESTURE));
6742 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); 6735 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
6743 6736
6744 // The grand child should have scrolled up to its limit. 6737 // The grand child should have scrolled up to its limit.
6745 scroll_info = host_impl_->ProcessScrollDeltas(); 6738 scroll_info = host_impl_->ProcessScrollDeltas();
6746 ASSERT_EQ(1u, scroll_info->scrolls.size()); 6739 ASSERT_EQ(1u, scroll_info->scrolls.size());
6747 EXPECT_TRUE( 6740 EXPECT_TRUE(
6748 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta)); 6741 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta));
6749 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child); 6742 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child);
6750 6743
6751 // The child should have received the bubbled delta, but the locked 6744 // The locked scrolling layer should remain set as the grand child.
6752 // scrolling layer should remain set as the grand child. 6745 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
6753 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
6754 scroll_info = host_impl_->ProcessScrollDeltas(); 6746 scroll_info = host_impl_->ProcessScrollDeltas();
6755 ASSERT_EQ(2u, scroll_info->scrolls.size()); 6747 ASSERT_EQ(1u, scroll_info->scrolls.size());
6756 EXPECT_TRUE( 6748 EXPECT_TRUE(
6757 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta)); 6749 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta));
6758 EXPECT_TRUE(ScrollInfoContains(*scroll_info, child->id(), scroll_delta)); 6750 ExpectNone(*scroll_info, child->id());
6759 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child); 6751 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child);
6760 6752
6761 // The first |ScrollBy| after the fling should re-lock the scrolling
6762 // layer to the first layer that scrolled, which is the child.
6763 EXPECT_EQ(InputHandler::SCROLL_STARTED, host_impl_->FlingScrollBegin()); 6753 EXPECT_EQ(InputHandler::SCROLL_STARTED, host_impl_->FlingScrollBegin());
6764 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); 6754 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
6765 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child); 6755 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child);
6766 6756
6767 // The child should have scrolled up to its limit. 6757 // The child should not have scrolled.
6768 scroll_info = host_impl_->ProcessScrollDeltas(); 6758 scroll_info = host_impl_->ProcessScrollDeltas();
6769 ASSERT_EQ(2u, scroll_info->scrolls.size()); 6759 ASSERT_EQ(1u, scroll_info->scrolls.size());
6770 EXPECT_TRUE( 6760 EXPECT_TRUE(
6771 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta)); 6761 ScrollInfoContains(*scroll_info, grand_child->id(), scroll_delta));
6772 EXPECT_TRUE(ScrollInfoContains(*scroll_info, child->id(), 6762 ExpectNone(*scroll_info, child->id());
6773 scroll_delta + scroll_delta));
6774 6763
6775 // As the locked layer is at it's limit, no further scrolling can occur. 6764 // As the locked layer is at it's limit, no further scrolling can occur.
6776 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); 6765 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
6777 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child); 6766 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child);
6778 host_impl_->ScrollEnd(); 6767 host_impl_->ScrollEnd();
6779 } 6768 }
6780 } 6769 }
6781 6770
6782 TEST_F(LayerTreeHostImplTest, WheelFlingShouldBubble) { 6771 TEST_F(LayerTreeHostImplTest, WheelFlingShouldntBubble) {
6783 // When flinging via wheel, the root should eventually scroll (we should 6772 // When flinging via wheel, we shouldn't bubble.
6784 // bubble).
6785 gfx::Size surface_size(10, 10); 6773 gfx::Size surface_size(10, 10);
6786 gfx::Size content_size(20, 20); 6774 gfx::Size content_size(20, 20);
6787 scoped_ptr<LayerImpl> root_clip = 6775 scoped_ptr<LayerImpl> root_clip =
6788 LayerImpl::Create(host_impl_->active_tree(), 3); 6776 LayerImpl::Create(host_impl_->active_tree(), 3);
6789 root_clip->SetHasRenderSurface(true); 6777 root_clip->SetHasRenderSurface(true);
6790 scoped_ptr<LayerImpl> root_scroll = 6778 scoped_ptr<LayerImpl> root_scroll =
6791 CreateScrollableLayer(1, content_size, root_clip.get()); 6779 CreateScrollableLayer(1, content_size, root_clip.get());
6792 int root_scroll_id = root_scroll->id(); 6780 int root_scroll_id = root_scroll->id();
6793 scoped_ptr<LayerImpl> child = 6781 scoped_ptr<LayerImpl> child =
6794 CreateScrollableLayer(2, content_size, root_clip.get()); 6782 CreateScrollableLayer(2, content_size, root_clip.get());
(...skipping 13 matching lines...) Expand all
6808 6796
6809 gfx::Vector2d scroll_delta(0, 100); 6797 gfx::Vector2d scroll_delta(0, 100);
6810 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 6798 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
6811 host_impl_->ScrollBy(gfx::Point(), scroll_delta); 6799 host_impl_->ScrollBy(gfx::Point(), scroll_delta);
6812 6800
6813 host_impl_->ScrollEnd(); 6801 host_impl_->ScrollEnd();
6814 6802
6815 scoped_ptr<ScrollAndScaleSet> scroll_info = 6803 scoped_ptr<ScrollAndScaleSet> scroll_info =
6816 host_impl_->ProcessScrollDeltas(); 6804 host_impl_->ProcessScrollDeltas();
6817 6805
6818 // The root should have scrolled. 6806 // The root shouldn't have scrolled.
6819 ASSERT_EQ(2u, scroll_info->scrolls.size()); 6807 ASSERT_EQ(1u, scroll_info->scrolls.size());
6820 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), root_scroll_id, 6808 ExpectNone(*scroll_info.get(), root_scroll_id);
6821 gfx::Vector2d(0, 10)));
6822 } 6809 }
6823 } 6810 }
6824 6811
6825 TEST_F(LayerTreeHostImplTest, ScrollUnknownNotOnAncestorChain) { 6812 TEST_F(LayerTreeHostImplTest, ScrollUnknownNotOnAncestorChain) {
6826 // If we ray cast a scroller that is not on the first layer's ancestor chain, 6813 // If we ray cast a scroller that is not on the first layer's ancestor chain,
6827 // we should return SCROLL_UNKNOWN. 6814 // we should return SCROLL_UNKNOWN.
6828 gfx::Size content_size(100, 100); 6815 gfx::Size content_size(100, 100);
6829 SetupScrollAndContentsLayers(content_size); 6816 SetupScrollAndContentsLayers(content_size);
6830 6817
6831 int scroll_layer_id = 2; 6818 int scroll_layer_id = 2;
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after
7840 host_impl_->ScrollEnd(); 7827 host_impl_->ScrollEnd();
7841 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt( 7828 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(
7842 gfx::Point(), InputHandler::GESTURE)); 7829 gfx::Point(), InputHandler::GESTURE));
7843 7830
7844 EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset()); 7831 EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
7845 EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset()); 7832 EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
7846 } 7833 }
7847 } 7834 }
7848 7835
7849 TEST_F(LayerTreeHostImplVirtualViewportTest, 7836 TEST_F(LayerTreeHostImplVirtualViewportTest,
7850 TouchFlingCanLockToViewportLayerAfterBubbling) { 7837 TouchFlingDoesntSwitchScrollingLayer) {
7851 gfx::Size content_size = gfx::Size(100, 160); 7838 gfx::Size content_size = gfx::Size(100, 160);
7852 gfx::Size outer_viewport = gfx::Size(50, 80); 7839 gfx::Size outer_viewport = gfx::Size(50, 80);
7853 gfx::Size inner_viewport = gfx::Size(25, 40); 7840 gfx::Size inner_viewport = gfx::Size(25, 40);
7854 7841
7855 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); 7842 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport);
7856 7843
7857 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); 7844 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer();
7858 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); 7845 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer();
7859 7846
7860 scoped_ptr<LayerImpl> child = 7847 scoped_ptr<LayerImpl> child =
(...skipping 12 matching lines...) Expand all
7873 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(), 7860 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(),
7874 InputHandler::GESTURE)); 7861 InputHandler::GESTURE));
7875 7862
7876 // The child should have scrolled up to its limit. 7863 // The child should have scrolled up to its limit.
7877 scroll_info = host_impl_->ProcessScrollDeltas(); 7864 scroll_info = host_impl_->ProcessScrollDeltas();
7878 ASSERT_EQ(1u, scroll_info->scrolls.size()); 7865 ASSERT_EQ(1u, scroll_info->scrolls.size());
7879 EXPECT_TRUE( 7866 EXPECT_TRUE(
7880 ScrollInfoContains(*scroll_info, child_scroll->id(), scroll_delta)); 7867 ScrollInfoContains(*scroll_info, child_scroll->id(), scroll_delta));
7881 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child_scroll); 7868 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child_scroll);
7882 7869
7883 // The first |ScrollBy| after the fling should re-lock the scrolling 7870 // The fling have no effect on the currently scrolling layer.
7884 // layer to the first layer that scrolled, the inner viewport scroll layer.
7885 EXPECT_EQ(InputHandler::SCROLL_STARTED, host_impl_->FlingScrollBegin()); 7871 EXPECT_EQ(InputHandler::SCROLL_STARTED, host_impl_->FlingScrollBegin());
7886 EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); 7872 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
7887 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), inner_scroll); 7873 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child_scroll);
7888 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(), 7874 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(),
7889 InputHandler::GESTURE)); 7875 InputHandler::GESTURE));
7890 7876
7891 // The inner viewport should have scrolled up to its limit. 7877 // The inner viewport shouldn't have scrolled.
7892 scroll_info = host_impl_->ProcessScrollDeltas(); 7878 scroll_info = host_impl_->ProcessScrollDeltas();
7893 ASSERT_EQ(2u, scroll_info->scrolls.size()); 7879 ASSERT_EQ(1u, scroll_info->scrolls.size());
7894 EXPECT_TRUE( 7880 EXPECT_TRUE(
7895 ScrollInfoContains(*scroll_info, child_scroll->id(), scroll_delta)); 7881 ScrollInfoContains(*scroll_info, child_scroll->id(), scroll_delta));
7896 EXPECT_TRUE( 7882 ExpectNone(*scroll_info, inner_scroll->id());
7897 ScrollInfoContains(*scroll_info, inner_scroll->id(), scroll_delta));
7898 7883
7899 // As the locked layer is at its limit, no further scrolling can occur. 7884 // As the locked layer is at its limit, no further scrolling can occur.
7900 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll); 7885 EXPECT_FALSE(host_impl_->ScrollBy(gfx::Point(), scroll_delta).did_scroll);
7901 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), inner_scroll); 7886 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), child_scroll);
7902 host_impl_->ScrollEnd(); 7887 host_impl_->ScrollEnd();
7903 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt( 7888 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(
7904 gfx::Point(), InputHandler::GESTURE)); 7889 gfx::Point(), InputHandler::GESTURE));
7905 } 7890 }
7906 } 7891 }
7907 7892
7908 TEST_F(LayerTreeHostImplVirtualViewportTest, 7893 TEST_F(LayerTreeHostImplVirtualViewportTest,
7909 ScrollBeginEventThatTargetsViewportLayerSkipsHitTest) { 7894 ScrollBeginEventThatTargetsViewportLayerSkipsHitTest) {
7910 gfx::Size content_size = gfx::Size(100, 160); 7895 gfx::Size content_size = gfx::Size(100, 160);
7911 gfx::Size outer_viewport = gfx::Size(50, 80); 7896 gfx::Size outer_viewport = gfx::Size(50, 80);
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
8561 // Hold an unowned pointer to the output surface to use for mock expectations. 8546 // Hold an unowned pointer to the output surface to use for mock expectations.
8562 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get(); 8547 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get();
8563 8548
8564 CreateHostImpl(DefaultSettings(), output_surface.Pass()); 8549 CreateHostImpl(DefaultSettings(), output_surface.Pass());
8565 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1); 8550 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1);
8566 host_impl_->BeginCommit(); 8551 host_impl_->BeginCommit();
8567 } 8552 }
8568 8553
8569 } // namespace 8554 } // namespace
8570 } // namespace cc 8555 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698