Chromium Code Reviews| Index: cc/layers/delegated_renderer_layer_impl_unittest.cc |
| diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc |
| index 401ac3cd67b54a10ea5d798be224feaa6000648b..a53daebc9049a74d53d2ec00c19b59534948c730 100644 |
| --- a/cc/layers/delegated_renderer_layer_impl_unittest.cc |
| +++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc |
| @@ -1245,5 +1245,59 @@ TEST_F(DelegatedRendererLayerImplTestClip, QuadsClipped_LayerClipped_Surface) { |
| host_impl_->DidDrawAllLayers(frame); |
| } |
| +TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) { |
| + scoped_ptr<LayerImpl> root_layer = SolidColorLayerImpl::Create( |
| + host_impl_->active_tree(), 1).PassAs<LayerImpl>(); |
|
piman
2013/09/04 19:03:12
nit: this one doesn't draw content, right? Should
danakj
2013/09/05 16:46:55
Oh, ya. That's a great idea. Thank you.
|
| + scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = |
| + FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); |
| + |
| + host_impl_->SetViewportSize(gfx::Size(100, 100)); |
| + root_layer->SetBounds(gfx::Size(100, 100)); |
| + |
| + delegated_renderer_layer->SetPosition(gfx::Point(3, 3)); |
| + delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); |
| + delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10)); |
| + delegated_renderer_layer->SetDrawsContent(true); |
| + |
| + ScopedPtrVector<RenderPass> delegated_render_passes; |
| + TestRenderPass* pass1 = AddRenderPass( |
| + &delegated_render_passes, |
| + RenderPass::Id(9, 6), |
| + gfx::Rect(0, 0, 10, 10), |
| + gfx::Transform()); |
| + AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); |
| + |
| + // This render pass isn't part of the frame. |
| + scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create()); |
| + missing_pass->SetNew(RenderPass::Id(9, 7), |
| + gfx::Rect(7, 7, 7, 7), |
| + gfx::Rect(7, 7, 7, 7), |
| + gfx::Transform()); |
| + |
| + // But a render pass quad refers to it. |
| + AddRenderPassQuad(pass1, missing_pass.get()); |
| + |
| + delegated_renderer_layer->SetFrameDataForRenderPasses( |
| + &delegated_render_passes); |
| + |
| + // The RenderPasses should be taken by the layer. |
| + EXPECT_EQ(0u, delegated_render_passes.size()); |
| + |
| + root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); |
| + host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
| + |
| + LayerTreeHostImpl::FrameData frame; |
| + EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| + |
| + // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad. |
| + ASSERT_EQ(1u, frame.render_passes.size()); |
| + ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| + EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| + frame.render_passes[0]->quad_list[0]->material); |
| + |
| + host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| + host_impl_->DidDrawAllLayers(frame); |
| +} |
| + |
| } // namespace |
| } // namespace cc |