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

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

Issue 2251303003: Implement position: sticky updates on compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup and add unit test for impl side sticky position update. Created 4 years, 3 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
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_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 6897 matching lines...) Expand 10 before | Expand all | Expand 10 after
6908 EXPECT_VECTOR2DF_EQ(expected_scroller_screen_space_transform_translation, 6908 EXPECT_VECTOR2DF_EQ(expected_scroller_screen_space_transform_translation,
6909 scroller_impl->ScreenSpaceTransform().To2dTranslation()); 6909 scroller_impl->ScreenSpaceTransform().To2dTranslation());
6910 6910
6911 gfx::Transform expected_scroll_child_screen_space_transform; 6911 gfx::Transform expected_scroll_child_screen_space_transform;
6912 expected_scroll_child_screen_space_transform.Translate(-5.3f, -9.3f); 6912 expected_scroll_child_screen_space_transform.Translate(-5.3f, -9.3f);
6913 expected_scroll_child_screen_space_transform.RotateAboutYAxis(30); 6913 expected_scroll_child_screen_space_transform.RotateAboutYAxis(30);
6914 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_scroll_child_screen_space_transform, 6914 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_scroll_child_screen_space_transform,
6915 scroll_child_impl->ScreenSpaceTransform()); 6915 scroll_child_impl->ScreenSpaceTransform());
6916 } 6916 }
6917 6917
6918 TEST_F(LayerTreeHostCommonTest, StickyPosition) {
6919 scoped_refptr<Layer> root = Layer::Create();
6920 scoped_refptr<Layer> container = Layer::Create();
6921 scoped_refptr<Layer> scroller = Layer::Create();
6922 scoped_refptr<Layer> sticky_pos = Layer::Create();
6923 root->AddChild(container);
6924 container->AddChild(scroller);
6925 scroller->AddChild(sticky_pos);
6926 host()->SetRootLayer(root);
6927 scroller->SetScrollClipLayerId(container->id());
6928
6929 LayerStickyPositionConstraint sticky_position;
6930 sticky_position.is_sticky = true;
6931 sticky_position.is_anchored_top = true;
6932 sticky_position.top_offset = 10.0f;
6933 sticky_position.absolute_sticky_box_rect = gfx::Rect(10, 20, 10, 10);
6934 sticky_position.absolute_containing_block_rect = gfx::Rect(0, 0, 50, 50);
ajuma 2016/09/08 22:08:53 Please also include tests that use the other stick
flackr 2016/09/20 17:08:47 Done.
6935 sticky_pos->SetStickyPositionConstraint(sticky_position);
6936
6937 root->SetBounds(gfx::Size(100, 100));
6938 container->SetBounds(gfx::Size(100, 100));
6939 scroller->SetBounds(gfx::Size(1000, 1000));
6940 sticky_pos->SetBounds(gfx::Size(10, 10));
6941 sticky_pos->SetPosition(gfx::PointF(10, 20));
6942
6943 ExecuteCalculateDrawProperties(root.get());
6944 host()->host_impl()->CreatePendingTree();
6945 host()->CommitAndCreatePendingTree();
6946 host()->host_impl()->ActivateSyncTree();
6947 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree();
6948
6949 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id());
6950 LayerImpl* scroller_impl = layer_tree_impl->LayerById(scroller->id());
6951 LayerImpl* sticky_pos_impl = layer_tree_impl->LayerById(sticky_pos->id());
6952
6953 ExecuteCalculateDrawProperties(root_impl);
6954 EXPECT_VECTOR2DF_EQ(
6955 gfx::Vector2dF(10.f, 20.f),
6956 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation());
6957
6958 // Scroll less than sticking point, sticky element should move with scroll as
6959 // we haven't gotten to the initial sticky item location yet.
6960 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(5.f, 5.f));
6961 ExecuteCalculateDrawProperties(root_impl);
6962 EXPECT_VECTOR2DF_EQ(
6963 gfx::Vector2dF(5.f, 15.f),
6964 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation());
6965
6966 // Scroll past the sticking point, the Y coordinate should now be clamped.
6967 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 15.f));
6968 ExecuteCalculateDrawProperties(root_impl);
6969 EXPECT_VECTOR2DF_EQ(
6970 gfx::Vector2dF(-5.f, 10.f),
6971 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation());
6972 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 25.f));
6973 ExecuteCalculateDrawProperties(root_impl);
6974 EXPECT_VECTOR2DF_EQ(
6975 gfx::Vector2dF(-5.f, 10.f),
6976 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation());
6977
6978 // Scroll past the end of the sticky container (note: this element does not
6979 // have its own layer as it does not need to be composited).
6980 SetScrollOffsetDelta(scroller_impl, gfx::Vector2dF(15.f, 50.f));
6981 ExecuteCalculateDrawProperties(root_impl);
6982 EXPECT_VECTOR2DF_EQ(
6983 gfx::Vector2dF(-5.f, -10.f),
6984 sticky_pos_impl->ScreenSpaceTransform().To2dTranslation());
6985 }
6986
6918 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) { 6987 TEST_F(LayerTreeHostCommonTest, NonFlatContainerForFixedPosLayer) {
6919 scoped_refptr<Layer> root = Layer::Create(); 6988 scoped_refptr<Layer> root = Layer::Create();
6920 scoped_refptr<Layer> container = Layer::Create(); 6989 scoped_refptr<Layer> container = Layer::Create();
6921 scoped_refptr<Layer> scroller = Layer::Create(); 6990 scoped_refptr<Layer> scroller = Layer::Create();
6922 scoped_refptr<Layer> fixed_pos = Layer::Create(); 6991 scoped_refptr<Layer> fixed_pos = Layer::Create();
6923 6992
6924 scroller->SetIsContainerForFixedPositionLayers(true); 6993 scroller->SetIsContainerForFixedPositionLayers(true);
6925 root->AddChild(container); 6994 root->AddChild(container);
6926 container->AddChild(scroller); 6995 container->AddChild(scroller);
6927 scroller->AddChild(fixed_pos); 6996 scroller->AddChild(fixed_pos);
(...skipping 2891 matching lines...) Expand 10 before | Expand all | Expand 10 after
9819 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); 9888 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
9820 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 9889 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
9821 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 9890 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
9822 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 9891 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
9823 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 9892 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
9824 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 9893 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
9825 } 9894 }
9826 9895
9827 } // namespace 9896 } // namespace
9828 } // namespace cc 9897 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698