Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(988)

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 10984053: cc: Use ui/gfx geometry types for the CCRenderPass and CCDrawQuad classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/quad_culler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/quad_culler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698