| 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/animation/mutable_properties.h" | 7 #include "cc/animation/mutable_properties.h" |
| 8 #include "cc/layers/painted_scrollbar_layer_impl.h" | 8 #include "cc/layers/painted_scrollbar_layer_impl.h" |
| 9 #include "cc/layers/solid_color_scrollbar_layer_impl.h" | 9 #include "cc/layers/solid_color_scrollbar_layer_impl.h" |
| 10 #include "cc/output/filter_operation.h" | 10 #include "cc/output/filter_operation.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 | 81 |
| 82 #define VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(code_to_test) \ | 82 #define VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(code_to_test) \ |
| 83 root->ResetAllChangeTrackingForSubtree(); \ | 83 root->ResetAllChangeTrackingForSubtree(); \ |
| 84 host_impl.active_tree()->property_trees()->needs_rebuild = true; \ | 84 host_impl.active_tree()->property_trees()->needs_rebuild = true; \ |
| 85 host_impl.active_tree()->BuildPropertyTreesForTesting(); \ | 85 host_impl.active_tree()->BuildPropertyTreesForTesting(); \ |
| 86 host_impl.ForcePrepareToDraw(); \ | 86 host_impl.ForcePrepareToDraw(); \ |
| 87 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); \ | 87 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); \ |
| 88 code_to_test; \ | 88 code_to_test; \ |
| 89 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); | 89 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); |
| 90 | 90 |
| 91 static gfx::Vector2dF ScrollDelta(LayerImpl* layer_impl) { |
| 92 if (layer_impl->IsActive()) |
| 93 return gfx::Vector2dF(layer_impl->synced_scroll_offset()->Delta().x(), |
| 94 layer_impl->synced_scroll_offset()->Delta().y()); |
| 95 else |
| 96 return gfx::Vector2dF( |
| 97 layer_impl->synced_scroll_offset()->PendingDelta().get().x(), |
| 98 layer_impl->synced_scroll_offset()->PendingDelta().get().y()); |
| 99 } |
| 100 |
| 91 TEST(LayerImplTest, VerifyLayerChangesAreTrackedProperly) { | 101 TEST(LayerImplTest, VerifyLayerChangesAreTrackedProperly) { |
| 92 // | 102 // |
| 93 // This test checks that layerPropertyChanged() has the correct behavior. | 103 // This test checks that layerPropertyChanged() has the correct behavior. |
| 94 // | 104 // |
| 95 | 105 |
| 96 // The constructor on this will fake that we are on the correct thread. | 106 // The constructor on this will fake that we are on the correct thread. |
| 97 // Create a simple LayerImpl tree: | 107 // Create a simple LayerImpl tree: |
| 98 FakeImplTaskRunnerProvider task_runner_provider; | 108 FakeImplTaskRunnerProvider task_runner_provider; |
| 99 TestSharedBitmapManager shared_bitmap_manager; | 109 TestSharedBitmapManager shared_bitmap_manager; |
| 100 TestTaskGraphRunner task_graph_runner; | 110 TestTaskGraphRunner task_graph_runner; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 root->SetUpdateRect(arbitrary_rect)); | 172 root->SetUpdateRect(arbitrary_rect)); |
| 163 EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(root->SetBounds(arbitrary_size)); | 173 EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(root->SetBounds(arbitrary_size)); |
| 164 host_impl.active_tree()->property_trees()->needs_rebuild = true; | 174 host_impl.active_tree()->property_trees()->needs_rebuild = true; |
| 165 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 175 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
| 166 | 176 |
| 167 // Changing these properties affects the entire subtree of layers. | 177 // Changing these properties affects the entire subtree of layers. |
| 168 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnFilterAnimated(arbitrary_filters)); | 178 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnFilterAnimated(arbitrary_filters)); |
| 169 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( | 179 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( |
| 170 root->OnFilterAnimated(FilterOperations())); | 180 root->OnFilterAnimated(FilterOperations())); |
| 171 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->ScrollBy(arbitrary_vector2d)); | 181 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->ScrollBy(arbitrary_vector2d)); |
| 172 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetScrollDelta(gfx::Vector2d())); | |
| 173 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->PushScrollOffsetFromMainThread( | |
| 174 gfx::ScrollOffset(arbitrary_vector2d))); | |
| 175 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnOpacityAnimated(arbitrary_number)); | 182 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnOpacityAnimated(arbitrary_number)); |
| 176 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( | 183 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( |
| 177 root->OnTransformAnimated(arbitrary_transform)); | 184 root->OnTransformAnimated(arbitrary_transform)); |
| 178 // SetBoundsDelta changes subtree only when masks_to_bounds is true and it | 185 // SetBoundsDelta changes subtree only when masks_to_bounds is true and it |
| 179 // doesn't set needs_push_properties as it is always called on active tree. | 186 // doesn't set needs_push_properties as it is always called on active tree. |
| 180 root->SetMasksToBounds(true); | 187 root->SetMasksToBounds(true); |
| 181 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetBoundsDelta(arbitrary_vector2d); | 188 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetBoundsDelta(arbitrary_vector2d); |
| 182 root->SetNeedsPushProperties()); | 189 root->SetNeedsPushProperties()); |
| 183 | 190 |
| 184 // Changing these properties only affects the layer itself. | 191 // Changing these properties only affects the layer itself. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetMasksToBounds(true)); | 233 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetMasksToBounds(true)); |
| 227 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 234 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 228 root->SetPosition(arbitrary_point_f)); | 235 root->SetPosition(arbitrary_point_f)); |
| 229 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 236 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 230 root->SetShouldFlattenTransform(false)); | 237 root->SetShouldFlattenTransform(false)); |
| 231 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->Set3dSortingContextId(1)); | 238 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->Set3dSortingContextId(1)); |
| 232 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 239 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 233 root->SetTransform(arbitrary_transform)); | 240 root->SetTransform(arbitrary_transform)); |
| 234 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 241 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 235 root->SetDoubleSided(false)); // constructor initializes it to "true". | 242 root->SetDoubleSided(false)); // constructor initializes it to "true". |
| 236 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | |
| 237 root->SetScrollDelta(gfx::Vector2d())); | |
| 238 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | |
| 239 root->PushScrollOffsetFromMainThread( | |
| 240 gfx::ScrollOffset(arbitrary_vector2d))); | |
| 241 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetContentsOpaque(true)); | 243 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetContentsOpaque(true)); |
| 242 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetOpacity(arbitrary_number)); | 244 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetOpacity(arbitrary_number)); |
| 243 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 245 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 244 root->SetBlendMode(arbitrary_blend_mode)); | 246 root->SetBlendMode(arbitrary_blend_mode)); |
| 245 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 247 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 246 root->SetIsRootForIsolatedGroup(true)); | 248 root->SetIsRootForIsolatedGroup(true)); |
| 247 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetDrawsContent(true)); | 249 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetDrawsContent(true)); |
| 248 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetBounds(bounds_size)); | 250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetBounds(bounds_size)); |
| 249 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 251 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 250 root->SetScrollParent(scroll_parent.get())); | 252 root->SetScrollParent(scroll_parent.get())); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 324 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 323 root->OnFilterAnimated(FilterOperations())); | 325 root->OnFilterAnimated(FilterOperations())); |
| 324 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 326 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 325 root->OnFilterAnimated(arbitrary_filters)); | 327 root->OnFilterAnimated(arbitrary_filters)); |
| 326 | 328 |
| 327 // Related scrolling functions. | 329 // Related scrolling functions. |
| 328 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); | 330 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); |
| 329 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); | 331 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); |
| 330 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); | 332 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); |
| 331 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); | 333 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); |
| 332 layer->SetScrollDelta(gfx::Vector2d(0, 0)); | |
| 333 host_impl.ForcePrepareToDraw(); | |
| 334 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | |
| 335 layer->SetScrollDelta(arbitrary_vector2d)); | |
| 336 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | |
| 337 layer->SetScrollDelta(arbitrary_vector2d)); | |
| 338 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->PushScrollOffsetFromMainThread( | |
| 339 gfx::ScrollOffset(arbitrary_vector2d))); | |
| 340 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->DidUpdateScrollOffset()); | 334 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->DidUpdateScrollOffset()); |
| 335 layer->SetCurrentScrollOffset(layer->synced_scroll_offset()->ActiveBase() + |
| 336 gfx::ScrollOffset()); |
| 337 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetCurrentScrollOffset( |
| 338 gfx::ScrollOffset(arbitrary_vector2d.x(), arbitrary_vector2d.y()))); |
| 339 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetCurrentScrollOffset( |
| 340 gfx::ScrollOffset(arbitrary_vector2d.x(), arbitrary_vector2d.y()))); |
| 341 | 341 |
| 342 // Unrelated functions, always set to new values, always set needs update. | 342 // Unrelated functions, always set to new values, always set needs update. |
| 343 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 343 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 344 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4)); | 344 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4)); |
| 345 layer->NoteLayerPropertyChanged()); | 345 layer->NoteLayerPropertyChanged()); |
| 346 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 346 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
| 347 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true); | 347 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true); |
| 348 layer->NoteLayerPropertyChanged()); | 348 layer->NoteLayerPropertyChanged()); |
| 349 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true); | 349 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true); |
| 350 layer->NoteLayerPropertyChanged()); | 350 layer->NoteLayerPropertyChanged()); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 host_impl_.active_tree()->root_layer()->SetBounds(gfx::Size(1, 1)); | 492 host_impl_.active_tree()->root_layer()->SetBounds(gfx::Size(1, 1)); |
| 493 gfx::Vector2d max_scroll_offset(51, 81); | 493 gfx::Vector2d max_scroll_offset(51, 81); |
| 494 layer()->SetBounds(gfx::Size(max_scroll_offset.x(), max_scroll_offset.y())); | 494 layer()->SetBounds(gfx::Size(max_scroll_offset.x(), max_scroll_offset.y())); |
| 495 host_impl_.active_tree()->BuildPropertyTreesForTesting(); | 495 host_impl_.active_tree()->BuildPropertyTreesForTesting(); |
| 496 } | 496 } |
| 497 | 497 |
| 498 LayerImpl* layer() { | 498 LayerImpl* layer() { |
| 499 return host_impl_.active_tree()->root_layer()->children()[0].get(); | 499 return host_impl_.active_tree()->root_layer()->children()[0].get(); |
| 500 } | 500 } |
| 501 | 501 |
| 502 ScrollTree* scroll_tree(LayerImpl* layer_impl) { |
| 503 return &layer_impl->layer_tree_impl()->property_trees()->scroll_tree; |
| 504 } |
| 505 |
| 502 LayerTreeHostImpl& host_impl() { return host_impl_; } | 506 LayerTreeHostImpl& host_impl() { return host_impl_; } |
| 503 | 507 |
| 504 LayerTreeImpl* tree() { return host_impl_.active_tree(); } | 508 LayerTreeImpl* tree() { return host_impl_.active_tree(); } |
| 505 | 509 |
| 506 LayerTreeSettings settings() { | 510 LayerTreeSettings settings() { |
| 507 LayerTreeSettings settings; | 511 LayerTreeSettings settings; |
| 508 return settings; | 512 return settings; |
| 509 } | 513 } |
| 510 | 514 |
| 511 private: | 515 private: |
| 512 FakeImplTaskRunnerProvider task_runner_provider_; | 516 FakeImplTaskRunnerProvider task_runner_provider_; |
| 513 TestSharedBitmapManager shared_bitmap_manager_; | 517 TestSharedBitmapManager shared_bitmap_manager_; |
| 514 TestTaskGraphRunner task_graph_runner_; | 518 TestTaskGraphRunner task_graph_runner_; |
| 515 FakeLayerTreeHostImpl host_impl_; | 519 FakeLayerTreeHostImpl host_impl_; |
| 516 int root_id_; | 520 int root_id_; |
| 517 }; | 521 }; |
| 518 | 522 |
| 519 TEST_F(LayerImplScrollTest, ScrollByWithZeroOffset) { | 523 TEST_F(LayerImplScrollTest, ScrollByWithZeroOffset) { |
| 520 // Test that LayerImpl::ScrollBy only affects ScrollDelta and total scroll | 524 // Test that LayerImpl::ScrollBy only affects ScrollDelta and total scroll |
| 521 // offset is bounded by the range [0, max scroll offset]. | 525 // offset is bounded by the range [0, max scroll offset]. |
| 522 | 526 |
| 523 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->CurrentScrollOffset()); | 527 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->CurrentScrollOffset()); |
| 524 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 528 EXPECT_VECTOR_EQ( |
| 525 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | 529 gfx::Vector2dF(), |
| 530 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 531 EXPECT_VECTOR_EQ(gfx::Vector2dF(), ScrollDelta(layer())); |
| 526 | 532 |
| 527 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | 533 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); |
| 528 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | 534 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); |
| 529 | 535 |
| 530 EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset()); | 536 EXPECT_VECTOR_EQ(ScrollDelta(layer()), layer()->CurrentScrollOffset()); |
| 531 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 537 EXPECT_VECTOR_EQ( |
| 538 gfx::Vector2dF(), |
| 539 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 532 | 540 |
| 533 layer()->ScrollBy(gfx::Vector2dF(100, -100)); | 541 layer()->ScrollBy(gfx::Vector2dF(100, -100)); |
| 534 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); | 542 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); |
| 535 | 543 |
| 536 EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset()); | 544 EXPECT_VECTOR_EQ(ScrollDelta(layer()), layer()->CurrentScrollOffset()); |
| 537 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 545 EXPECT_VECTOR_EQ( |
| 546 gfx::Vector2dF(), |
| 547 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 538 } | 548 } |
| 539 | 549 |
| 540 TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) { | 550 TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) { |
| 541 gfx::ScrollOffset scroll_offset(10, 5); | 551 gfx::ScrollOffset scroll_offset(10, 5); |
| 542 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 552 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 553 scroll_offset); |
| 543 | 554 |
| 544 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); | 555 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); |
| 545 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 556 EXPECT_VECTOR_EQ( |
| 546 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | 557 scroll_offset, |
| 558 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 559 EXPECT_VECTOR_EQ(gfx::Vector2dF(), ScrollDelta(layer())); |
| 547 | 560 |
| 548 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | 561 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); |
| 549 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | 562 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); |
| 550 | 563 |
| 551 EXPECT_VECTOR_EQ( | 564 EXPECT_VECTOR_EQ( |
| 552 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), | 565 gfx::ScrollOffsetWithDelta(scroll_offset, ScrollDelta(layer())), |
| 553 layer()->CurrentScrollOffset()); | 566 layer()->CurrentScrollOffset()); |
| 554 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 567 EXPECT_VECTOR_EQ( |
| 568 scroll_offset, |
| 569 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 555 | 570 |
| 556 layer()->ScrollBy(gfx::Vector2dF(100, -100)); | 571 layer()->ScrollBy(gfx::Vector2dF(100, -100)); |
| 557 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); | 572 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); |
| 558 | 573 |
| 559 EXPECT_VECTOR_EQ( | 574 EXPECT_VECTOR_EQ( |
| 560 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), | 575 gfx::ScrollOffsetWithDelta(scroll_offset, ScrollDelta(layer())), |
| 561 layer()->CurrentScrollOffset()); | 576 layer()->CurrentScrollOffset()); |
| 562 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 577 EXPECT_VECTOR_EQ( |
| 578 scroll_offset, |
| 579 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 563 } | 580 } |
| 564 | 581 |
| 565 TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { | 582 TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { |
| 566 gfx::ScrollOffset scroll_offset(10, 5); | 583 gfx::ScrollOffset scroll_offset(10, 5); |
| 567 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 584 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
| 568 gfx::Vector2d sent_scroll_delta(12, -3); | 585 gfx::Vector2d sent_scroll_delta(12, -3); |
| 569 | 586 |
| 570 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 587 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 588 scroll_offset); |
| 571 layer()->ScrollBy(sent_scroll_delta); | 589 layer()->ScrollBy(sent_scroll_delta); |
| 572 layer()->synced_scroll_offset()->PullDeltaForMainThread(); | 590 layer()->synced_scroll_offset()->PullDeltaForMainThread(); |
| 573 layer()->SetCurrentScrollOffset(scroll_offset + | 591 layer()->SetCurrentScrollOffset(scroll_offset + |
| 574 gfx::ScrollOffset(scroll_delta)); | 592 gfx::ScrollOffset(scroll_delta)); |
| 575 | 593 |
| 576 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 594 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
| 577 layer()->CurrentScrollOffset()); | 595 layer()->CurrentScrollOffset()); |
| 578 EXPECT_VECTOR_EQ(scroll_delta, layer()->ScrollDelta()); | 596 EXPECT_VECTOR_EQ(scroll_delta, ScrollDelta(layer())); |
| 579 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 597 EXPECT_VECTOR_EQ( |
| 598 scroll_offset, |
| 599 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 580 | 600 |
| 581 layer()->synced_scroll_offset()->AbortCommit(); | 601 layer()->synced_scroll_offset()->AbortCommit(); |
| 582 | 602 |
| 583 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 603 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
| 584 layer()->CurrentScrollOffset()); | 604 layer()->CurrentScrollOffset()); |
| 585 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, layer()->ScrollDelta()); | 605 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, ScrollDelta(layer())); |
| 586 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), | 606 EXPECT_VECTOR_EQ( |
| 587 layer()->BaseScrollOffset()); | 607 gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), |
| 608 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 588 } | 609 } |
| 589 | 610 |
| 590 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { | 611 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { |
| 591 gfx::ScrollOffset scroll_offset(10, 5); | 612 gfx::ScrollOffset scroll_offset(10, 5); |
| 592 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 613 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
| 593 | 614 |
| 594 layer()->set_user_scrollable_vertical(false); | 615 layer()->set_user_scrollable_vertical(false); |
| 595 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 616 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 617 scroll_offset); |
| 596 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 618 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
| 597 | 619 |
| 598 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); | 620 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); |
| 599 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); | 621 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); |
| 600 } | 622 } |
| 601 | 623 |
| 602 TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsCurrentScrollOffset) { | 624 TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsCurrentScrollOffset) { |
| 603 gfx::ScrollOffset scroll_offset(10, 5); | 625 gfx::ScrollOffset scroll_offset(10, 5); |
| 604 gfx::Vector2dF scroll_delta(12, 18); | 626 gfx::Vector2dF scroll_delta(12, 18); |
| 605 | 627 |
| 606 host_impl().CreatePendingTree(); | 628 host_impl().CreatePendingTree(); |
| 607 | 629 |
| 608 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 630 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 631 scroll_offset); |
| 609 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 632 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
| 610 | 633 |
| 611 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), unscrolled); | 634 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), unscrolled); |
| 612 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); | 635 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); |
| 613 | 636 |
| 614 layer()->synced_scroll_offset()->PullDeltaForMainThread(); | 637 layer()->synced_scroll_offset()->PullDeltaForMainThread(); |
| 615 | 638 |
| 616 scoped_ptr<LayerImpl> pending_layer = | 639 scoped_ptr<LayerImpl> pending_layer = |
| 617 LayerImpl::Create(host_impl().sync_tree(), layer()->id()); | 640 LayerImpl::Create(host_impl().sync_tree(), layer()->id()); |
| 618 pending_layer->PushScrollOffsetFromMainThread(layer()->CurrentScrollOffset()); | 641 scroll_tree(pending_layer.get()) |
| 642 ->UpdateScrollOffsetBaseForTesting(pending_layer->id(), |
| 643 layer()->CurrentScrollOffset()); |
| 619 | 644 |
| 620 pending_layer->PushPropertiesTo(layer()); | 645 pending_layer->PushPropertiesTo(layer()); |
| 621 | 646 |
| 622 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); | 647 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); |
| 623 EXPECT_VECTOR_EQ(layer()->CurrentScrollOffset(), | 648 EXPECT_VECTOR_EQ(layer()->CurrentScrollOffset(), |
| 624 pending_layer->CurrentScrollOffset()); | 649 pending_layer->CurrentScrollOffset()); |
| 625 } | 650 } |
| 626 | 651 |
| 627 } // namespace | 652 } // namespace |
| 628 } // namespace cc | 653 } // namespace cc |
| OLD | NEW |