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

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 11411050: cc: Make the DrawQuad subclasses into struct-like classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 1 month 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/nine_patch_layer_impl.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 "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 1584 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 { 1595 {
1596 m_quadsAppended = true; 1596 m_quadsAppended = true;
1597 1597
1598 gfx::Rect opaqueRect; 1598 gfx::Rect opaqueRect;
1599 if (contentsOpaque()) 1599 if (contentsOpaque())
1600 opaqueRect = m_quadRect; 1600 opaqueRect = m_quadRect;
1601 else 1601 else
1602 opaqueRect = m_opaqueContentRect; 1602 opaqueRect = m_opaqueContentRect;
1603 1603
1604 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState()); 1604 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState());
1605 scoped_ptr<TileDrawQuad> testBlendingDrawQuad = TileDrawQuad::create(sha redQuadState, m_quadRect, opaqueRect, m_resourceId, gfx::RectF(0, 0, 1, 1), gfx: :Size(1, 1), false, false, false, false, false); 1605 scoped_ptr<TileDrawQuad> testBlendingDrawQuad = TileDrawQuad::Create();
1606 testBlendingDrawQuad->SetNew(sharedQuadState, m_quadRect, opaqueRect, m_ resourceId, gfx::RectF(0, 0, 1, 1), gfx::Size(1, 1), false, false, false, false, false);
1606 testBlendingDrawQuad->visible_rect = m_quadVisibleRect; 1607 testBlendingDrawQuad->visible_rect = m_quadVisibleRect;
1607 EXPECT_EQ(m_blend, testBlendingDrawQuad->ShouldDrawWithBlending()); 1608 EXPECT_EQ(m_blend, testBlendingDrawQuad->ShouldDrawWithBlending());
1608 EXPECT_EQ(m_hasRenderSurface, !!renderSurface()); 1609 EXPECT_EQ(m_hasRenderSurface, !!renderSurface());
1609 quadSink.append(testBlendingDrawQuad.PassAs<DrawQuad>(), appendQuadsData ); 1610 quadSink.append(testBlendingDrawQuad.PassAs<DrawQuad>(), appendQuadsData );
1610 } 1611 }
1611 1612
1612 void setExpectation(bool blend, bool hasRenderSurface) 1613 void setExpectation(bool blend, bool hasRenderSurface)
1613 { 1614 {
1614 m_blend = blend; 1615 m_blend = blend;
1615 m_hasRenderSurface = hasRenderSurface; 1616 m_hasRenderSurface = hasRenderSurface;
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 class FakeLayerWithQuads : public LayerImpl { 2099 class FakeLayerWithQuads : public LayerImpl {
2099 public: 2100 public:
2100 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew FakeLayerWithQuads(id)); } 2101 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew FakeLayerWithQuads(id)); }
2101 2102
2102 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat a) OVERRIDE 2103 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat a) OVERRIDE
2103 { 2104 {
2104 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState()); 2105 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState());
2105 2106
2106 SkColor gray = SkColorSetRGB(100, 100, 100); 2107 SkColor gray = SkColorSetRGB(100, 100, 100);
2107 gfx::Rect quadRect(gfx::Point(0, 0), contentBounds()); 2108 gfx::Rect quadRect(gfx::Point(0, 0), contentBounds());
2108 scoped_ptr<SolidColorDrawQuad> myQuad = SolidColorDrawQuad::create(share dQuadState, quadRect, gray); 2109 scoped_ptr<SolidColorDrawQuad> myQuad = SolidColorDrawQuad::Create();
2110 myQuad->SetNew(sharedQuadState, quadRect, gray);
2109 quadSink.append(myQuad.PassAs<DrawQuad>(), appendQuadsData); 2111 quadSink.append(myQuad.PassAs<DrawQuad>(), appendQuadsData);
2110 } 2112 }
2111 2113
2112 private: 2114 private:
2113 FakeLayerWithQuads(int id) 2115 FakeLayerWithQuads(int id)
2114 : LayerImpl(id) 2116 : LayerImpl(id)
2115 { 2117 {
2116 } 2118 }
2117 }; 2119 };
2118 2120
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
2707 { 2709 {
2708 } 2710 }
2709 }; 2711 };
2710 2712
2711 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid er* provider) 2713 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid er* provider)
2712 { 2714 {
2713 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); 2715 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny);
2714 2716
2715 scoped_ptr<TestRenderPass> pass = TestRenderPass::create(RenderPass::Id(1, 1 ), gfx::Rect(0, 0, 1, 1), WebTransformationMatrix()); 2717 scoped_ptr<TestRenderPass> pass = TestRenderPass::create(RenderPass::Id(1, 1 ), gfx::Rect(0, 0, 1, 1), WebTransformationMatrix());
2716 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::create(WebTransfo rmationMatrix(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), 1); 2718 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::create(WebTransfo rmationMatrix(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), 1);
2717 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::create(sharedState.get() , gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), resourceId, false, gfx::RectF(0, 0, 1, 1), false); 2719 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
2720 quad->SetNew(sharedState.get(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1) , resourceId, false, gfx::RectF(0, 0, 1, 1), false);
2718 2721
2719 pass->appendSharedQuadState(sharedState.Pass()); 2722 pass->appendSharedQuadState(sharedState.Pass());
2720 pass->appendQuad(quad.PassAs<DrawQuad>()); 2723 pass->appendQuad(quad.PassAs<DrawQuad>());
2721 2724
2722 return pass.PassAs<RenderPass>(); 2725 return pass.PassAs<RenderPass>();
2723 } 2726 }
2724 2727
2725 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) 2728 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext)
2726 { 2729 {
2727 int layerId = 1; 2730 int layerId = 1;
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
3151 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->visibl e_rect; 3154 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->visibl e_rect;
3152 EXPECT_LT(quadVisibleRect.width(), 100); 3155 EXPECT_LT(quadVisibleRect.width(), 100);
3153 3156
3154 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->visible_rect; 3157 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->visible_rect;
3155 EXPECT_LT(quadVisibleRect.width(), 100); 3158 EXPECT_LT(quadVisibleRect.width(), 100);
3156 3159
3157 // Verify that the render surface texture is *not* clipped. 3160 // Verify that the render surface texture is *not* clipped.
3158 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->outputR ect()); 3161 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->outputR ect());
3159 3162
3160 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 3163 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
3161 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 3164 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
3162 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().IsEmpty()); 3165 EXPECT_FALSE(quad->contents_changed_since_last_frame.IsEmpty());
3163 3166
3164 myHostImpl->drawLayers(frame); 3167 myHostImpl->drawLayers(frame);
3165 myHostImpl->didDrawAllLayers(frame); 3168 myHostImpl->didDrawAllLayers(frame);
3166 } 3169 }
3167 3170
3168 transform = surfaceLayerPtr->transform(); 3171 transform = surfaceLayerPtr->transform();
3169 transform.translate(50, 50); 3172 transform.translate(50, 50);
3170 transform.rotate(-35); 3173 transform.rotate(-35);
3171 transform.translate(-50, -50); 3174 transform.translate(-50, -50);
3172 surfaceLayerPtr->setTransform(transform); 3175 surfaceLayerPtr->setTransform(transform);
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
3809 { 3812 {
3810 LayerTreeHostImpl::FrameData frame; 3813 LayerTreeHostImpl::FrameData frame;
3811 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3814 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3812 3815
3813 // Must receive two render passes, each with one quad 3816 // Must receive two render passes, each with one quad
3814 ASSERT_EQ(2U, frame.renderPasses.size()); 3817 ASSERT_EQ(2U, frame.renderPasses.size());
3815 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3818 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3816 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3819 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3817 3820
3818 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 3821 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
3819 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 3822 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
3820 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3823 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3821 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); 3824 EXPECT_FALSE(targetPass->damageRect().IsEmpty());
3822 3825
3823 myHostImpl->drawLayers(frame); 3826 myHostImpl->drawLayers(frame);
3824 myHostImpl->didDrawAllLayers(frame); 3827 myHostImpl->didDrawAllLayers(frame);
3825 } 3828 }
3826 3829
3827 // Draw without any change 3830 // Draw without any change
3828 { 3831 {
3829 LayerTreeHostImpl::FrameData frame; 3832 LayerTreeHostImpl::FrameData frame;
3830 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3833 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3831 3834
3832 // Must receive one render pass, as the other one should be culled 3835 // Must receive one render pass, as the other one should be culled
3833 ASSERT_EQ(1U, frame.renderPasses.size()); 3836 ASSERT_EQ(1U, frame.renderPasses.size());
3834 3837
3835 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3838 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3836 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 3839 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
3837 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 3840 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
3838 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3841 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3839 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 3842 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
3840 3843
3841 myHostImpl->drawLayers(frame); 3844 myHostImpl->drawLayers(frame);
3842 myHostImpl->didDrawAllLayers(frame); 3845 myHostImpl->didDrawAllLayers(frame);
3843 } 3846 }
3844 3847
3845 // Change opacity and draw 3848 // Change opacity and draw
3846 surfaceLayerPtr->setOpacity(0.6f); 3849 surfaceLayerPtr->setOpacity(0.6f);
3847 { 3850 {
3848 LayerTreeHostImpl::FrameData frame; 3851 LayerTreeHostImpl::FrameData frame;
3849 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3852 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3850 3853
3851 // Must receive one render pass, as the other one should be culled 3854 // Must receive one render pass, as the other one should be culled
3852 ASSERT_EQ(1U, frame.renderPasses.size()); 3855 ASSERT_EQ(1U, frame.renderPasses.size());
3853 3856
3854 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3857 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3855 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 3858 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
3856 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 3859 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
3857 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3860 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3858 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 3861 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
3859 3862
3860 myHostImpl->drawLayers(frame); 3863 myHostImpl->drawLayers(frame);
3861 myHostImpl->didDrawAllLayers(frame); 3864 myHostImpl->didDrawAllLayers(frame);
3862 } 3865 }
3863 3866
3864 // Change less benign property and draw - should have contents changed flag 3867 // Change less benign property and draw - should have contents changed flag
3865 surfaceLayerPtr->setStackingOrderChanged(true); 3868 surfaceLayerPtr->setStackingOrderChanged(true);
3866 { 3869 {
3867 LayerTreeHostImpl::FrameData frame; 3870 LayerTreeHostImpl::FrameData frame;
3868 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3871 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3869 3872
3870 // Must receive two render passes, each with one quad 3873 // Must receive two render passes, each with one quad
3871 ASSERT_EQ(2U, frame.renderPasses.size()); 3874 ASSERT_EQ(2U, frame.renderPasses.size());
3872 3875
3873 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3876 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3874 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m aterial); 3877 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m aterial);
3875 3878
3876 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 3879 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
3877 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 3880 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
3878 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3881 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3879 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); 3882 EXPECT_FALSE(targetPass->damageRect().IsEmpty());
3880 3883
3881 myHostImpl->drawLayers(frame); 3884 myHostImpl->drawLayers(frame);
3882 myHostImpl->didDrawAllLayers(frame); 3885 myHostImpl->didDrawAllLayers(frame);
3883 } 3886 }
3884 3887
3885 // Change opacity again, and evict the cached surface texture. 3888 // Change opacity again, and evict the cached surface texture.
3886 surfaceLayerPtr->setOpacity(0.5f); 3889 surfaceLayerPtr->setOpacity(0.5f);
3887 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures(); 3890 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
3888 3891
3889 // Change opacity and draw 3892 // Change opacity and draw
3890 surfaceLayerPtr->setOpacity(0.6f); 3893 surfaceLayerPtr->setOpacity(0.6f);
3891 { 3894 {
3892 LayerTreeHostImpl::FrameData frame; 3895 LayerTreeHostImpl::FrameData frame;
3893 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3896 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3894 3897
3895 // Must receive two render passes 3898 // Must receive two render passes
3896 ASSERT_EQ(2U, frame.renderPasses.size()); 3899 ASSERT_EQ(2U, frame.renderPasses.size());
3897 3900
3898 // Even though not enough properties changed, the entire thing must be 3901 // Even though not enough properties changed, the entire thing must be
3899 // redrawn as we don't have cached textures 3902 // redrawn as we don't have cached textures
3900 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3903 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3901 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3904 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3902 3905
3903 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 3906 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
3904 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 3907 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
3905 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3908 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3906 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 3909 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
3907 3910
3908 // Was our surface evicted? 3911 // Was our surface evicted?
3909 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id())); 3912 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id()));
3910 3913
3911 myHostImpl->drawLayers(frame); 3914 myHostImpl->drawLayers(frame);
3912 myHostImpl->didDrawAllLayers(frame); 3915 myHostImpl->didDrawAllLayers(frame);
3913 } 3916 }
3914 3917
3915 // Draw without any change, to make sure the state is clear 3918 // Draw without any change, to make sure the state is clear
3916 { 3919 {
3917 LayerTreeHostImpl::FrameData frame; 3920 LayerTreeHostImpl::FrameData frame;
3918 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3921 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3919 3922
3920 // Must receive one render pass, as the other one should be culled 3923 // Must receive one render pass, as the other one should be culled
3921 ASSERT_EQ(1U, frame.renderPasses.size()); 3924 ASSERT_EQ(1U, frame.renderPasses.size());
3922 3925
3923 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3926 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3924 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 3927 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
3925 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 3928 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
3926 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3929 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3927 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 3930 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
3928 3931
3929 myHostImpl->drawLayers(frame); 3932 myHostImpl->drawLayers(frame);
3930 myHostImpl->didDrawAllLayers(frame); 3933 myHostImpl->didDrawAllLayers(frame);
3931 } 3934 }
3932 3935
3933 // Change location of the intermediate layer 3936 // Change location of the intermediate layer
3934 WebTransformationMatrix transform = intermediateLayerPtr->transform(); 3937 WebTransformationMatrix transform = intermediateLayerPtr->transform();
3935 transform.setM41(1.0001); 3938 transform.setM41(1.0001);
3936 intermediateLayerPtr->setTransform(transform); 3939 intermediateLayerPtr->setTransform(transform);
3937 { 3940 {
3938 LayerTreeHostImpl::FrameData frame; 3941 LayerTreeHostImpl::FrameData frame;
3939 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3942 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3940 3943
3941 // Must receive one render pass, as the other one should be culled. 3944 // Must receive one render pass, as the other one should be culled.
3942 ASSERT_EQ(1U, frame.renderPasses.size()); 3945 ASSERT_EQ(1U, frame.renderPasses.size());
3943 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3946 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3944 3947
3945 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 3948 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
3946 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 3949 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
3947 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3950 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3948 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 3951 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
3949 3952
3950 myHostImpl->drawLayers(frame); 3953 myHostImpl->drawLayers(frame);
3951 myHostImpl->didDrawAllLayers(frame); 3954 myHostImpl->didDrawAllLayers(frame);
3952 } 3955 }
3953 } 3956 }
3954 3957
3955 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) 3958 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap)
3956 { 3959 {
3957 LayerTreeSettings settings; 3960 LayerTreeSettings settings;
(...skipping 10 matching lines...) Expand all
3968 { 3971 {
3969 LayerTreeHostImpl::FrameData frame; 3972 LayerTreeHostImpl::FrameData frame;
3970 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3973 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3971 3974
3972 // Must receive two render passes, each with one quad 3975 // Must receive two render passes, each with one quad
3973 ASSERT_EQ(2U, frame.renderPasses.size()); 3976 ASSERT_EQ(2U, frame.renderPasses.size());
3974 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3977 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3975 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3978 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3976 3979
3977 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 3980 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
3978 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 3981 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
3979 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 3982 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
3980 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); 3983 EXPECT_FALSE(targetPass->damageRect().IsEmpty());
3981 3984
3982 EXPECT_FALSE(frame.renderPasses[0]->damageRect().IsEmpty()); 3985 EXPECT_FALSE(frame.renderPasses[0]->damageRect().IsEmpty());
3983 EXPECT_FALSE(frame.renderPasses[1]->damageRect().IsEmpty()); 3986 EXPECT_FALSE(frame.renderPasses[1]->damageRect().IsEmpty());
3984 3987
3985 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface ()); 3988 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface ());
3986 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface ()); 3989 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface ());
3987 3990
3988 myHostImpl->drawLayers(frame); 3991 myHostImpl->drawLayers(frame);
3989 myHostImpl->didDrawAllLayers(frame); 3992 myHostImpl->didDrawAllLayers(frame);
(...skipping 20 matching lines...) Expand all
4010 surfaceLayerPtr->setOpacity(0.6f); 4013 surfaceLayerPtr->setOpacity(0.6f);
4011 { 4014 {
4012 LayerTreeHostImpl::FrameData frame; 4015 LayerTreeHostImpl::FrameData frame;
4013 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4016 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4014 4017
4015 // Must receive one render pass, as the other one should be culled 4018 // Must receive one render pass, as the other one should be culled
4016 ASSERT_EQ(1U, frame.renderPasses.size()); 4019 ASSERT_EQ(1U, frame.renderPasses.size());
4017 4020
4018 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 4021 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
4019 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 4022 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
4020 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 4023 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
4021 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 4024 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
4022 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 4025 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
4023 4026
4024 myHostImpl->drawLayers(frame); 4027 myHostImpl->drawLayers(frame);
4025 myHostImpl->didDrawAllLayers(frame); 4028 myHostImpl->didDrawAllLayers(frame);
4026 } 4029 }
4027 4030
4028 // Change less benign property and draw - should have contents changed flag 4031 // Change less benign property and draw - should have contents changed flag
4029 surfaceLayerPtr->setStackingOrderChanged(true); 4032 surfaceLayerPtr->setStackingOrderChanged(true);
4030 { 4033 {
4031 LayerTreeHostImpl::FrameData frame; 4034 LayerTreeHostImpl::FrameData frame;
4032 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4035 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4033 4036
4034 // Must receive two render passes, each with one quad 4037 // Must receive two render passes, each with one quad
4035 ASSERT_EQ(2U, frame.renderPasses.size()); 4038 ASSERT_EQ(2U, frame.renderPasses.size());
4036 4039
4037 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 4040 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
4038 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m aterial); 4041 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m aterial);
4039 4042
4040 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 4043 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
4041 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 4044 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
4042 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 4045 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
4043 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); 4046 EXPECT_FALSE(targetPass->damageRect().IsEmpty());
4044 4047
4045 myHostImpl->drawLayers(frame); 4048 myHostImpl->drawLayers(frame);
4046 myHostImpl->didDrawAllLayers(frame); 4049 myHostImpl->didDrawAllLayers(frame);
4047 } 4050 }
4048 4051
4049 // Change opacity again, and evict the cached surface texture. 4052 // Change opacity again, and evict the cached surface texture.
4050 surfaceLayerPtr->setOpacity(0.5f); 4053 surfaceLayerPtr->setOpacity(0.5f);
4051 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures(); 4054 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
4052 4055
4053 // Change opacity and draw 4056 // Change opacity and draw
4054 surfaceLayerPtr->setOpacity(0.6f); 4057 surfaceLayerPtr->setOpacity(0.6f);
4055 { 4058 {
4056 LayerTreeHostImpl::FrameData frame; 4059 LayerTreeHostImpl::FrameData frame;
4057 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4060 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4058 4061
4059 // Must receive two render passes 4062 // Must receive two render passes
4060 ASSERT_EQ(2U, frame.renderPasses.size()); 4063 ASSERT_EQ(2U, frame.renderPasses.size());
4061 4064
4062 // Even though not enough properties changed, the entire thing must be 4065 // Even though not enough properties changed, the entire thing must be
4063 // redrawn as we don't have cached textures 4066 // redrawn as we don't have cached textures
4064 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 4067 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
4065 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 4068 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
4066 4069
4067 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial); 4070 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m aterial);
4068 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[1]->quadList()[0]); 4071 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quadList()[0]);
4069 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 4072 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
4070 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 4073 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
4071 4074
4072 // Was our surface evicted? 4075 // Was our surface evicted?
4073 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id())); 4076 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id()));
4074 4077
4075 myHostImpl->drawLayers(frame); 4078 myHostImpl->drawLayers(frame);
4076 myHostImpl->didDrawAllLayers(frame); 4079 myHostImpl->didDrawAllLayers(frame);
4077 } 4080 }
4078 4081
4079 // Draw without any change, to make sure the state is clear 4082 // Draw without any change, to make sure the state is clear
(...skipping 17 matching lines...) Expand all
4097 intermediateLayerPtr->setTransform(transform); 4100 intermediateLayerPtr->setTransform(transform);
4098 { 4101 {
4099 LayerTreeHostImpl::FrameData frame; 4102 LayerTreeHostImpl::FrameData frame;
4100 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4103 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4101 4104
4102 // Must receive one render pass, as the other one should be culled. 4105 // Must receive one render pass, as the other one should be culled.
4103 ASSERT_EQ(1U, frame.renderPasses.size()); 4106 ASSERT_EQ(1U, frame.renderPasses.size());
4104 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 4107 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
4105 4108
4106 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial); 4109 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m aterial);
4107 const RenderPassDrawQuad* quad = RenderPassDrawQuad::materialCast(frame. renderPasses[0]->quadList()[0]); 4110 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[0]->quadList()[0]);
4108 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() ); 4111 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id );
4109 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); 4112 EXPECT_TRUE(targetPass->damageRect().IsEmpty());
4110 4113
4111 myHostImpl->drawLayers(frame); 4114 myHostImpl->drawLayers(frame);
4112 myHostImpl->didDrawAllLayers(frame); 4115 myHostImpl->didDrawAllLayers(frame);
4113 } 4116 }
4114 } 4117 }
4115 4118
4116 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 4119 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
4117 { 4120 {
4118 setReduceMemoryResult(false); 4121 setReduceMemoryResult(false);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
4205 bool isReplica = false; 4208 bool isReplica = false;
4206 if (!testData.renderPassCache.contains(renderPassId)) 4209 if (!testData.renderPassCache.contains(renderPassId))
4207 isReplica = true; 4210 isReplica = true;
4208 4211
4209 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re nderPassId); 4212 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re nderPassId);
4210 4213
4211 // Cycle through quad data and create all quads 4214 // Cycle through quad data and create all quads
4212 while (*currentChar && *currentChar != '\n') { 4215 while (*currentChar && *currentChar != '\n') {
4213 if (*currentChar == 's') { 4216 if (*currentChar == 's') {
4214 // Solid color draw quad 4217 // Solid color draw quad
4215 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::create (testData.sharedQuadState.get(), gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); 4218 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create ();
4219 quad->SetNew(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10, 10), SK_ColorWHITE);
4216 4220
4217 renderPass->appendQuad(quad.PassAs<DrawQuad>()); 4221 renderPass->appendQuad(quad.PassAs<DrawQuad>());
4218 currentChar++; 4222 currentChar++;
4219 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { 4223 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) {
4220 // RenderPass draw quad 4224 // RenderPass draw quad
4221 int layerId = *currentChar; 4225 int layerId = *currentChar;
4222 currentChar++; 4226 currentChar++;
4223 ASSERT_TRUE(currentChar); 4227 ASSERT_TRUE(currentChar);
4224 int index = *currentChar; 4228 int index = *currentChar;
4225 currentChar++; 4229 currentChar++;
(...skipping 21 matching lines...) Expand all
4247 4251
4248 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) { 4252 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) {
4249 if (hasTexture) 4253 if (hasTexture)
4250 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId); 4254 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId);
4251 4255
4252 testData.renderPassCache.add(newRenderPassId, TestRenderPass ::create(newRenderPassId, gfx::Rect(), WebTransformationMatrix())); 4256 testData.renderPassCache.add(newRenderPassId, TestRenderPass ::create(newRenderPassId, gfx::Rect(), WebTransformationMatrix()));
4253 } 4257 }
4254 4258
4255 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1); 4259 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1);
4256 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx ::Rect(); 4260 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx ::Rect();
4257 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0); 4261 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create ();
4262 quad->SetNew(testData.sharedQuadState.get(), quadRect, newRender PassId, isReplica, 1, contentsChangedRect, 1, 1, 0, 0);
4258 renderPass->appendQuad(quad.PassAs<DrawQuad>()); 4263 renderPass->appendQuad(quad.PassAs<DrawQuad>());
4259 } 4264 }
4260 } 4265 }
4261 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g et()); 4266 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g et());
4262 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass >()); 4267 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass >());
4263 if (*currentChar) 4268 if (*currentChar)
4264 currentChar++; 4269 currentChar++;
4265 } 4270 }
4266 } 4271 }
4267 4272
4268 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer) 4273 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer)
4269 { 4274 {
4270 char* pos = buffer; 4275 char* pos = buffer;
4271 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi n(); it != testData.renderPasses.rend(); ++it) { 4276 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi n(); it != testData.renderPasses.rend(); ++it) {
4272 const RenderPass* currentPass = *it; 4277 const RenderPass* currentPass = *it;
4273 *pos = currentPass->id().layerId; 4278 *pos = currentPass->id().layerId;
4274 pos++; 4279 pos++;
4275 *pos = currentPass->id().index; 4280 *pos = currentPass->id().index;
4276 pos++; 4281 pos++;
4277 4282
4278 QuadList::const_iterator quadListIterator = currentPass->quadList().begi n(); 4283 QuadList::const_iterator quadListIterator = currentPass->quadList().begi n();
4279 while (quadListIterator != currentPass->quadList().end()) { 4284 while (quadListIterator != currentPass->quadList().end()) {
4280 DrawQuad* currentQuad = *quadListIterator; 4285 DrawQuad* currentQuad = *quadListIterator;
4281 switch (currentQuad->material) { 4286 switch (currentQuad->material) {
4282 case DrawQuad::SOLID_COLOR: 4287 case DrawQuad::SOLID_COLOR:
4283 *pos = 's'; 4288 *pos = 's';
4284 pos++; 4289 pos++;
4285 break; 4290 break;
4286 case DrawQuad::RENDER_PASS: 4291 case DrawQuad::RENDER_PASS:
4287 *pos = RenderPassDrawQuad::materialCast(currentQuad)->renderPass Id().layerId; 4292 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas s_id.layerId;
4288 pos++; 4293 pos++;
4289 *pos = RenderPassDrawQuad::materialCast(currentQuad)->renderPass Id().index; 4294 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas s_id.index;
4290 pos++; 4295 pos++;
4291 break; 4296 break;
4292 default: 4297 default:
4293 *pos = 'x'; 4298 *pos = 'x';
4294 pos++; 4299 pos++;
4295 break; 4300 break;
4296 } 4301 }
4297 4302
4298 quadListIterator++; 4303 quadListIterator++;
4299 } 4304 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
4468 testCaseIndex++; 4473 testCaseIndex++;
4469 } 4474 }
4470 } 4475 }
4471 4476
4472 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, 4477 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests,
4473 LayerTreeHostImplTest, 4478 LayerTreeHostImplTest,
4474 ::testing::Values(false, true)); 4479 ::testing::Values(false, true));
4475 4480
4476 } // namespace 4481 } // namespace
4477 } // namespace cc 4482 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/nine_patch_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698