| 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 "CCDelegatedRendererLayerImpl.h" | 9 #include "CCDelegatedRendererLayerImpl.h" |
| 10 #include "CCHeadsUpDisplayLayerImpl.h" | 10 #include "CCHeadsUpDisplayLayerImpl.h" |
| (...skipping 3025 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3036 { | 3036 { |
| 3037 CCLayerTreeHostImpl::FrameData frame; | 3037 CCLayerTreeHostImpl::FrameData frame; |
| 3038 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3038 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3039 | 3039 |
| 3040 // Must receive two render passes, each with one quad | 3040 // Must receive two render passes, each with one quad |
| 3041 ASSERT_EQ(2U, frame.renderPasses.size()); | 3041 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3042 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3042 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
| 3043 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3043 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3044 | 3044 |
| 3045 // Verify that the child layers are being clipped. | 3045 // Verify that the child layers are being clipped. |
| 3046 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi
bleRect(); | 3046 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVi
sibleRect(); |
| 3047 EXPECT_LT(quadVisibleRect.width(), 100); | 3047 EXPECT_LT(quadVisibleRect.width(), 100); |
| 3048 | 3048 |
| 3049 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); | 3049 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); |
| 3050 EXPECT_LT(quadVisibleRect.width(), 100); | 3050 EXPECT_LT(quadVisibleRect.width(), 100); |
| 3051 | 3051 |
| 3052 // Verify that the render surface texture is *not* clipped. | 3052 // Verify that the render surface texture is *not* clipped. |
| 3053 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); | 3053 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); |
| 3054 | 3054 |
| 3055 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3055 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3056 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3056 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3057 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty()); | 3057 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().IsEmpty()); |
| 3058 | 3058 |
| 3059 myHostImpl->drawLayers(frame); | 3059 myHostImpl->drawLayers(frame); |
| 3060 myHostImpl->didDrawAllLayers(frame); | 3060 myHostImpl->didDrawAllLayers(frame); |
| 3061 } | 3061 } |
| 3062 | 3062 |
| 3063 transform = surfaceLayerPtr->transform(); | 3063 transform = surfaceLayerPtr->transform(); |
| 3064 transform.translate(50, 50); | 3064 transform.translate(50, 50); |
| 3065 transform.rotate(-35); | 3065 transform.rotate(-35); |
| 3066 transform.translate(-50, -50); | 3066 transform.translate(-50, -50); |
| 3067 surfaceLayerPtr->setTransform(transform); | 3067 surfaceLayerPtr->setTransform(transform); |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3718 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3718 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3719 | 3719 |
| 3720 // Must receive two render passes, each with one quad | 3720 // Must receive two render passes, each with one quad |
| 3721 ASSERT_EQ(2U, frame.renderPasses.size()); | 3721 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3722 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3722 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3723 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3723 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3724 | 3724 |
| 3725 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3725 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3726 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3726 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3727 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3727 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3728 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3728 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3729 | 3729 |
| 3730 myHostImpl->drawLayers(frame); | 3730 myHostImpl->drawLayers(frame); |
| 3731 myHostImpl->didDrawAllLayers(frame); | 3731 myHostImpl->didDrawAllLayers(frame); |
| 3732 } | 3732 } |
| 3733 | 3733 |
| 3734 // Draw without any change | 3734 // Draw without any change |
| 3735 { | 3735 { |
| 3736 CCLayerTreeHostImpl::FrameData frame; | 3736 CCLayerTreeHostImpl::FrameData frame; |
| 3737 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3737 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3738 | 3738 |
| 3739 // Must receive one render pass, as the other one should be culled | 3739 // Must receive one render pass, as the other one should be culled |
| 3740 ASSERT_EQ(1U, frame.renderPasses.size()); | 3740 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3741 | 3741 |
| 3742 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3742 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3743 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3743 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3744 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3744 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3745 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3745 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3746 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3746 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3747 | 3747 |
| 3748 myHostImpl->drawLayers(frame); | 3748 myHostImpl->drawLayers(frame); |
| 3749 myHostImpl->didDrawAllLayers(frame); | 3749 myHostImpl->didDrawAllLayers(frame); |
| 3750 } | 3750 } |
| 3751 | 3751 |
| 3752 // Change opacity and draw | 3752 // Change opacity and draw |
| 3753 surfaceLayerPtr->setOpacity(0.6f); | 3753 surfaceLayerPtr->setOpacity(0.6f); |
| 3754 { | 3754 { |
| 3755 CCLayerTreeHostImpl::FrameData frame; | 3755 CCLayerTreeHostImpl::FrameData frame; |
| 3756 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3756 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3757 | 3757 |
| 3758 // Must receive one render pass, as the other one should be culled | 3758 // Must receive one render pass, as the other one should be culled |
| 3759 ASSERT_EQ(1U, frame.renderPasses.size()); | 3759 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3760 | 3760 |
| 3761 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3761 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3762 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3762 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3763 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3763 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3764 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3764 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3765 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3765 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3766 | 3766 |
| 3767 myHostImpl->drawLayers(frame); | 3767 myHostImpl->drawLayers(frame); |
| 3768 myHostImpl->didDrawAllLayers(frame); | 3768 myHostImpl->didDrawAllLayers(frame); |
| 3769 } | 3769 } |
| 3770 | 3770 |
| 3771 // Change less benign property and draw - should have contents changed flag | 3771 // Change less benign property and draw - should have contents changed flag |
| 3772 surfaceLayerPtr->setStackingOrderChanged(true); | 3772 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3773 { | 3773 { |
| 3774 CCLayerTreeHostImpl::FrameData frame; | 3774 CCLayerTreeHostImpl::FrameData frame; |
| 3775 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3775 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3776 | 3776 |
| 3777 // Must receive two render passes, each with one quad | 3777 // Must receive two render passes, each with one quad |
| 3778 ASSERT_EQ(2U, frame.renderPasses.size()); | 3778 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3779 | 3779 |
| 3780 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3780 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3781 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3781 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3782 | 3782 |
| 3783 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3783 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3784 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3784 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3785 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3785 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3786 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3786 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3787 | 3787 |
| 3788 myHostImpl->drawLayers(frame); | 3788 myHostImpl->drawLayers(frame); |
| 3789 myHostImpl->didDrawAllLayers(frame); | 3789 myHostImpl->didDrawAllLayers(frame); |
| 3790 } | 3790 } |
| 3791 | 3791 |
| 3792 // Change opacity again, and evict the cached surface texture. | 3792 // Change opacity again, and evict the cached surface texture. |
| 3793 surfaceLayerPtr->setOpacity(0.5f); | 3793 surfaceLayerPtr->setOpacity(0.5f); |
| 3794 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3794 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3795 | 3795 |
| 3796 // Change opacity and draw | 3796 // Change opacity and draw |
| 3797 surfaceLayerPtr->setOpacity(0.6f); | 3797 surfaceLayerPtr->setOpacity(0.6f); |
| 3798 { | 3798 { |
| 3799 CCLayerTreeHostImpl::FrameData frame; | 3799 CCLayerTreeHostImpl::FrameData frame; |
| 3800 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3800 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3801 | 3801 |
| 3802 // Must receive two render passes | 3802 // Must receive two render passes |
| 3803 ASSERT_EQ(2U, frame.renderPasses.size()); | 3803 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3804 | 3804 |
| 3805 // Even though not enough properties changed, the entire thing must be | 3805 // Even though not enough properties changed, the entire thing must be |
| 3806 // redrawn as we don't have cached textures | 3806 // redrawn as we don't have cached textures |
| 3807 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3807 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3808 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3808 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3809 | 3809 |
| 3810 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3810 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3811 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3811 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3812 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3812 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3813 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3813 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3814 | 3814 |
| 3815 // Was our surface evicted? | 3815 // Was our surface evicted? |
| 3816 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3816 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3817 | 3817 |
| 3818 myHostImpl->drawLayers(frame); | 3818 myHostImpl->drawLayers(frame); |
| 3819 myHostImpl->didDrawAllLayers(frame); | 3819 myHostImpl->didDrawAllLayers(frame); |
| 3820 } | 3820 } |
| 3821 | 3821 |
| 3822 // Draw without any change, to make sure the state is clear | 3822 // Draw without any change, to make sure the state is clear |
| 3823 { | 3823 { |
| 3824 CCLayerTreeHostImpl::FrameData frame; | 3824 CCLayerTreeHostImpl::FrameData frame; |
| 3825 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3825 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3826 | 3826 |
| 3827 // Must receive one render pass, as the other one should be culled | 3827 // Must receive one render pass, as the other one should be culled |
| 3828 ASSERT_EQ(1U, frame.renderPasses.size()); | 3828 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3829 | 3829 |
| 3830 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3830 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3831 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3831 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3832 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3832 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3833 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3833 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3834 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3834 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3835 | 3835 |
| 3836 myHostImpl->drawLayers(frame); | 3836 myHostImpl->drawLayers(frame); |
| 3837 myHostImpl->didDrawAllLayers(frame); | 3837 myHostImpl->didDrawAllLayers(frame); |
| 3838 } | 3838 } |
| 3839 | 3839 |
| 3840 // Change opacity on the intermediate layer | 3840 // Change opacity on the intermediate layer |
| 3841 WebTransformationMatrix transform = intermediateLayerPtr->transform(); | 3841 WebTransformationMatrix transform = intermediateLayerPtr->transform(); |
| 3842 transform.setM11(1.0001); | 3842 transform.setM11(1.0001); |
| 3843 intermediateLayerPtr->setTransform(transform); | 3843 intermediateLayerPtr->setTransform(transform); |
| 3844 { | 3844 { |
| 3845 CCLayerTreeHostImpl::FrameData frame; | 3845 CCLayerTreeHostImpl::FrameData frame; |
| 3846 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3846 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3847 | 3847 |
| 3848 // Must receive one render pass, as the other one should be culled. | 3848 // Must receive one render pass, as the other one should be culled. |
| 3849 ASSERT_EQ(1U, frame.renderPasses.size()); | 3849 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3850 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3850 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3851 | 3851 |
| 3852 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3852 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3853 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3853 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3854 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3854 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3855 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3855 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3856 | 3856 |
| 3857 myHostImpl->drawLayers(frame); | 3857 myHostImpl->drawLayers(frame); |
| 3858 myHostImpl->didDrawAllLayers(frame); | 3858 myHostImpl->didDrawAllLayers(frame); |
| 3859 } | 3859 } |
| 3860 } | 3860 } |
| 3861 | 3861 |
| 3862 TEST_P(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3862 TEST_P(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
| 3863 { | 3863 { |
| 3864 Settings::setPartialSwapEnabled(false); | 3864 Settings::setPartialSwapEnabled(false); |
| 3865 | 3865 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3879 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3879 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3880 | 3880 |
| 3881 // Must receive two render passes, each with one quad | 3881 // Must receive two render passes, each with one quad |
| 3882 ASSERT_EQ(2U, frame.renderPasses.size()); | 3882 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3883 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3883 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3884 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3884 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3885 | 3885 |
| 3886 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3886 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3887 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3887 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3888 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3888 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3889 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3889 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3890 | 3890 |
| 3891 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty()); | 3891 EXPECT_FALSE(frame.renderPasses[0]->damageRect().IsEmpty()); |
| 3892 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty()); | 3892 EXPECT_FALSE(frame.renderPasses[1]->damageRect().IsEmpty()); |
| 3893 | 3893 |
| 3894 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); | 3894 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); |
| 3895 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); | 3895 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); |
| 3896 | 3896 |
| 3897 myHostImpl->drawLayers(frame); | 3897 myHostImpl->drawLayers(frame); |
| 3898 myHostImpl->didDrawAllLayers(frame); | 3898 myHostImpl->didDrawAllLayers(frame); |
| 3899 } | 3899 } |
| 3900 | 3900 |
| 3901 // Draw without any change | 3901 // Draw without any change |
| 3902 { | 3902 { |
| 3903 CCLayerTreeHostImpl::FrameData frame; | 3903 CCLayerTreeHostImpl::FrameData frame; |
| 3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3905 | 3905 |
| 3906 // Even though there was no change, we set the damage to entire viewport
. | 3906 // Even though there was no change, we set the damage to entire viewport
. |
| 3907 // One of the passes should be culled as a result, since contents didn't
change | 3907 // One of the passes should be culled as a result, since contents didn't
change |
| 3908 // and we have cached texture. | 3908 // and we have cached texture. |
| 3909 ASSERT_EQ(1U, frame.renderPasses.size()); | 3909 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3910 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3910 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3911 | 3911 |
| 3912 EXPECT_TRUE(frame.renderPasses[0]->damageRect().isEmpty()); | 3912 EXPECT_TRUE(frame.renderPasses[0]->damageRect().IsEmpty()); |
| 3913 | 3913 |
| 3914 myHostImpl->drawLayers(frame); | 3914 myHostImpl->drawLayers(frame); |
| 3915 myHostImpl->didDrawAllLayers(frame); | 3915 myHostImpl->didDrawAllLayers(frame); |
| 3916 } | 3916 } |
| 3917 | 3917 |
| 3918 // Change opacity and draw | 3918 // Change opacity and draw |
| 3919 surfaceLayerPtr->setOpacity(0.6f); | 3919 surfaceLayerPtr->setOpacity(0.6f); |
| 3920 { | 3920 { |
| 3921 CCLayerTreeHostImpl::FrameData frame; | 3921 CCLayerTreeHostImpl::FrameData frame; |
| 3922 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3922 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3923 | 3923 |
| 3924 // Must receive one render pass, as the other one should be culled | 3924 // Must receive one render pass, as the other one should be culled |
| 3925 ASSERT_EQ(1U, frame.renderPasses.size()); | 3925 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3926 | 3926 |
| 3927 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3927 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3928 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3928 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3929 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 3929 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3930 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3930 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3931 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3931 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3932 | 3932 |
| 3933 myHostImpl->drawLayers(frame); | 3933 myHostImpl->drawLayers(frame); |
| 3934 myHostImpl->didDrawAllLayers(frame); | 3934 myHostImpl->didDrawAllLayers(frame); |
| 3935 } | 3935 } |
| 3936 | 3936 |
| 3937 // Change less benign property and draw - should have contents changed flag | 3937 // Change less benign property and draw - should have contents changed flag |
| 3938 surfaceLayerPtr->setStackingOrderChanged(true); | 3938 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3939 { | 3939 { |
| 3940 CCLayerTreeHostImpl::FrameData frame; | 3940 CCLayerTreeHostImpl::FrameData frame; |
| 3941 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3941 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3942 | 3942 |
| 3943 // Must receive two render passes, each with one quad | 3943 // Must receive two render passes, each with one quad |
| 3944 ASSERT_EQ(2U, frame.renderPasses.size()); | 3944 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3945 | 3945 |
| 3946 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3946 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3947 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3947 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3948 | 3948 |
| 3949 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3949 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3950 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3950 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3951 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3951 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3952 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3952 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); |
| 3953 | 3953 |
| 3954 myHostImpl->drawLayers(frame); | 3954 myHostImpl->drawLayers(frame); |
| 3955 myHostImpl->didDrawAllLayers(frame); | 3955 myHostImpl->didDrawAllLayers(frame); |
| 3956 } | 3956 } |
| 3957 | 3957 |
| 3958 // Change opacity again, and evict the cached surface texture. | 3958 // Change opacity again, and evict the cached surface texture. |
| 3959 surfaceLayerPtr->setOpacity(0.5f); | 3959 surfaceLayerPtr->setOpacity(0.5f); |
| 3960 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3960 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3961 | 3961 |
| 3962 // Change opacity and draw | 3962 // Change opacity and draw |
| 3963 surfaceLayerPtr->setOpacity(0.6f); | 3963 surfaceLayerPtr->setOpacity(0.6f); |
| 3964 { | 3964 { |
| 3965 CCLayerTreeHostImpl::FrameData frame; | 3965 CCLayerTreeHostImpl::FrameData frame; |
| 3966 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3966 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3967 | 3967 |
| 3968 // Must receive two render passes | 3968 // Must receive two render passes |
| 3969 ASSERT_EQ(2U, frame.renderPasses.size()); | 3969 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3970 | 3970 |
| 3971 // Even though not enough properties changed, the entire thing must be | 3971 // Even though not enough properties changed, the entire thing must be |
| 3972 // redrawn as we don't have cached textures | 3972 // redrawn as we don't have cached textures |
| 3973 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3973 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3974 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3974 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3975 | 3975 |
| 3976 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3976 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3977 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); | 3977 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3978 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3978 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3979 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3979 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 3980 | 3980 |
| 3981 // Was our surface evicted? | 3981 // Was our surface evicted? |
| 3982 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3982 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3983 | 3983 |
| 3984 myHostImpl->drawLayers(frame); | 3984 myHostImpl->drawLayers(frame); |
| 3985 myHostImpl->didDrawAllLayers(frame); | 3985 myHostImpl->didDrawAllLayers(frame); |
| 3986 } | 3986 } |
| 3987 | 3987 |
| 3988 // Draw without any change, to make sure the state is clear | 3988 // Draw without any change, to make sure the state is clear |
| 3989 { | 3989 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 4008 CCLayerTreeHostImpl::FrameData frame; | 4008 CCLayerTreeHostImpl::FrameData frame; |
| 4009 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4009 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 4010 | 4010 |
| 4011 // Must receive one render pass, as the other one should be culled. | 4011 // Must receive one render pass, as the other one should be culled. |
| 4012 ASSERT_EQ(1U, frame.renderPasses.size()); | 4012 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 4013 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4013 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 4014 | 4014 |
| 4015 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 4015 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 4016 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); | 4016 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 4017 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 4017 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 4018 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 4018 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
| 4019 | 4019 |
| 4020 myHostImpl->drawLayers(frame); | 4020 myHostImpl->drawLayers(frame); |
| 4021 myHostImpl->didDrawAllLayers(frame); | 4021 myHostImpl->didDrawAllLayers(frame); |
| 4022 } | 4022 } |
| 4023 } | 4023 } |
| 4024 | 4024 |
| 4025 TEST_P(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) | 4025 TEST_P(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) |
| 4026 { | 4026 { |
| 4027 setReduceMemoryResult(false); | 4027 setReduceMemoryResult(false); |
| 4028 | 4028 |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4374 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4374 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
| 4375 testCaseIndex++; | 4375 testCaseIndex++; |
| 4376 } | 4376 } |
| 4377 } | 4377 } |
| 4378 | 4378 |
| 4379 INSTANTIATE_TEST_CASE_P(CCLayerTreeHostImplTests, | 4379 INSTANTIATE_TEST_CASE_P(CCLayerTreeHostImplTests, |
| 4380 CCLayerTreeHostImplTest, | 4380 CCLayerTreeHostImplTest, |
| 4381 ::testing::Values(false, true)); | 4381 ::testing::Values(false, true)); |
| 4382 | 4382 |
| 4383 } // namespace | 4383 } // namespace |
| OLD | NEW |