| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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.h" | 5 #include "cc/trees/layer_tree_host.h" |
| 6 | 6 |
| 7 #include "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
| 8 #include "cc/layers/layer.h" | 8 #include "cc/layers/layer.h" |
| 9 #include "cc/layers/layer_impl.h" | 9 #include "cc/layers/layer_impl.h" |
| 10 #include "cc/layers/picture_layer.h" | 10 #include "cc/layers/picture_layer.h" |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 | 299 |
| 300 if (impl->active_tree()->source_frame_number() == 0 && | 300 if (impl->active_tree()->source_frame_number() == 0 && |
| 301 impl->SourceAnimationFrameNumber() == 1) { | 301 impl->SourceAnimationFrameNumber() == 1) { |
| 302 // First draw | 302 // First draw |
| 303 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); | 303 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); |
| 304 root_scroll_layer->ScrollBy(impl_scroll_); | 304 root_scroll_layer->ScrollBy(impl_scroll_); |
| 305 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_); | 305 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_); |
| 306 EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(), initial_scroll_); | 306 EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(), initial_scroll_); |
| 307 | 307 |
| 308 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); | 308 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); |
| 309 EXPECT_EQ(1.f, impl->active_tree()->total_page_scale_factor()); | 309 EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor()); |
| 310 impl->active_tree()->SetPageScaleDelta(impl_scale_); | 310 impl->SetPageScaleOnActiveTree(impl_scale_); |
| 311 EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta()); | 311 EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta()); |
| 312 EXPECT_EQ(impl_scale_, impl->active_tree()->total_page_scale_factor()); | 312 EXPECT_EQ(impl_scale_, impl->active_tree()->current_page_scale_factor()); |
| 313 | 313 |
| 314 // To simplify the testing flow, don't redraw here, just commit. | 314 // To simplify the testing flow, don't redraw here, just commit. |
| 315 impl->SetNeedsCommit(); | 315 impl->SetNeedsCommit(); |
| 316 } else if (impl->active_tree()->source_frame_number() == 0 && | 316 } else if (impl->active_tree()->source_frame_number() == 0 && |
| 317 impl->SourceAnimationFrameNumber() == 2) { | 317 impl->SourceAnimationFrameNumber() == 2) { |
| 318 // Test a second draw after an aborted commit. | 318 // Test a second draw after an aborted commit. |
| 319 // The scroll/scale values should be baked into the offset/scale factor | 319 // The scroll/scale values should be baked into the offset/scale factor |
| 320 // since the main thread consumed but aborted the begin frame. | 320 // since the main thread consumed but aborted the begin frame. |
| 321 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); | 321 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); |
| 322 root_scroll_layer->ScrollBy(impl_scroll_); | 322 root_scroll_layer->ScrollBy(impl_scroll_); |
| 323 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_); | 323 EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_); |
| 324 EXPECT_VECTOR_EQ( | 324 EXPECT_VECTOR_EQ( |
| 325 root_scroll_layer->scroll_offset(), | 325 root_scroll_layer->scroll_offset(), |
| 326 gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_)); | 326 gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_)); |
| 327 | 327 |
| 328 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); | 328 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); |
| 329 EXPECT_EQ(impl_scale_, impl->active_tree()->total_page_scale_factor()); | 329 EXPECT_EQ(impl_scale_, impl->active_tree()->current_page_scale_factor()); |
| 330 impl->active_tree()->SetPageScaleDelta(impl_scale_); | 330 impl->SetPageScaleOnActiveTree(impl_scale_ * impl_scale_); |
| 331 EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta()); | 331 EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta()); |
| 332 EXPECT_EQ(impl_scale_ * impl_scale_, | 332 EXPECT_EQ(impl_scale_ * impl_scale_, |
| 333 impl->active_tree()->total_page_scale_factor()); | 333 impl->active_tree()->current_page_scale_factor()); |
| 334 | 334 |
| 335 impl->SetNeedsCommit(); | 335 impl->SetNeedsCommit(); |
| 336 } else if (impl->active_tree()->source_frame_number() == 1) { | 336 } else if (impl->active_tree()->source_frame_number() == 1) { |
| 337 // Commit for source frame 1 is aborted. | 337 // Commit for source frame 1 is aborted. |
| 338 NOTREACHED(); | 338 NOTREACHED(); |
| 339 } else if (impl->active_tree()->source_frame_number() == 2 && | 339 } else if (impl->active_tree()->source_frame_number() == 2 && |
| 340 impl->SourceAnimationFrameNumber() == 3) { | 340 impl->SourceAnimationFrameNumber() == 3) { |
| 341 // Third draw after the second full commit. | 341 // Third draw after the second full commit. |
| 342 EXPECT_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); | 342 EXPECT_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d()); |
| 343 root_scroll_layer->ScrollBy(impl_scroll_); | 343 root_scroll_layer->ScrollBy(impl_scroll_); |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestSimple); | 890 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestSimple); |
| 891 | 891 |
| 892 // This test makes sure that layers pick up scrolls that occur between | 892 // This test makes sure that layers pick up scrolls that occur between |
| 893 // beginning a commit and finishing a commit (aka scroll deltas not | 893 // beginning a commit and finishing a commit (aka scroll deltas not |
| 894 // included in sent scroll delta) still apply to layers that don't | 894 // included in sent scroll delta) still apply to layers that don't |
| 895 // push properties. | 895 // push properties. |
| 896 class ImplSidePaintingScrollTestImplOnlyScroll | 896 class ImplSidePaintingScrollTestImplOnlyScroll |
| 897 : public ImplSidePaintingScrollTest { | 897 : public ImplSidePaintingScrollTest { |
| 898 public: | 898 public: |
| 899 ImplSidePaintingScrollTestImplOnlyScroll() | 899 ImplSidePaintingScrollTestImplOnlyScroll() |
| 900 : initial_scroll_(20, 10), impl_thread_scroll_(-2, 3) {} | 900 : initial_scroll_(20, 10), impl_thread_scroll_(-2, 3), impl_scale_(2.f) {} |
| 901 | 901 |
| 902 void SetupTree() override { | 902 void SetupTree() override { |
| 903 LayerTreeHostScrollTest::SetupTree(); | 903 LayerTreeHostScrollTest::SetupTree(); |
| 904 Layer* root_layer = layer_tree_host()->root_layer(); | 904 Layer* root_layer = layer_tree_host()->root_layer(); |
| 905 scoped_refptr<Layer> root_scroll_layer = Layer::Create(); | 905 scoped_refptr<Layer> root_scroll_layer = Layer::Create(); |
| 906 root_scroll_layer->SetScrollClipLayerId(root_layer->id()); | 906 root_scroll_layer->SetScrollClipLayerId(root_layer->id()); |
| 907 root_scroll_layer->SetScrollOffset(initial_scroll_); | 907 root_scroll_layer->SetScrollOffset(initial_scroll_); |
| 908 root_scroll_layer->SetBounds( | 908 root_scroll_layer->SetBounds( |
| 909 gfx::Size(root_layer->bounds().width() + 100, | 909 gfx::Size(root_layer->bounds().width() + 100, |
| 910 root_layer->bounds().height() + 100)); | 910 root_layer->bounds().height() + 100)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 936 } | 936 } |
| 937 | 937 |
| 938 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { | 938 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
| 939 // Scroll after the 2nd commit has started. | 939 // Scroll after the 2nd commit has started. |
| 940 if (impl->active_tree()->source_frame_number() == 0) { | 940 if (impl->active_tree()->source_frame_number() == 0) { |
| 941 LayerImpl* active_root = impl->active_tree()->root_layer(); | 941 LayerImpl* active_root = impl->active_tree()->root_layer(); |
| 942 LayerImpl* active_scroll_layer = active_root->children()[0]; | 942 LayerImpl* active_scroll_layer = active_root->children()[0]; |
| 943 ASSERT_TRUE(active_root); | 943 ASSERT_TRUE(active_root); |
| 944 ASSERT_TRUE(active_scroll_layer); | 944 ASSERT_TRUE(active_scroll_layer); |
| 945 active_scroll_layer->ScrollBy(impl_thread_scroll_); | 945 active_scroll_layer->ScrollBy(impl_thread_scroll_); |
| 946 impl->SetPageScaleOnActiveTree(impl_scale_); |
| 946 } | 947 } |
| 947 } | 948 } |
| 948 | 949 |
| 949 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 950 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
| 950 // We force a second draw here of the first commit before activating | 951 // We force a second draw here of the first commit before activating |
| 951 // the second commit. | 952 // the second commit. |
| 952 LayerImpl* active_root = impl->active_tree()->root_layer(); | 953 LayerImpl* active_root = impl->active_tree()->root_layer(); |
| 953 LayerImpl* active_scroll_layer = | 954 LayerImpl* active_scroll_layer = |
| 954 active_root ? active_root->children()[0] : NULL; | 955 active_root ? active_root->children()[0] : NULL; |
| 955 LayerImpl* pending_root = impl->pending_tree()->root_layer(); | 956 LayerImpl* pending_root = impl->pending_tree()->root_layer(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 983 gfx::Vector2d()); | 984 gfx::Vector2d()); |
| 984 break; | 985 break; |
| 985 case 2: | 986 case 2: |
| 986 // On the next commit, this delta should have been sent and applied. | 987 // On the next commit, this delta should have been sent and applied. |
| 987 EXPECT_VECTOR_EQ(pending_scroll_layer->scroll_offset(), | 988 EXPECT_VECTOR_EQ(pending_scroll_layer->scroll_offset(), |
| 988 gfx::ScrollOffsetWithDelta(initial_scroll_, | 989 gfx::ScrollOffsetWithDelta(initial_scroll_, |
| 989 impl_thread_scroll_)); | 990 impl_thread_scroll_)); |
| 990 EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(), gfx::Vector2d()); | 991 EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(), gfx::Vector2d()); |
| 991 EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(), | 992 EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(), |
| 992 gfx::Vector2d()); | 993 gfx::Vector2d()); |
| 993 EndTest(); | |
| 994 break; | 994 break; |
| 995 } | 995 } |
| 996 } | 996 } |
| 997 | 997 |
| 998 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 998 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
| 999 ImplSidePaintingScrollTest::DrawLayersOnThread(impl); | 999 ImplSidePaintingScrollTest::DrawLayersOnThread(impl); |
| 1000 | 1000 |
| 1001 LayerImpl* root = impl->active_tree()->root_layer(); | 1001 LayerImpl* root = impl->active_tree()->root_layer(); |
| 1002 LayerImpl* scroll_layer = root->children()[0]; | 1002 LayerImpl* scroll_layer = root->children()[0]; |
| 1003 | 1003 |
| 1004 switch (impl->active_tree()->source_frame_number()) { | 1004 switch (impl->active_tree()->source_frame_number()) { |
| 1005 case 0: | 1005 case 0: |
| 1006 EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_); | 1006 EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_); |
| 1007 EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d()); | 1007 EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d()); |
| 1008 EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d()); | 1008 EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d()); |
| 1009 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); |
| 1010 EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor()); |
| 1009 PostSetNeedsCommitToMainThread(); | 1011 PostSetNeedsCommitToMainThread(); |
| 1010 break; | 1012 break; |
| 1011 case 1: | 1013 case 1: |
| 1012 EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_); | 1014 EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_); |
| 1013 EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll_); | 1015 EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll_); |
| 1014 EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d()); | 1016 EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d()); |
| 1017 EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta()); |
| 1018 EXPECT_EQ(impl_scale_, |
| 1019 impl->active_tree()->current_page_scale_factor()); |
| 1015 PostSetNeedsCommitToMainThread(); | 1020 PostSetNeedsCommitToMainThread(); |
| 1016 break; | 1021 break; |
| 1022 case 2: |
| 1023 EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta()); |
| 1024 EXPECT_EQ(impl_scale_, |
| 1025 impl->active_tree()->current_page_scale_factor()); |
| 1026 EndTest(); |
| 1027 break; |
| 1017 } | 1028 } |
| 1018 } | 1029 } |
| 1019 | 1030 |
| 1020 void AfterTest() override {} | 1031 void AfterTest() override {} |
| 1021 | 1032 |
| 1022 private: | 1033 private: |
| 1023 gfx::ScrollOffset initial_scroll_; | 1034 gfx::ScrollOffset initial_scroll_; |
| 1024 gfx::Vector2dF impl_thread_scroll_; | 1035 gfx::Vector2dF impl_thread_scroll_; |
| 1036 float impl_scale_; |
| 1025 }; | 1037 }; |
| 1026 | 1038 |
| 1027 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestImplOnlyScroll); | 1039 MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestImplOnlyScroll); |
| 1028 | 1040 |
| 1029 class LayerTreeHostScrollTestScrollZeroMaxScrollOffset | 1041 class LayerTreeHostScrollTestScrollZeroMaxScrollOffset |
| 1030 : public LayerTreeHostScrollTest { | 1042 : public LayerTreeHostScrollTest { |
| 1031 public: | 1043 public: |
| 1032 LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {} | 1044 LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {} |
| 1033 | 1045 |
| 1034 void SetupTree() override { | 1046 void SetupTree() override { |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1227 RunTest(true, false, true); | 1239 RunTest(true, false, true); |
| 1228 } | 1240 } |
| 1229 | 1241 |
| 1230 TEST_F(LayerTreeHostScrollTestLayerStructureChange, ScrollDestroyWholeTree) { | 1242 TEST_F(LayerTreeHostScrollTestLayerStructureChange, ScrollDestroyWholeTree) { |
| 1231 scroll_destroy_whole_tree_ = true; | 1243 scroll_destroy_whole_tree_ = true; |
| 1232 RunTest(true, false, true); | 1244 RunTest(true, false, true); |
| 1233 } | 1245 } |
| 1234 | 1246 |
| 1235 } // namespace | 1247 } // namespace |
| 1236 } // namespace cc | 1248 } // namespace cc |
| OLD | NEW |