| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCLayerTreeHostImpl.h" | 7 #include "CCLayerTreeHostImpl.h" |
| 8 | 8 |
| 9 #include "CCAnimationTestCommon.h" | 9 #include "CCAnimationTestCommon.h" |
| 10 #include "CCDelegatedRendererLayerImpl.h" | 10 #include "CCDelegatedRendererLayerImpl.h" |
| (...skipping 2920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2931 { | 2931 { |
| 2932 CCLayerTreeHostImpl::FrameData frame; | 2932 CCLayerTreeHostImpl::FrameData frame; |
| 2933 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2933 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 2934 | 2934 |
| 2935 // Must receive two render passes, each with one quad | 2935 // Must receive two render passes, each with one quad |
| 2936 ASSERT_EQ(2U, frame.renderPasses.size()); | 2936 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 2937 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 2937 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
| 2938 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 2938 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 2939 | 2939 |
| 2940 // Verify that the child layers are being clipped. | 2940 // Verify that the child layers are being clipped. |
| 2941 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi
bleRect(); | 2941 ccmath::IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->
quadVisibleRect(); |
| 2942 EXPECT_LT(quadVisibleRect.width(), 100); | 2942 EXPECT_LT(quadVisibleRect.width(), 100); |
| 2943 | 2943 |
| 2944 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); | 2944 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); |
| 2945 EXPECT_LT(quadVisibleRect.width(), 100); | 2945 EXPECT_LT(quadVisibleRect.width(), 100); |
| 2946 | 2946 |
| 2947 // Verify that the render surface texture is *not* clipped. | 2947 // Verify that the render surface texture is *not* clipped. |
| 2948 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); | 2948 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); |
| 2949 | 2949 |
| 2950 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 2950 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 2951 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 2951 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 2952 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty()); | 2952 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().IsEmpty()); |
| 2953 | 2953 |
| 2954 myHostImpl->drawLayers(frame); | 2954 myHostImpl->drawLayers(frame); |
| 2955 myHostImpl->didDrawAllLayers(frame); | 2955 myHostImpl->didDrawAllLayers(frame); |
| 2956 } | 2956 } |
| 2957 | 2957 |
| 2958 transform = surfaceLayerPtr->transform(); | 2958 transform = surfaceLayerPtr->transform(); |
| 2959 transform.translate(50, 50); | 2959 transform.translate(50, 50); |
| 2960 transform.rotate(-35); | 2960 transform.rotate(-35); |
| 2961 transform.translate(-50, -50); | 2961 transform.translate(-50, -50); |
| 2962 surfaceLayerPtr->setTransform(transform); | 2962 surfaceLayerPtr->setTransform(transform); |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3613 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3613 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3614 | 3614 |
| 3615 // Must receive two render passes, each with one quad | 3615 // Must receive two render passes, each with one quad |
| 3616 ASSERT_EQ(2U, frame.renderPasses.size()); | 3616 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3617 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3617 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3618 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3618 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3619 | 3619 |
| 3620 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3620 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3621 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3621 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3622 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3622 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3623 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3623 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3624 | 3624 |
| 3625 myHostImpl->drawLayers(frame); | 3625 myHostImpl->drawLayers(frame); |
| 3626 myHostImpl->didDrawAllLayers(frame); | 3626 myHostImpl->didDrawAllLayers(frame); |
| 3627 } | 3627 } |
| 3628 | 3628 |
| 3629 // Draw without any change | 3629 // Draw without any change |
| 3630 { | 3630 { |
| 3631 CCLayerTreeHostImpl::FrameData frame; | 3631 CCLayerTreeHostImpl::FrameData frame; |
| 3632 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3632 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3633 | 3633 |
| 3634 // Must receive one render pass, as the other one should be culled | 3634 // Must receive one render pass, as the other one should be culled |
| 3635 ASSERT_EQ(1U, frame.renderPasses.size()); | 3635 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3636 | 3636 |
| 3637 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3637 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3638 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3638 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3639 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3639 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3640 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3640 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3641 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3641 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3642 | 3642 |
| 3643 myHostImpl->drawLayers(frame); | 3643 myHostImpl->drawLayers(frame); |
| 3644 myHostImpl->didDrawAllLayers(frame); | 3644 myHostImpl->didDrawAllLayers(frame); |
| 3645 } | 3645 } |
| 3646 | 3646 |
| 3647 // Change opacity and draw | 3647 // Change opacity and draw |
| 3648 surfaceLayerPtr->setOpacity(0.6f); | 3648 surfaceLayerPtr->setOpacity(0.6f); |
| 3649 { | 3649 { |
| 3650 CCLayerTreeHostImpl::FrameData frame; | 3650 CCLayerTreeHostImpl::FrameData frame; |
| 3651 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3651 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3652 | 3652 |
| 3653 // Must receive one render pass, as the other one should be culled | 3653 // Must receive one render pass, as the other one should be culled |
| 3654 ASSERT_EQ(1U, frame.renderPasses.size()); | 3654 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3655 | 3655 |
| 3656 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3656 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3657 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3657 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3658 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3658 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3659 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3659 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3660 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3660 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3661 | 3661 |
| 3662 myHostImpl->drawLayers(frame); | 3662 myHostImpl->drawLayers(frame); |
| 3663 myHostImpl->didDrawAllLayers(frame); | 3663 myHostImpl->didDrawAllLayers(frame); |
| 3664 } | 3664 } |
| 3665 | 3665 |
| 3666 // Change less benign property and draw - should have contents changed flag | 3666 // Change less benign property and draw - should have contents changed flag |
| 3667 surfaceLayerPtr->setStackingOrderChanged(true); | 3667 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3668 { | 3668 { |
| 3669 CCLayerTreeHostImpl::FrameData frame; | 3669 CCLayerTreeHostImpl::FrameData frame; |
| 3670 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3670 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3671 | 3671 |
| 3672 // Must receive two render passes, each with one quad | 3672 // Must receive two render passes, each with one quad |
| 3673 ASSERT_EQ(2U, frame.renderPasses.size()); | 3673 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3674 | 3674 |
| 3675 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3675 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3676 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3676 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3677 | 3677 |
| 3678 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3678 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3679 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3679 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3680 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3680 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3681 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3681 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3682 | 3682 |
| 3683 myHostImpl->drawLayers(frame); | 3683 myHostImpl->drawLayers(frame); |
| 3684 myHostImpl->didDrawAllLayers(frame); | 3684 myHostImpl->didDrawAllLayers(frame); |
| 3685 } | 3685 } |
| 3686 | 3686 |
| 3687 // Change opacity again, and evict the cached surface texture. | 3687 // Change opacity again, and evict the cached surface texture. |
| 3688 surfaceLayerPtr->setOpacity(0.5f); | 3688 surfaceLayerPtr->setOpacity(0.5f); |
| 3689 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3689 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3690 | 3690 |
| 3691 // Change opacity and draw | 3691 // Change opacity and draw |
| 3692 surfaceLayerPtr->setOpacity(0.6f); | 3692 surfaceLayerPtr->setOpacity(0.6f); |
| 3693 { | 3693 { |
| 3694 CCLayerTreeHostImpl::FrameData frame; | 3694 CCLayerTreeHostImpl::FrameData frame; |
| 3695 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3695 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3696 | 3696 |
| 3697 // Must receive two render passes | 3697 // Must receive two render passes |
| 3698 ASSERT_EQ(2U, frame.renderPasses.size()); | 3698 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3699 | 3699 |
| 3700 // Even though not enough properties changed, the entire thing must be | 3700 // Even though not enough properties changed, the entire thing must be |
| 3701 // redrawn as we don't have cached textures | 3701 // redrawn as we don't have cached textures |
| 3702 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3702 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3703 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3703 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3704 | 3704 |
| 3705 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3705 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3706 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3706 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3707 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3707 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3708 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3708 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3709 | 3709 |
| 3710 // Was our surface evicted? | 3710 // Was our surface evicted? |
| 3711 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3711 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3712 | 3712 |
| 3713 myHostImpl->drawLayers(frame); | 3713 myHostImpl->drawLayers(frame); |
| 3714 myHostImpl->didDrawAllLayers(frame); | 3714 myHostImpl->didDrawAllLayers(frame); |
| 3715 } | 3715 } |
| 3716 | 3716 |
| 3717 // Draw without any change, to make sure the state is clear | 3717 // Draw without any change, to make sure the state is clear |
| 3718 { | 3718 { |
| 3719 CCLayerTreeHostImpl::FrameData frame; | 3719 CCLayerTreeHostImpl::FrameData frame; |
| 3720 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3720 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3721 | 3721 |
| 3722 // Must receive one render pass, as the other one should be culled | 3722 // Must receive one render pass, as the other one should be culled |
| 3723 ASSERT_EQ(1U, frame.renderPasses.size()); | 3723 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3724 | 3724 |
| 3725 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3725 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3726 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3726 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3727 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3727 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3728 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3728 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3729 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3729 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3730 | 3730 |
| 3731 myHostImpl->drawLayers(frame); | 3731 myHostImpl->drawLayers(frame); |
| 3732 myHostImpl->didDrawAllLayers(frame); | 3732 myHostImpl->didDrawAllLayers(frame); |
| 3733 } | 3733 } |
| 3734 | 3734 |
| 3735 // Change opacity on the intermediate layer | 3735 // Change opacity on the intermediate layer |
| 3736 WebTransformationMatrix transform = intermediateLayerPtr->transform(); | 3736 WebTransformationMatrix transform = intermediateLayerPtr->transform(); |
| 3737 transform.setM11(1.0001); | 3737 transform.setM11(1.0001); |
| 3738 intermediateLayerPtr->setTransform(transform); | 3738 intermediateLayerPtr->setTransform(transform); |
| 3739 { | 3739 { |
| 3740 CCLayerTreeHostImpl::FrameData frame; | 3740 CCLayerTreeHostImpl::FrameData frame; |
| 3741 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3741 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3742 | 3742 |
| 3743 // Must receive one render pass, as the other one should be culled. | 3743 // Must receive one render pass, as the other one should be culled. |
| 3744 ASSERT_EQ(1U, frame.renderPasses.size()); | 3744 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3745 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3745 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3746 | 3746 |
| 3747 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3747 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3748 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3748 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3749 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3749 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3750 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3750 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3751 | 3751 |
| 3752 myHostImpl->drawLayers(frame); | 3752 myHostImpl->drawLayers(frame); |
| 3753 myHostImpl->didDrawAllLayers(frame); | 3753 myHostImpl->didDrawAllLayers(frame); |
| 3754 } | 3754 } |
| 3755 } | 3755 } |
| 3756 | 3756 |
| 3757 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3757 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
| 3758 { | 3758 { |
| 3759 CCSettings::setPartialSwapEnabled(false); | 3759 CCSettings::setPartialSwapEnabled(false); |
| 3760 | 3760 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3774 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3774 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3775 | 3775 |
| 3776 // Must receive two render passes, each with one quad | 3776 // Must receive two render passes, each with one quad |
| 3777 ASSERT_EQ(2U, frame.renderPasses.size()); | 3777 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3778 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3778 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3779 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3779 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3780 | 3780 |
| 3781 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3781 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3782 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3782 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3783 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3783 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3784 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3784 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3785 | 3785 |
| 3786 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty()); | 3786 EXPECT_FALSE(frame.renderPasses[0]->damageRect().IsEmpty()); |
| 3787 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty()); | 3787 EXPECT_FALSE(frame.renderPasses[1]->damageRect().IsEmpty()); |
| 3788 | 3788 |
| 3789 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); | 3789 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); |
| 3790 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); | 3790 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); |
| 3791 | 3791 |
| 3792 myHostImpl->drawLayers(frame); | 3792 myHostImpl->drawLayers(frame); |
| 3793 myHostImpl->didDrawAllLayers(frame); | 3793 myHostImpl->didDrawAllLayers(frame); |
| 3794 } | 3794 } |
| 3795 | 3795 |
| 3796 // Draw without any change | 3796 // Draw without any change |
| 3797 { | 3797 { |
| 3798 CCLayerTreeHostImpl::FrameData frame; | 3798 CCLayerTreeHostImpl::FrameData frame; |
| 3799 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3799 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3800 | 3800 |
| 3801 // Even though there was no change, we set the damage to entire viewport
. | 3801 // Even though there was no change, we set the damage to entire viewport
. |
| 3802 // One of the passes should be culled as a result, since contents didn't
change | 3802 // One of the passes should be culled as a result, since contents didn't
change |
| 3803 // and we have cached texture. | 3803 // and we have cached texture. |
| 3804 ASSERT_EQ(1U, frame.renderPasses.size()); | 3804 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3805 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3805 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3806 | 3806 |
| 3807 EXPECT_TRUE(frame.renderPasses[0]->damageRect().isEmpty()); | 3807 EXPECT_TRUE(frame.renderPasses[0]->damageRect().IsEmpty()); |
| 3808 | 3808 |
| 3809 myHostImpl->drawLayers(frame); | 3809 myHostImpl->drawLayers(frame); |
| 3810 myHostImpl->didDrawAllLayers(frame); | 3810 myHostImpl->didDrawAllLayers(frame); |
| 3811 } | 3811 } |
| 3812 | 3812 |
| 3813 // Change opacity and draw | 3813 // Change opacity and draw |
| 3814 surfaceLayerPtr->setOpacity(0.6f); | 3814 surfaceLayerPtr->setOpacity(0.6f); |
| 3815 { | 3815 { |
| 3816 CCLayerTreeHostImpl::FrameData frame; | 3816 CCLayerTreeHostImpl::FrameData frame; |
| 3817 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3817 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3818 | 3818 |
| 3819 // Must receive one render pass, as the other one should be culled | 3819 // Must receive one render pass, as the other one should be culled |
| 3820 ASSERT_EQ(1U, frame.renderPasses.size()); | 3820 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3821 | 3821 |
| 3822 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3822 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3823 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3823 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3824 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3824 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3825 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3825 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3826 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3826 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3827 | 3827 |
| 3828 myHostImpl->drawLayers(frame); | 3828 myHostImpl->drawLayers(frame); |
| 3829 myHostImpl->didDrawAllLayers(frame); | 3829 myHostImpl->didDrawAllLayers(frame); |
| 3830 } | 3830 } |
| 3831 | 3831 |
| 3832 // Change less benign property and draw - should have contents changed flag | 3832 // Change less benign property and draw - should have contents changed flag |
| 3833 surfaceLayerPtr->setStackingOrderChanged(true); | 3833 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3834 { | 3834 { |
| 3835 CCLayerTreeHostImpl::FrameData frame; | 3835 CCLayerTreeHostImpl::FrameData frame; |
| 3836 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3836 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3837 | 3837 |
| 3838 // Must receive two render passes, each with one quad | 3838 // Must receive two render passes, each with one quad |
| 3839 ASSERT_EQ(2U, frame.renderPasses.size()); | 3839 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3840 | 3840 |
| 3841 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3841 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3842 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3842 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3843 | 3843 |
| 3844 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3844 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3845 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3845 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3846 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3846 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3847 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3847 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3848 | 3848 |
| 3849 myHostImpl->drawLayers(frame); | 3849 myHostImpl->drawLayers(frame); |
| 3850 myHostImpl->didDrawAllLayers(frame); | 3850 myHostImpl->didDrawAllLayers(frame); |
| 3851 } | 3851 } |
| 3852 | 3852 |
| 3853 // Change opacity again, and evict the cached surface texture. | 3853 // Change opacity again, and evict the cached surface texture. |
| 3854 surfaceLayerPtr->setOpacity(0.5f); | 3854 surfaceLayerPtr->setOpacity(0.5f); |
| 3855 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3855 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3856 | 3856 |
| 3857 // Change opacity and draw | 3857 // Change opacity and draw |
| 3858 surfaceLayerPtr->setOpacity(0.6f); | 3858 surfaceLayerPtr->setOpacity(0.6f); |
| 3859 { | 3859 { |
| 3860 CCLayerTreeHostImpl::FrameData frame; | 3860 CCLayerTreeHostImpl::FrameData frame; |
| 3861 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3861 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3862 | 3862 |
| 3863 // Must receive two render passes | 3863 // Must receive two render passes |
| 3864 ASSERT_EQ(2U, frame.renderPasses.size()); | 3864 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3865 | 3865 |
| 3866 // Even though not enough properties changed, the entire thing must be | 3866 // Even though not enough properties changed, the entire thing must be |
| 3867 // redrawn as we don't have cached textures | 3867 // redrawn as we don't have cached textures |
| 3868 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3868 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3869 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3869 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3870 | 3870 |
| 3871 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3871 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3872 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3872 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3873 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3873 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3874 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3874 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3875 | 3875 |
| 3876 // Was our surface evicted? | 3876 // Was our surface evicted? |
| 3877 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3877 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3878 | 3878 |
| 3879 myHostImpl->drawLayers(frame); | 3879 myHostImpl->drawLayers(frame); |
| 3880 myHostImpl->didDrawAllLayers(frame); | 3880 myHostImpl->didDrawAllLayers(frame); |
| 3881 } | 3881 } |
| 3882 | 3882 |
| 3883 // Draw without any change, to make sure the state is clear | 3883 // Draw without any change, to make sure the state is clear |
| 3884 { | 3884 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3903 CCLayerTreeHostImpl::FrameData frame; | 3903 CCLayerTreeHostImpl::FrameData frame; |
| 3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3905 | 3905 |
| 3906 // Must receive one render pass, as the other one should be culled. | 3906 // Must receive one render pass, as the other one should be culled. |
| 3907 ASSERT_EQ(1U, frame.renderPasses.size()); | 3907 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3908 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3908 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3909 | 3909 |
| 3910 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3910 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3911 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3911 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3912 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3912 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3913 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3913 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3914 | 3914 |
| 3915 myHostImpl->drawLayers(frame); | 3915 myHostImpl->drawLayers(frame); |
| 3916 myHostImpl->didDrawAllLayers(frame); | 3916 myHostImpl->didDrawAllLayers(frame); |
| 3917 } | 3917 } |
| 3918 } | 3918 } |
| 3919 | 3919 |
| 3920 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) | 3920 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) |
| 3921 { | 3921 { |
| 3922 m_hostImpl->releaseContentsTextures(); | 3922 m_hostImpl->releaseContentsTextures(); |
| 3923 EXPECT_TRUE(m_didRequestCommit); | 3923 EXPECT_TRUE(m_didRequestCommit); |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4276 while (removeRenderPassesCases[testCaseIndex].name) { | 4276 while (removeRenderPassesCases[testCaseIndex].name) { |
| 4277 RenderPassRemovalTestData testData; | 4277 RenderPassRemovalTestData testData; |
| 4278 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4278 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
| 4279 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); | 4279 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); |
| 4280 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4280 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
| 4281 testCaseIndex++; | 4281 testCaseIndex++; |
| 4282 } | 4282 } |
| 4283 } | 4283 } |
| 4284 | 4284 |
| 4285 } // namespace | 4285 } // namespace |
| OLD | NEW |