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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 | 93 |
94 #define VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(code_to_test) \ | 94 #define VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(code_to_test) \ |
95 root->ResetAllChangeTrackingForSubtree(); \ | 95 root->ResetAllChangeTrackingForSubtree(); \ |
96 host_impl.active_tree()->property_trees()->needs_rebuild = true; \ | 96 host_impl.active_tree()->property_trees()->needs_rebuild = true; \ |
97 host_impl.active_tree()->BuildPropertyTreesForTesting(); \ | 97 host_impl.active_tree()->BuildPropertyTreesForTesting(); \ |
98 host_impl.ForcePrepareToDraw(); \ | 98 host_impl.ForcePrepareToDraw(); \ |
99 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); \ | 99 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); \ |
100 code_to_test; \ | 100 code_to_test; \ |
101 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); | 101 EXPECT_FALSE(host_impl.active_tree()->needs_update_draw_properties()); |
102 | 102 |
| 103 static gfx::Vector2dF ScrollDelta(LayerImpl* layer_impl) { |
| 104 if (layer_impl->IsActive()) |
| 105 return gfx::Vector2dF(layer_impl->synced_scroll_offset()->Delta().x(), |
| 106 layer_impl->synced_scroll_offset()->Delta().y()); |
| 107 else |
| 108 return gfx::Vector2dF( |
| 109 layer_impl->synced_scroll_offset()->PendingDelta().get().x(), |
| 110 layer_impl->synced_scroll_offset()->PendingDelta().get().y()); |
| 111 } |
| 112 |
103 TEST(LayerImplTest, VerifyLayerChangesAreTrackedProperly) { | 113 TEST(LayerImplTest, VerifyLayerChangesAreTrackedProperly) { |
104 // | 114 // |
105 // This test checks that layerPropertyChanged() has the correct behavior. | 115 // This test checks that layerPropertyChanged() has the correct behavior. |
106 // | 116 // |
107 | 117 |
108 // The constructor on this will fake that we are on the correct thread. | 118 // The constructor on this will fake that we are on the correct thread. |
109 // Create a simple LayerImpl tree: | 119 // Create a simple LayerImpl tree: |
110 FakeImplTaskRunnerProvider task_runner_provider; | 120 FakeImplTaskRunnerProvider task_runner_provider; |
111 TestSharedBitmapManager shared_bitmap_manager; | 121 TestSharedBitmapManager shared_bitmap_manager; |
112 TestTaskGraphRunner task_graph_runner; | 122 TestTaskGraphRunner task_graph_runner; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 root->SetUpdateRect(arbitrary_rect)); | 184 root->SetUpdateRect(arbitrary_rect)); |
175 EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(root->SetBounds(arbitrary_size)); | 185 EXECUTE_AND_VERIFY_ONLY_LAYER_CHANGED(root->SetBounds(arbitrary_size)); |
176 host_impl.active_tree()->property_trees()->needs_rebuild = true; | 186 host_impl.active_tree()->property_trees()->needs_rebuild = true; |
177 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 187 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
178 | 188 |
179 // Changing these properties affects the entire subtree of layers. | 189 // Changing these properties affects the entire subtree of layers. |
180 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnFilterAnimated(arbitrary_filters)); | 190 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnFilterAnimated(arbitrary_filters)); |
181 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( | 191 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( |
182 root->OnFilterAnimated(FilterOperations())); | 192 root->OnFilterAnimated(FilterOperations())); |
183 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->ScrollBy(arbitrary_vector2d)); | 193 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->ScrollBy(arbitrary_vector2d)); |
184 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetScrollDelta(gfx::Vector2d())); | |
185 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->PushScrollOffsetFromMainThread( | |
186 gfx::ScrollOffset(arbitrary_vector2d))); | |
187 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnOpacityAnimated(arbitrary_number)); | 194 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->OnOpacityAnimated(arbitrary_number)); |
188 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( | 195 EXECUTE_AND_VERIFY_SUBTREE_CHANGED( |
189 root->OnTransformAnimated(arbitrary_transform)); | 196 root->OnTransformAnimated(arbitrary_transform)); |
190 // SetBoundsDelta changes subtree only when masks_to_bounds is true and it | 197 // SetBoundsDelta changes subtree only when masks_to_bounds is true and it |
191 // doesn't set needs_push_properties as it is always called on active tree. | 198 // doesn't set needs_push_properties as it is always called on active tree. |
192 root->SetMasksToBounds(true); | 199 root->SetMasksToBounds(true); |
193 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetBoundsDelta(arbitrary_vector2d); | 200 EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetBoundsDelta(arbitrary_vector2d); |
194 root->SetNeedsPushProperties()); | 201 root->SetNeedsPushProperties()); |
195 | 202 |
196 // Changing these properties only affects the layer itself. | 203 // Changing these properties only affects the layer itself. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetMasksToBounds(true)); | 245 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetMasksToBounds(true)); |
239 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 246 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
240 root->SetPosition(arbitrary_point_f)); | 247 root->SetPosition(arbitrary_point_f)); |
241 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 248 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
242 root->SetShouldFlattenTransform(false)); | 249 root->SetShouldFlattenTransform(false)); |
243 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->Set3dSortingContextId(1)); | 250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->Set3dSortingContextId(1)); |
244 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 251 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
245 root->SetTransform(arbitrary_transform)); | 252 root->SetTransform(arbitrary_transform)); |
246 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 253 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
247 root->SetDoubleSided(false)); // constructor initializes it to "true". | 254 root->SetDoubleSided(false)); // constructor initializes it to "true". |
248 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | |
249 root->SetScrollDelta(gfx::Vector2d())); | |
250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | |
251 root->PushScrollOffsetFromMainThread( | |
252 gfx::ScrollOffset(arbitrary_vector2d))); | |
253 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetContentsOpaque(true)); | 255 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetContentsOpaque(true)); |
254 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetOpacity(arbitrary_number)); | 256 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetOpacity(arbitrary_number)); |
255 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 257 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
256 root->SetBlendMode(arbitrary_blend_mode)); | 258 root->SetBlendMode(arbitrary_blend_mode)); |
257 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 259 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
258 root->SetIsRootForIsolatedGroup(true)); | 260 root->SetIsRootForIsolatedGroup(true)); |
259 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetDrawsContent(true)); | 261 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetDrawsContent(true)); |
260 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetBounds(bounds_size)); | 262 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(root->SetBounds(bounds_size)); |
261 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 263 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
262 root->SetScrollParent(scroll_parent.get())); | 264 root->SetScrollParent(scroll_parent.get())); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 336 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
335 root->OnFilterAnimated(FilterOperations())); | 337 root->OnFilterAnimated(FilterOperations())); |
336 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 338 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
337 root->OnFilterAnimated(arbitrary_filters)); | 339 root->OnFilterAnimated(arbitrary_filters)); |
338 | 340 |
339 // Related scrolling functions. | 341 // Related scrolling functions. |
340 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); | 342 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); |
341 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); | 343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(large_size)); |
342 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); | 344 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); |
343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); | 345 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); |
344 layer->SetScrollDelta(gfx::Vector2d(0, 0)); | |
345 host_impl.ForcePrepareToDraw(); | |
346 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | |
347 layer->SetScrollDelta(arbitrary_vector2d)); | |
348 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | |
349 layer->SetScrollDelta(arbitrary_vector2d)); | |
350 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->PushScrollOffsetFromMainThread( | |
351 gfx::ScrollOffset(arbitrary_vector2d))); | |
352 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->DidUpdateScrollOffset()); | 346 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->DidUpdateScrollOffset()); |
| 347 layer->SetCurrentScrollOffset(layer->synced_scroll_offset()->ActiveBase() + |
| 348 gfx::ScrollOffset()); |
| 349 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetCurrentScrollOffset( |
| 350 gfx::ScrollOffset(arbitrary_vector2d.x(), arbitrary_vector2d.y()))); |
| 351 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetCurrentScrollOffset( |
| 352 gfx::ScrollOffset(arbitrary_vector2d.x(), arbitrary_vector2d.y()))); |
353 | 353 |
354 // Unrelated functions, always set to new values, always set needs update. | 354 // Unrelated functions, always set to new values, always set needs update. |
355 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 355 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
356 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4)); | 356 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4)); |
357 layer->NoteLayerPropertyChanged()); | 357 layer->NoteLayerPropertyChanged()); |
358 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 358 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
359 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true); | 359 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true); |
360 layer->NoteLayerPropertyChanged()); | 360 layer->NoteLayerPropertyChanged()); |
361 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true); | 361 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true); |
362 layer->NoteLayerPropertyChanged()); | 362 layer->NoteLayerPropertyChanged()); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 host_impl_.active_tree()->root_layer()->SetBounds(gfx::Size(1, 1)); | 504 host_impl_.active_tree()->root_layer()->SetBounds(gfx::Size(1, 1)); |
505 gfx::Vector2d max_scroll_offset(51, 81); | 505 gfx::Vector2d max_scroll_offset(51, 81); |
506 layer()->SetBounds(gfx::Size(max_scroll_offset.x(), max_scroll_offset.y())); | 506 layer()->SetBounds(gfx::Size(max_scroll_offset.x(), max_scroll_offset.y())); |
507 host_impl_.active_tree()->BuildPropertyTreesForTesting(); | 507 host_impl_.active_tree()->BuildPropertyTreesForTesting(); |
508 } | 508 } |
509 | 509 |
510 LayerImpl* layer() { | 510 LayerImpl* layer() { |
511 return host_impl_.active_tree()->root_layer()->children()[0].get(); | 511 return host_impl_.active_tree()->root_layer()->children()[0].get(); |
512 } | 512 } |
513 | 513 |
| 514 ScrollTree* scroll_tree(LayerImpl* layer_impl) { |
| 515 return &layer_impl->layer_tree_impl()->property_trees()->scroll_tree; |
| 516 } |
| 517 |
514 LayerTreeHostImpl& host_impl() { return host_impl_; } | 518 LayerTreeHostImpl& host_impl() { return host_impl_; } |
515 | 519 |
516 LayerTreeImpl* tree() { return host_impl_.active_tree(); } | 520 LayerTreeImpl* tree() { return host_impl_.active_tree(); } |
517 | 521 |
518 LayerTreeSettings settings() { | 522 LayerTreeSettings settings() { |
519 LayerTreeSettings settings; | 523 LayerTreeSettings settings; |
520 return settings; | 524 return settings; |
521 } | 525 } |
522 | 526 |
523 private: | 527 private: |
524 FakeImplTaskRunnerProvider task_runner_provider_; | 528 FakeImplTaskRunnerProvider task_runner_provider_; |
525 TestSharedBitmapManager shared_bitmap_manager_; | 529 TestSharedBitmapManager shared_bitmap_manager_; |
526 TestTaskGraphRunner task_graph_runner_; | 530 TestTaskGraphRunner task_graph_runner_; |
527 FakeLayerTreeHostImpl host_impl_; | 531 FakeLayerTreeHostImpl host_impl_; |
528 int root_id_; | 532 int root_id_; |
529 }; | 533 }; |
530 | 534 |
531 TEST_F(LayerImplScrollTest, ScrollByWithZeroOffset) { | 535 TEST_F(LayerImplScrollTest, ScrollByWithZeroOffset) { |
532 // Test that LayerImpl::ScrollBy only affects ScrollDelta and total scroll | 536 // Test that LayerImpl::ScrollBy only affects ScrollDelta and total scroll |
533 // offset is bounded by the range [0, max scroll offset]. | 537 // offset is bounded by the range [0, max scroll offset]. |
534 | 538 |
535 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->CurrentScrollOffset()); | 539 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->CurrentScrollOffset()); |
536 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 540 EXPECT_VECTOR_EQ( |
537 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | 541 gfx::Vector2dF(), |
| 542 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 543 EXPECT_VECTOR_EQ(gfx::Vector2dF(), ScrollDelta(layer())); |
538 | 544 |
539 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | 545 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); |
540 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | 546 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); |
541 | 547 |
542 EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset()); | 548 EXPECT_VECTOR_EQ(ScrollDelta(layer()), layer()->CurrentScrollOffset()); |
543 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 549 EXPECT_VECTOR_EQ( |
| 550 gfx::Vector2dF(), |
| 551 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
544 | 552 |
545 layer()->ScrollBy(gfx::Vector2dF(100, -100)); | 553 layer()->ScrollBy(gfx::Vector2dF(100, -100)); |
546 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); | 554 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); |
547 | 555 |
548 EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset()); | 556 EXPECT_VECTOR_EQ(ScrollDelta(layer()), layer()->CurrentScrollOffset()); |
549 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset()); | 557 EXPECT_VECTOR_EQ( |
| 558 gfx::Vector2dF(), |
| 559 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
550 } | 560 } |
551 | 561 |
552 TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) { | 562 TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) { |
553 gfx::ScrollOffset scroll_offset(10, 5); | 563 gfx::ScrollOffset scroll_offset(10, 5); |
554 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 564 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 565 scroll_offset); |
555 | 566 |
556 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); | 567 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); |
557 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 568 EXPECT_VECTOR_EQ( |
558 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | 569 scroll_offset, |
| 570 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
| 571 EXPECT_VECTOR_EQ(gfx::Vector2dF(), ScrollDelta(layer())); |
559 | 572 |
560 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | 573 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); |
561 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | 574 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); |
562 | 575 |
563 EXPECT_VECTOR_EQ( | 576 EXPECT_VECTOR_EQ( |
564 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), | 577 gfx::ScrollOffsetWithDelta(scroll_offset, ScrollDelta(layer())), |
565 layer()->CurrentScrollOffset()); | 578 layer()->CurrentScrollOffset()); |
566 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 579 EXPECT_VECTOR_EQ( |
| 580 scroll_offset, |
| 581 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
567 | 582 |
568 layer()->ScrollBy(gfx::Vector2dF(100, -100)); | 583 layer()->ScrollBy(gfx::Vector2dF(100, -100)); |
569 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); | 584 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); |
570 | 585 |
571 EXPECT_VECTOR_EQ( | 586 EXPECT_VECTOR_EQ( |
572 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), | 587 gfx::ScrollOffsetWithDelta(scroll_offset, ScrollDelta(layer())), |
573 layer()->CurrentScrollOffset()); | 588 layer()->CurrentScrollOffset()); |
574 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 589 EXPECT_VECTOR_EQ( |
| 590 scroll_offset, |
| 591 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
575 } | 592 } |
576 | 593 |
577 TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { | 594 TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { |
578 gfx::ScrollOffset scroll_offset(10, 5); | 595 gfx::ScrollOffset scroll_offset(10, 5); |
579 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 596 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
580 gfx::Vector2d sent_scroll_delta(12, -3); | 597 gfx::Vector2d sent_scroll_delta(12, -3); |
581 | 598 |
582 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 599 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 600 scroll_offset); |
583 layer()->ScrollBy(sent_scroll_delta); | 601 layer()->ScrollBy(sent_scroll_delta); |
584 layer()->synced_scroll_offset()->PullDeltaForMainThread(); | 602 layer()->synced_scroll_offset()->PullDeltaForMainThread(); |
585 layer()->SetCurrentScrollOffset(scroll_offset + | 603 layer()->SetCurrentScrollOffset(scroll_offset + |
586 gfx::ScrollOffset(scroll_delta)); | 604 gfx::ScrollOffset(scroll_delta)); |
587 | 605 |
588 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 606 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
589 layer()->CurrentScrollOffset()); | 607 layer()->CurrentScrollOffset()); |
590 EXPECT_VECTOR_EQ(scroll_delta, layer()->ScrollDelta()); | 608 EXPECT_VECTOR_EQ(scroll_delta, ScrollDelta(layer())); |
591 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 609 EXPECT_VECTOR_EQ( |
| 610 scroll_offset, |
| 611 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
592 | 612 |
593 layer()->synced_scroll_offset()->AbortCommit(); | 613 layer()->synced_scroll_offset()->AbortCommit(); |
594 | 614 |
595 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 615 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
596 layer()->CurrentScrollOffset()); | 616 layer()->CurrentScrollOffset()); |
597 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, layer()->ScrollDelta()); | 617 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, ScrollDelta(layer())); |
598 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), | 618 EXPECT_VECTOR_EQ( |
599 layer()->BaseScrollOffset()); | 619 gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), |
| 620 scroll_tree(layer())->GetScrollOffsetBaseForTesting(layer()->id())); |
600 } | 621 } |
601 | 622 |
602 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { | 623 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { |
603 gfx::ScrollOffset scroll_offset(10, 5); | 624 gfx::ScrollOffset scroll_offset(10, 5); |
604 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 625 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
605 | 626 |
606 layer()->set_user_scrollable_vertical(false); | 627 layer()->set_user_scrollable_vertical(false); |
607 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 628 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 629 scroll_offset); |
608 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 630 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
609 | 631 |
610 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); | 632 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); |
611 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); | 633 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); |
612 } | 634 } |
613 | 635 |
614 TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsCurrentScrollOffset) { | 636 TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsCurrentScrollOffset) { |
615 gfx::ScrollOffset scroll_offset(10, 5); | 637 gfx::ScrollOffset scroll_offset(10, 5); |
616 gfx::Vector2dF scroll_delta(12, 18); | 638 gfx::Vector2dF scroll_delta(12, 18); |
617 | 639 |
618 host_impl().CreatePendingTree(); | 640 host_impl().CreatePendingTree(); |
619 | 641 |
620 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 642 scroll_tree(layer())->UpdateScrollOffsetBaseForTesting(layer()->id(), |
| 643 scroll_offset); |
621 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 644 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
622 | 645 |
623 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), unscrolled); | 646 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), unscrolled); |
624 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); | 647 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); |
625 | 648 |
626 layer()->synced_scroll_offset()->PullDeltaForMainThread(); | 649 layer()->synced_scroll_offset()->PullDeltaForMainThread(); |
627 | 650 |
628 scoped_ptr<LayerImpl> pending_layer = | 651 scoped_ptr<LayerImpl> pending_layer = |
629 LayerImpl::Create(host_impl().sync_tree(), layer()->id()); | 652 LayerImpl::Create(host_impl().sync_tree(), layer()->id()); |
630 pending_layer->PushScrollOffsetFromMainThread(layer()->CurrentScrollOffset()); | 653 scroll_tree(pending_layer.get()) |
| 654 ->UpdateScrollOffsetBaseForTesting(pending_layer->id(), |
| 655 layer()->CurrentScrollOffset()); |
631 | 656 |
632 pending_layer->PushPropertiesTo(layer()); | 657 pending_layer->PushPropertiesTo(layer()); |
633 | 658 |
634 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); | 659 EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset()); |
635 EXPECT_VECTOR_EQ(layer()->CurrentScrollOffset(), | 660 EXPECT_VECTOR_EQ(layer()->CurrentScrollOffset(), |
636 pending_layer->CurrentScrollOffset()); | 661 pending_layer->CurrentScrollOffset()); |
637 } | 662 } |
638 | 663 |
639 } // namespace | 664 } // namespace |
640 } // namespace cc | 665 } // namespace cc |
OLD | NEW |