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

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 11618026: Move filters to RenderPassDrawQuad (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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/render_pass.h » ('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 "cc/layer_tree_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 3758 matching lines...) Expand 10 before | Expand all | Expand 10 after
3769 LayerTreeHostImpl::FrameData frame; 3769 LayerTreeHostImpl::FrameData frame;
3770 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3770 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3771 3771
3772 // Must receive two render passes, each with one quad 3772 // Must receive two render passes, each with one quad
3773 ASSERT_EQ(2U, frame.renderPasses.size()); 3773 ASSERT_EQ(2U, frame.renderPasses.size());
3774 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3774 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3775 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); 3775 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size());
3776 3776
3777 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 3777 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
3778 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 3778 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
3779 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3779 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
3780 ASSERT_TRUE(targetPass);
3780 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3781 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3781 3782
3782 myHostImpl->drawLayers(frame); 3783 myHostImpl->drawLayers(frame);
3783 myHostImpl->didDrawAllLayers(frame); 3784 myHostImpl->didDrawAllLayers(frame);
3784 } 3785 }
3785 3786
3786 // Draw without any change 3787 // Draw without any change
3787 { 3788 {
3788 LayerTreeHostImpl::FrameData frame; 3789 LayerTreeHostImpl::FrameData frame;
3789 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3790 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3790 3791
3791 // Must receive one render pass, as the other one should be culled 3792 // Must receive one render pass, as the other one should be culled
3792 ASSERT_EQ(1U, frame.renderPasses.size()); 3793 ASSERT_EQ(1U, frame.renderPasses.size());
3793 3794
3794 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3795 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3795 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 3796 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
3796 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 3797 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
3797 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3798 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
3798 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3799 3799
3800 myHostImpl->drawLayers(frame); 3800 myHostImpl->drawLayers(frame);
3801 myHostImpl->didDrawAllLayers(frame); 3801 myHostImpl->didDrawAllLayers(frame);
3802 } 3802 }
3803 3803
3804 // Change opacity and draw 3804 // Change opacity and draw
3805 surfaceLayerPtr->setOpacity(0.6f); 3805 surfaceLayerPtr->setOpacity(0.6f);
3806 { 3806 {
3807 LayerTreeHostImpl::FrameData frame; 3807 LayerTreeHostImpl::FrameData frame;
3808 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3808 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3809 3809
3810 // Must receive one render pass, as the other one should be culled 3810 // Must receive one render pass, as the other one should be culled
3811 ASSERT_EQ(1U, frame.renderPasses.size()); 3811 ASSERT_EQ(1U, frame.renderPasses.size());
3812 3812
3813 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3813 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3814 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 3814 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
3815 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 3815 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
3816 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3816 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
3817 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3818 3817
3819 myHostImpl->drawLayers(frame); 3818 myHostImpl->drawLayers(frame);
3820 myHostImpl->didDrawAllLayers(frame); 3819 myHostImpl->didDrawAllLayers(frame);
3821 } 3820 }
3822 3821
3823 // Change less benign property and draw - should have contents changed flag 3822 // Change less benign property and draw - should have contents changed flag
3824 surfaceLayerPtr->setStackingOrderChanged(true); 3823 surfaceLayerPtr->setStackingOrderChanged(true);
3825 { 3824 {
3826 LayerTreeHostImpl::FrameData frame; 3825 LayerTreeHostImpl::FrameData frame;
3827 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3826 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3828 3827
3829 // Must receive two render passes, each with one quad 3828 // Must receive two render passes, each with one quad
3830 ASSERT_EQ(2U, frame.renderPasses.size()); 3829 ASSERT_EQ(2U, frame.renderPasses.size());
3831 3830
3832 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3831 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3833 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma terial); 3832 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma terial);
3834 3833
3835 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 3834 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
3836 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 3835 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
3837 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3836 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
3837 ASSERT_TRUE(targetPass);
3838 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3838 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3839 3839
3840 myHostImpl->drawLayers(frame); 3840 myHostImpl->drawLayers(frame);
3841 myHostImpl->didDrawAllLayers(frame); 3841 myHostImpl->didDrawAllLayers(frame);
3842 } 3842 }
3843 3843
3844 // Change opacity again, and evict the cached surface texture. 3844 // Change opacity again, and evict the cached surface texture.
3845 surfaceLayerPtr->setOpacity(0.5f); 3845 surfaceLayerPtr->setOpacity(0.5f);
3846 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures(); 3846 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
3847 3847
3848 // Change opacity and draw 3848 // Change opacity and draw
3849 surfaceLayerPtr->setOpacity(0.6f); 3849 surfaceLayerPtr->setOpacity(0.6f);
3850 { 3850 {
3851 LayerTreeHostImpl::FrameData frame; 3851 LayerTreeHostImpl::FrameData frame;
3852 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3852 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3853 3853
3854 // Must receive two render passes 3854 // Must receive two render passes
3855 ASSERT_EQ(2U, frame.renderPasses.size()); 3855 ASSERT_EQ(2U, frame.renderPasses.size());
3856 3856
3857 // Even though not enough properties changed, the entire thing must be 3857 // Even though not enough properties changed, the entire thing must be
3858 // redrawn as we don't have cached textures 3858 // redrawn as we don't have cached textures
3859 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3859 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3860 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); 3860 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size());
3861 3861
3862 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 3862 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
3863 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 3863 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
3864 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3864 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
3865 ASSERT_TRUE(targetPass);
3865 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); 3866 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3866 3867
3867 // Was our surface evicted? 3868 // Was our surface evicted?
3868 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id)); 3869 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id));
3869 3870
3870 myHostImpl->drawLayers(frame); 3871 myHostImpl->drawLayers(frame);
3871 myHostImpl->didDrawAllLayers(frame); 3872 myHostImpl->didDrawAllLayers(frame);
3872 } 3873 }
3873 3874
3874 // Draw without any change, to make sure the state is clear 3875 // Draw without any change, to make sure the state is clear
3875 { 3876 {
3876 LayerTreeHostImpl::FrameData frame; 3877 LayerTreeHostImpl::FrameData frame;
3877 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3878 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3878 3879
3879 // Must receive one render pass, as the other one should be culled 3880 // Must receive one render pass, as the other one should be culled
3880 ASSERT_EQ(1U, frame.renderPasses.size()); 3881 ASSERT_EQ(1U, frame.renderPasses.size());
3881 3882
3882 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3883 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3883 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 3884 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
3884 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 3885 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
3885 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3886 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
3886 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3887 3887
3888 myHostImpl->drawLayers(frame); 3888 myHostImpl->drawLayers(frame);
3889 myHostImpl->didDrawAllLayers(frame); 3889 myHostImpl->didDrawAllLayers(frame);
3890 } 3890 }
3891 3891
3892 // Change location of the intermediate layer 3892 // Change location of the intermediate layer
3893 gfx::Transform transform = intermediateLayerPtr->transform(); 3893 gfx::Transform transform = intermediateLayerPtr->transform();
3894 transform.matrix().setDouble(0, 3, 1.0001); 3894 transform.matrix().setDouble(0, 3, 1.0001);
3895 intermediateLayerPtr->setTransform(transform); 3895 intermediateLayerPtr->setTransform(transform);
3896 { 3896 {
3897 LayerTreeHostImpl::FrameData frame; 3897 LayerTreeHostImpl::FrameData frame;
3898 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3898 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3899 3899
3900 // Must receive one render pass, as the other one should be culled. 3900 // Must receive one render pass, as the other one should be culled.
3901 ASSERT_EQ(1U, frame.renderPasses.size()); 3901 ASSERT_EQ(1U, frame.renderPasses.size());
3902 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3902 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3903 3903
3904 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 3904 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
3905 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 3905 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
3906 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3906 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
3907 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3908 3907
3909 myHostImpl->drawLayers(frame); 3908 myHostImpl->drawLayers(frame);
3910 myHostImpl->didDrawAllLayers(frame); 3909 myHostImpl->didDrawAllLayers(frame);
3911 } 3910 }
3912 } 3911 }
3913 3912
3914 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) 3913 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap)
3915 { 3914 {
3916 LayerTreeSettings settings; 3915 LayerTreeSettings settings;
3917 settings.minimumOcclusionTrackingSize = gfx::Size(); 3916 settings.minimumOcclusionTrackingSize = gfx::Size();
(...skipping 10 matching lines...) Expand all
3928 LayerTreeHostImpl::FrameData frame; 3927 LayerTreeHostImpl::FrameData frame;
3929 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3928 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3930 3929
3931 // Must receive two render passes, each with one quad 3930 // Must receive two render passes, each with one quad
3932 ASSERT_EQ(2U, frame.renderPasses.size()); 3931 ASSERT_EQ(2U, frame.renderPasses.size());
3933 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3932 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3934 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); 3933 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size());
3935 3934
3936 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 3935 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
3937 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 3936 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
3938 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3937 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
3939 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3938 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3940 3939
3941 EXPECT_FALSE(frame.renderPasses[0]->damage_rect.IsEmpty()); 3940 EXPECT_FALSE(frame.renderPasses[0]->damage_rect.IsEmpty());
3942 EXPECT_FALSE(frame.renderPasses[1]->damage_rect.IsEmpty()); 3941 EXPECT_FALSE(frame.renderPasses[1]->damage_rect.IsEmpty());
3943 3942
3944 EXPECT_FALSE(frame.renderPasses[0]->has_occlusion_from_outside_target_su rface); 3943 EXPECT_FALSE(frame.renderPasses[0]->has_occlusion_from_outside_target_su rface);
3945 EXPECT_FALSE(frame.renderPasses[1]->has_occlusion_from_outside_target_su rface); 3944 EXPECT_FALSE(frame.renderPasses[1]->has_occlusion_from_outside_target_su rface);
3946 3945
3947 myHostImpl->drawLayers(frame); 3946 myHostImpl->drawLayers(frame);
3948 myHostImpl->didDrawAllLayers(frame); 3947 myHostImpl->didDrawAllLayers(frame);
(...skipping 21 matching lines...) Expand all
3970 { 3969 {
3971 LayerTreeHostImpl::FrameData frame; 3970 LayerTreeHostImpl::FrameData frame;
3972 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3971 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3973 3972
3974 // Must receive one render pass, as the other one should be culled 3973 // Must receive one render pass, as the other one should be culled
3975 ASSERT_EQ(1U, frame.renderPasses.size()); 3974 ASSERT_EQ(1U, frame.renderPasses.size());
3976 3975
3977 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3976 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3978 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 3977 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
3979 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 3978 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
3980 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3979 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
3981 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3982 3980
3983 myHostImpl->drawLayers(frame); 3981 myHostImpl->drawLayers(frame);
3984 myHostImpl->didDrawAllLayers(frame); 3982 myHostImpl->didDrawAllLayers(frame);
3985 } 3983 }
3986 3984
3987 // Change less benign property and draw - should have contents changed flag 3985 // Change less benign property and draw - should have contents changed flag
3988 surfaceLayerPtr->setStackingOrderChanged(true); 3986 surfaceLayerPtr->setStackingOrderChanged(true);
3989 { 3987 {
3990 LayerTreeHostImpl::FrameData frame; 3988 LayerTreeHostImpl::FrameData frame;
3991 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3989 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3992 3990
3993 // Must receive two render passes, each with one quad 3991 // Must receive two render passes, each with one quad
3994 ASSERT_EQ(2U, frame.renderPasses.size()); 3992 ASSERT_EQ(2U, frame.renderPasses.size());
3995 3993
3996 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 3994 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
3997 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma terial); 3995 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma terial);
3998 3996
3999 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 3997 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
4000 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 3998 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
4001 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 3999 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
4000 ASSERT_TRUE(targetPass);
4002 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 4001 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
4003 4002
4004 myHostImpl->drawLayers(frame); 4003 myHostImpl->drawLayers(frame);
4005 myHostImpl->didDrawAllLayers(frame); 4004 myHostImpl->didDrawAllLayers(frame);
4006 } 4005 }
4007 4006
4008 // Change opacity again, and evict the cached surface texture. 4007 // Change opacity again, and evict the cached surface texture.
4009 surfaceLayerPtr->setOpacity(0.5f); 4008 surfaceLayerPtr->setOpacity(0.5f);
4010 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures(); 4009 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
4011 4010
4012 // Change opacity and draw 4011 // Change opacity and draw
4013 surfaceLayerPtr->setOpacity(0.6f); 4012 surfaceLayerPtr->setOpacity(0.6f);
4014 { 4013 {
4015 LayerTreeHostImpl::FrameData frame; 4014 LayerTreeHostImpl::FrameData frame;
4016 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4015 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4017 4016
4018 // Must receive two render passes 4017 // Must receive two render passes
4019 ASSERT_EQ(2U, frame.renderPasses.size()); 4018 ASSERT_EQ(2U, frame.renderPasses.size());
4020 4019
4021 // Even though not enough properties changed, the entire thing must be 4020 // Even though not enough properties changed, the entire thing must be
4022 // redrawn as we don't have cached textures 4021 // redrawn as we don't have cached textures
4023 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 4022 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
4024 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); 4023 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size());
4025 4024
4026 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial); 4025 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
4027 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]); 4026 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
4028 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 4027 RenderPass* targetPass = frame.renderPassesById[quad->render_pass_id];
4028 ASSERT_TRUE(targetPass);
4029 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); 4029 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
4030 4030
4031 // Was our surface evicted? 4031 // Was our surface evicted?
4032 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id)); 4032 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id));
4033 4033
4034 myHostImpl->drawLayers(frame); 4034 myHostImpl->drawLayers(frame);
4035 myHostImpl->didDrawAllLayers(frame); 4035 myHostImpl->didDrawAllLayers(frame);
4036 } 4036 }
4037 4037
4038 // Draw without any change, to make sure the state is clear 4038 // Draw without any change, to make sure the state is clear
(...skipping 18 matching lines...) Expand all
4057 { 4057 {
4058 LayerTreeHostImpl::FrameData frame; 4058 LayerTreeHostImpl::FrameData frame;
4059 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4059 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4060 4060
4061 // Must receive one render pass, as the other one should be culled. 4061 // Must receive one render pass, as the other one should be culled.
4062 ASSERT_EQ(1U, frame.renderPasses.size()); 4062 ASSERT_EQ(1U, frame.renderPasses.size());
4063 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); 4063 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size());
4064 4064
4065 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial); 4065 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma terial);
4066 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]); 4066 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quad_list[0]);
4067 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id ); 4067 EXPECT_TRUE(frame.renderPassesById.find(quad->render_pass_id) == frame.r enderPassesById.end());
4068 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
4069 4068
4070 myHostImpl->drawLayers(frame); 4069 myHostImpl->drawLayers(frame);
4071 myHostImpl->didDrawAllLayers(frame); 4070 myHostImpl->didDrawAllLayers(frame);
4072 } 4071 }
4073 } 4072 }
4074 4073
4075 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 4074 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
4076 { 4075 {
4077 setReduceMemoryResult(false); 4076 setReduceMemoryResult(false);
4078 4077
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
4216 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId); 4215 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId);
4217 4216
4218 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); 4217 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create();
4219 pass->SetNew(newRenderPassId, gfx::Rect(), gfx::Rect(), gfx: :Transform()); 4218 pass->SetNew(newRenderPassId, gfx::Rect(), gfx::Rect(), gfx: :Transform());
4220 testData.renderPassCache.add(newRenderPassId, pass.Pass()); 4219 testData.renderPassCache.add(newRenderPassId, pass.Pass());
4221 } 4220 }
4222 4221
4223 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1); 4222 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1);
4224 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx ::Rect(); 4223 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx ::Rect();
4225 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create (); 4224 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create ();
4226 quad->SetNew(testData.sharedQuadState.get(), quadRect, newRender PassId, isReplica, 1, contentsChangedRect, gfx::RectF(0, 0, 1, 1)); 4225 quad->SetNew(testData.sharedQuadState.get(), quadRect, newRender PassId, isReplica, 1, contentsChangedRect, gfx::RectF(0, 0, 1, 1), WebKit::WebFi lterOperations(), skia::RefPtr<SkImageFilter>(), WebKit::WebFilterOperations());
4227 renderPass->AppendQuad(quad.PassAs<DrawQuad>()); 4226 renderPass->AppendQuad(quad.PassAs<DrawQuad>());
4228 } 4227 }
4229 } 4228 }
4230 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g et()); 4229 testData.renderPassesById[renderPassId] = renderPass.get();
4231 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass >()); 4230 testData.renderPasses.insert(0, renderPass.PassAs<RenderPass>());
4232 if (*currentChar) 4231 if (*currentChar)
4233 currentChar++; 4232 currentChar++;
4234 } 4233 }
4235 } 4234 }
4236 4235
4237 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer) 4236 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer)
4238 { 4237 {
4239 char* pos = buffer; 4238 char* pos = buffer;
4240 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi n(); it != testData.renderPasses.rend(); ++it) { 4239 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi n(); it != testData.renderPasses.rend(); ++it) {
4241 const RenderPass* currentPass = *it; 4240 const RenderPass* currentPass = *it;
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
4813 WebKit::WebGraphicsContext3D::Attributes attrs; 4812 WebKit::WebGraphicsContext3D::Attributes attrs;
4814 return FakeOutputSurface::CreateDelegating3d(FakeWebGraphicsContext3D::C reate(attrs).PassAs<WebKit::WebGraphicsContext3D>()).PassAs<OutputSurface>(); 4813 return FakeOutputSurface::CreateDelegating3d(FakeWebGraphicsContext3D::C reate(attrs).PassAs<WebKit::WebGraphicsContext3D>()).PassAs<OutputSurface>();
4815 } 4814 }
4816 4815
4817 void drawFrameAndTestDamage(const gfx::RectF& expectedDamage) { 4816 void drawFrameAndTestDamage(const gfx::RectF& expectedDamage) {
4818 LayerTreeHostImpl::FrameData frame; 4817 LayerTreeHostImpl::FrameData frame;
4819 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 4818 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
4820 ASSERT_EQ(1u, frame.renderPasses.size()); 4819 ASSERT_EQ(1u, frame.renderPasses.size());
4821 4820
4822 // Verify the damage rect for the root render pass. 4821 // Verify the damage rect for the root render pass.
4823 const RenderPass* rootRenderPass = frame.renderPasses.back(); 4822 const RenderPass* rootRenderPass = frame.renderPasses.last();
4824 EXPECT_RECT_EQ(expectedDamage, rootRenderPass->damage_rect); 4823 EXPECT_RECT_EQ(expectedDamage, rootRenderPass->damage_rect);
4825 4824
4826 // Verify the root layer's quad is generated and not being culled. 4825 // Verify the root layer's quad is generated and not being culled.
4827 ASSERT_EQ(1u, rootRenderPass->quad_list.size()); 4826 ASSERT_EQ(1u, rootRenderPass->quad_list.size());
4828 gfx::Rect expectedVisibleRect(m_hostImpl->rootLayer()->contentBounds()); 4827 gfx::Rect expectedVisibleRect(m_hostImpl->rootLayer()->contentBounds());
4829 EXPECT_RECT_EQ(expectedVisibleRect, rootRenderPass->quad_list[0]->visibl e_rect); 4828 EXPECT_RECT_EQ(expectedVisibleRect, rootRenderPass->quad_list[0]->visibl e_rect);
4830 4829
4831 m_hostImpl->drawLayers(frame); 4830 m_hostImpl->drawLayers(frame);
4832 m_hostImpl->didDrawAllLayers(frame); 4831 m_hostImpl->didDrawAllLayers(frame);
4833 } 4832 }
4834 }; 4833 };
4835 4834
4836 TEST_P(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) 4835 TEST_P(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect)
4837 { 4836 {
4838 // Draw a frame. In the first frame, the entire viewport should be damaged. 4837 // Draw a frame. In the first frame, the entire viewport should be damaged.
4839 gfx::Rect fullFrameDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); 4838 gfx::Rect fullFrameDamage = gfx::Rect(m_hostImpl->deviceViewportSize());
4840 drawFrameAndTestDamage(fullFrameDamage); 4839 drawFrameAndTestDamage(fullFrameDamage);
4841 4840
4842 // The second frame should have no damage, but the quads should still be gen erated. 4841 // The second frame should have no damage, but the quads should still be gen erated.
4843 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); 4842 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize());
4844 drawFrameAndTestDamage(noDamage); 4843 drawFrameAndTestDamage(noDamage);
4845 } 4844 }
4846 4845
4847 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, 4846 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests,
4848 LayerTreeHostImplTest, 4847 LayerTreeHostImplTest,
4849 ::testing::Values(false, true)); 4848 ::testing::Values(false, true));
4850 4849
4851 } // namespace 4850 } // namespace
4852 } // namespace cc 4851 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/render_pass.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698