OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/test/fake_content_layer_client.h" | 7 #include "cc/test/fake_content_layer_client.h" |
8 #include "cc/test/fake_picture_layer.h" | 8 #include "cc/test/fake_picture_layer.h" |
9 #include "cc/test/fake_picture_layer_impl.h" | 9 #include "cc/test/fake_picture_layer_impl.h" |
10 #include "cc/test/layer_tree_test.h" | 10 #include "cc/test/layer_tree_test.h" |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 | 451 |
452 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 452 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
453 LayerImpl* gchild = impl->sync_tree()->LayerById(picture_->id()); | 453 LayerImpl* gchild = impl->sync_tree()->LayerById(picture_->id()); |
454 FakePictureLayerImpl* picture = static_cast<FakePictureLayerImpl*>(gchild); | 454 FakePictureLayerImpl* picture = static_cast<FakePictureLayerImpl*>(gchild); |
455 ready_to_draw_ = false; | 455 ready_to_draw_ = false; |
456 | 456 |
457 switch (frame_) { | 457 switch (frame_) { |
458 case 0: | 458 case 0: |
459 // On 1st commit the pending layer has tilings. | 459 // On 1st commit the pending layer has tilings. |
460 ASSERT_EQ(1u, picture->tilings()->num_tilings()); | 460 ASSERT_EQ(1u, picture->tilings()->num_tilings()); |
461 EXPECT_EQ(1.f, picture->tilings()->tiling_at(0)->contents_scale()); | 461 EXPECT_EQ(ScaleTranslate2d(), |
| 462 picture->tilings()->tiling_at(0)->raster_transform()); |
462 break; | 463 break; |
463 case 1: | 464 case 1: |
464 // On 2nd commit, the pending layer is transparent, so has a stale | 465 // On 2nd commit, the pending layer is transparent, so has a stale |
465 // value. | 466 // value. |
466 ASSERT_EQ(1u, picture->tilings()->num_tilings()); | 467 ASSERT_EQ(1u, picture->tilings()->num_tilings()); |
467 EXPECT_EQ(1.f, picture->tilings()->tiling_at(0)->contents_scale()); | 468 EXPECT_EQ(ScaleTranslate2d(), |
| 469 picture->tilings()->tiling_at(0)->raster_transform()); |
468 break; | 470 break; |
469 case 2: | 471 case 2: |
470 // On 3rd commit, the pending layer is visible again, so has tilings and | 472 // On 3rd commit, the pending layer is visible again, so has tilings and |
471 // is updated for the pinch. | 473 // is updated for the pinch. |
472 ASSERT_EQ(1u, picture->tilings()->num_tilings()); | 474 ASSERT_EQ(1u, picture->tilings()->num_tilings()); |
473 EXPECT_EQ(2.f, picture->tilings()->tiling_at(0)->contents_scale()); | 475 EXPECT_EQ(ScaleTranslate2d(2.f, gfx::Vector2dF()), |
| 476 picture->tilings()->tiling_at(0)->raster_transform()); |
474 } | 477 } |
475 } | 478 } |
476 | 479 |
477 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { | 480 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
478 LayerImpl* gchild = impl->active_tree()->LayerById(picture_->id()); | 481 LayerImpl* gchild = impl->active_tree()->LayerById(picture_->id()); |
479 FakePictureLayerImpl* picture = static_cast<FakePictureLayerImpl*>(gchild); | 482 FakePictureLayerImpl* picture = static_cast<FakePictureLayerImpl*>(gchild); |
480 | 483 |
481 if (frame_ != last_frame_drawn_) | 484 if (frame_ != last_frame_drawn_) |
482 draws_in_frame_ = 0; | 485 draws_in_frame_ = 0; |
483 ++draws_in_frame_; | 486 ++draws_in_frame_; |
484 last_frame_drawn_ = frame_; | 487 last_frame_drawn_ = frame_; |
485 | 488 |
486 switch (frame_) { | 489 switch (frame_) { |
487 case 0: | 490 case 0: |
488 if (draws_in_frame_ == 1) { | 491 if (draws_in_frame_ == 1) { |
489 // On 1st commit the layer has tilings. | 492 // On 1st commit the layer has tilings. |
490 EXPECT_GT(picture->tilings()->num_tilings(), 0u); | 493 EXPECT_GT(picture->tilings()->num_tilings(), 0u); |
491 EXPECT_EQ(1.f, picture->HighResTiling()->contents_scale()); | 494 EXPECT_EQ(ScaleTranslate2d(), |
| 495 picture->HighResTiling()->raster_transform()); |
492 | 496 |
493 // Pinch zoom in to change the scale on the active tree. | 497 // Pinch zoom in to change the scale on the active tree. |
494 impl->PinchGestureBegin(); | 498 impl->PinchGestureBegin(); |
495 impl->PinchGestureUpdate(2.f, gfx::Point(1, 1)); | 499 impl->PinchGestureUpdate(2.f, gfx::Point(1, 1)); |
496 impl->PinchGestureEnd(); | 500 impl->PinchGestureEnd(); |
497 } else if (picture->tilings()->num_tilings() == 1) { | 501 } else if (picture->tilings()->num_tilings() == 1) { |
498 // If the pinch gesture caused a commit we could get here with a | 502 // If the pinch gesture caused a commit we could get here with a |
499 // pending tree. | 503 // pending tree. |
500 EXPECT_FALSE(impl->pending_tree()); | 504 EXPECT_FALSE(impl->pending_tree()); |
501 EXPECT_EQ(2.f, picture->HighResTiling()->contents_scale()); | 505 EXPECT_EQ(ScaleTranslate2d(2.f, gfx::Vector2dF()), |
| 506 picture->HighResTiling()->raster_transform()); |
502 | 507 |
503 // Need to wait for ready to draw here so that the pinch is | 508 // Need to wait for ready to draw here so that the pinch is |
504 // entirely complete, otherwise another draw might come in before | 509 // entirely complete, otherwise another draw might come in before |
505 // the commit occurs. | 510 // the commit occurs. |
506 if (ready_to_draw_) { | 511 if (ready_to_draw_) { |
507 ++frame_; | 512 ++frame_; |
508 MainThreadTaskRunner()->PostTask( | 513 MainThreadTaskRunner()->PostTask( |
509 FROM_HERE, | 514 FROM_HERE, |
510 base::Bind( | 515 base::Bind( |
511 &LayerTreeHostPictureTestRSLLMembershipWithScale::NextStep, | 516 &LayerTreeHostPictureTestRSLLMembershipWithScale::NextStep, |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 FakePictureLayerImpl* will_change_layer = | 614 FakePictureLayerImpl* will_change_layer = |
610 static_cast<FakePictureLayerImpl*>( | 615 static_cast<FakePictureLayerImpl*>( |
611 impl->active_tree()->LayerById(will_change_layer_->id())); | 616 impl->active_tree()->LayerById(will_change_layer_->id())); |
612 FakePictureLayerImpl* normal_layer = static_cast<FakePictureLayerImpl*>( | 617 FakePictureLayerImpl* normal_layer = static_cast<FakePictureLayerImpl*>( |
613 impl->active_tree()->LayerById(normal_layer_->id())); | 618 impl->active_tree()->LayerById(normal_layer_->id())); |
614 | 619 |
615 switch (impl->sync_tree()->source_frame_number()) { | 620 switch (impl->sync_tree()->source_frame_number()) { |
616 case 0: | 621 case 0: |
617 // On first commit, both layers are at the default scale. | 622 // On first commit, both layers are at the default scale. |
618 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); | 623 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); |
619 EXPECT_EQ(1.f, | 624 EXPECT_EQ( |
620 will_change_layer->tilings()->tiling_at(0)->contents_scale()); | 625 ScaleTranslate2d(), |
| 626 will_change_layer->tilings()->tiling_at(0)->raster_transform()); |
621 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); | 627 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); |
622 EXPECT_EQ(1.f, normal_layer->tilings()->tiling_at(0)->contents_scale()); | 628 EXPECT_EQ(ScaleTranslate2d(), |
| 629 normal_layer->tilings()->tiling_at(0)->raster_transform()); |
623 | 630 |
624 MainThreadTaskRunner()->PostTask( | 631 MainThreadTaskRunner()->PostTask( |
625 FROM_HERE, | 632 FROM_HERE, |
626 base::Bind( | 633 base::Bind( |
627 &LayerTreeHostPictureTestForceRecalculateScales::ScaleRootUp, | 634 &LayerTreeHostPictureTestForceRecalculateScales::ScaleRootUp, |
628 base::Unretained(this))); | 635 base::Unretained(this))); |
629 break; | 636 break; |
630 case 1: | 637 case 1: |
631 // On 2nd commit after scaling up to 2, the normal layer will adjust its | 638 // On 2nd commit after scaling up to 2, the normal layer will adjust its |
632 // scale and the will change layer should not (as it is will change. | 639 // scale and the will change layer should not (as it is will change. |
633 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); | 640 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); |
634 EXPECT_EQ(1.f, | 641 EXPECT_EQ( |
635 will_change_layer->tilings()->tiling_at(0)->contents_scale()); | 642 ScaleTranslate2d(), |
| 643 will_change_layer->tilings()->tiling_at(0)->raster_transform()); |
636 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); | 644 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); |
637 EXPECT_EQ(2.f, normal_layer->tilings()->tiling_at(0)->contents_scale()); | 645 EXPECT_EQ(ScaleTranslate2d(2.f, gfx::Vector2dF()), |
| 646 normal_layer->tilings()->tiling_at(0)->raster_transform()); |
638 | 647 |
639 MainThreadTaskRunner()->PostTask( | 648 MainThreadTaskRunner()->PostTask( |
640 FROM_HERE, | 649 FROM_HERE, |
641 base::Bind(&LayerTreeHostPictureTestForceRecalculateScales:: | 650 base::Bind(&LayerTreeHostPictureTestForceRecalculateScales:: |
642 ScaleRootUpAndRecalculateScales, | 651 ScaleRootUpAndRecalculateScales, |
643 base::Unretained(this))); | 652 base::Unretained(this))); |
644 break; | 653 break; |
645 case 2: | 654 case 2: |
646 // On 3rd commit, both layers should adjust scales due to forced | 655 // On 3rd commit, both layers should adjust scales due to forced |
647 // recalculating. | 656 // recalculating. |
648 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); | 657 ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings()); |
649 EXPECT_EQ(4.f, | 658 EXPECT_EQ( |
650 will_change_layer->tilings()->tiling_at(0)->contents_scale()); | 659 ScaleTranslate2d(4.f, gfx::Vector2dF()), |
| 660 will_change_layer->tilings()->tiling_at(0)->raster_transform()); |
651 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); | 661 ASSERT_EQ(1u, normal_layer->tilings()->num_tilings()); |
652 EXPECT_EQ(4.f, normal_layer->tilings()->tiling_at(0)->contents_scale()); | 662 EXPECT_EQ(ScaleTranslate2d(4.f, gfx::Vector2dF()), |
| 663 normal_layer->tilings()->tiling_at(0)->raster_transform()); |
653 EndTest(); | 664 EndTest(); |
654 break; | 665 break; |
655 } | 666 } |
656 } | 667 } |
657 | 668 |
658 void ScaleRootUp() { | 669 void ScaleRootUp() { |
659 gfx::Transform transform; | 670 gfx::Transform transform; |
660 transform.Scale(2, 2); | 671 transform.Scale(2, 2); |
661 layer_tree_host()->root_layer()->SetTransform(transform); | 672 layer_tree_host()->root_layer()->SetTransform(transform); |
662 } | 673 } |
663 | 674 |
664 void ScaleRootUpAndRecalculateScales() { | 675 void ScaleRootUpAndRecalculateScales() { |
665 gfx::Transform transform; | 676 gfx::Transform transform; |
666 transform.Scale(4, 4); | 677 transform.Scale(4, 4); |
667 layer_tree_host()->root_layer()->SetTransform(transform); | 678 layer_tree_host()->root_layer()->SetTransform(transform); |
668 layer_tree_host()->SetNeedsRecalculateRasterScales(); | 679 layer_tree_host()->SetNeedsRecalculateRasterScales(); |
669 } | 680 } |
670 | 681 |
671 void AfterTest() override {} | 682 void AfterTest() override {} |
672 | 683 |
673 scoped_refptr<FakePictureLayer> will_change_layer_; | 684 scoped_refptr<FakePictureLayer> will_change_layer_; |
674 scoped_refptr<FakePictureLayer> normal_layer_; | 685 scoped_refptr<FakePictureLayer> normal_layer_; |
675 }; | 686 }; |
676 | 687 |
677 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostPictureTestForceRecalculateScales); | 688 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostPictureTestForceRecalculateScales); |
678 | 689 |
679 } // namespace | 690 } // namespace |
680 } // namespace cc | 691 } // namespace cc |
OLD | NEW |