| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/delegated_renderer_layer_impl.h" | 5 #include "cc/layers/delegated_renderer_layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/base/scoped_ptr_vector.h" | 7 #include "cc/base/scoped_ptr_vector.h" |
| 8 #include "cc/layers/solid_color_layer_impl.h" | 8 #include "cc/layers/solid_color_layer_impl.h" |
| 9 #include "cc/quads/render_pass_draw_quad.h" | 9 #include "cc/quads/render_pass_draw_quad.h" |
| 10 #include "cc/quads/solid_color_draw_quad.h" | 10 #include "cc/quads/solid_color_draw_quad.h" |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 LayerTreeHostImpl::FrameData frame; | 300 LayerTreeHostImpl::FrameData frame; |
| 301 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 301 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 302 | 302 |
| 303 // Each non-DelegatedRendererLayer added one RenderPass. The | 303 // Each non-DelegatedRendererLayer added one RenderPass. The |
| 304 // DelegatedRendererLayer added two contributing passes. | 304 // DelegatedRendererLayer added two contributing passes. |
| 305 ASSERT_EQ(5u, frame.render_passes.size()); | 305 ASSERT_EQ(5u, frame.render_passes.size()); |
| 306 | 306 |
| 307 // The DelegatedRendererLayer should have added its contributing RenderPasses | 307 // The DelegatedRendererLayer should have added its contributing RenderPasses |
| 308 // to the frame. | 308 // to the frame. |
| 309 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); | 309 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); |
| 310 EXPECT_EQ(1, frame.render_passes[1]->id.index); | 310 EXPECT_EQ(1u, frame.render_passes[1]->id.index); |
| 311 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); | 311 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); |
| 312 EXPECT_EQ(2, frame.render_passes[2]->id.index); | 312 EXPECT_EQ(2u, frame.render_passes[2]->id.index); |
| 313 // And all other RenderPasses should be non-delegated. | 313 // And all other RenderPasses should be non-delegated. |
| 314 EXPECT_NE(4, frame.render_passes[0]->id.layer_id); | 314 EXPECT_NE(4, frame.render_passes[0]->id.layer_id); |
| 315 EXPECT_EQ(0, frame.render_passes[0]->id.index); | 315 EXPECT_EQ(0u, frame.render_passes[0]->id.index); |
| 316 EXPECT_NE(4, frame.render_passes[3]->id.layer_id); | 316 EXPECT_NE(4, frame.render_passes[3]->id.layer_id); |
| 317 EXPECT_EQ(0, frame.render_passes[3]->id.index); | 317 EXPECT_EQ(0u, frame.render_passes[3]->id.index); |
| 318 EXPECT_NE(4, frame.render_passes[4]->id.layer_id); | 318 EXPECT_NE(4, frame.render_passes[4]->id.layer_id); |
| 319 EXPECT_EQ(0, frame.render_passes[4]->id.index); | 319 EXPECT_EQ(0u, frame.render_passes[4]->id.index); |
| 320 | 320 |
| 321 // The DelegatedRendererLayer should have added its RenderPasses to the frame | 321 // The DelegatedRendererLayer should have added its RenderPasses to the frame |
| 322 // in order. | 322 // in order. |
| 323 EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), | 323 EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), |
| 324 frame.render_passes[1]->output_rect.ToString()); | 324 frame.render_passes[1]->output_rect.ToString()); |
| 325 EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), | 325 EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), |
| 326 frame.render_passes[2]->output_rect.ToString()); | 326 frame.render_passes[2]->output_rect.ToString()); |
| 327 | 327 |
| 328 host_impl_->DrawLayers(&frame); | 328 host_impl_->DrawLayers(&frame); |
| 329 host_impl_->DidDrawAllLayers(frame); | 329 host_impl_->DidDrawAllLayers(frame); |
| 330 } | 330 } |
| 331 | 331 |
| 332 TEST_F(DelegatedRendererLayerImplTestSimple, | 332 TEST_F(DelegatedRendererLayerImplTestSimple, |
| 333 AddsQuadsToContributingRenderPasses) { | 333 AddsQuadsToContributingRenderPasses) { |
| 334 LayerTreeHostImpl::FrameData frame; | 334 LayerTreeHostImpl::FrameData frame; |
| 335 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 335 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 336 | 336 |
| 337 // Each non-DelegatedRendererLayer added one RenderPass. The | 337 // Each non-DelegatedRendererLayer added one RenderPass. The |
| 338 // DelegatedRendererLayer added two contributing passes. | 338 // DelegatedRendererLayer added two contributing passes. |
| 339 ASSERT_EQ(5u, frame.render_passes.size()); | 339 ASSERT_EQ(5u, frame.render_passes.size()); |
| 340 | 340 |
| 341 // The DelegatedRendererLayer should have added its contributing RenderPasses | 341 // The DelegatedRendererLayer should have added its contributing RenderPasses |
| 342 // to the frame. | 342 // to the frame. |
| 343 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); | 343 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); |
| 344 EXPECT_EQ(1, frame.render_passes[1]->id.index); | 344 EXPECT_EQ(1u, frame.render_passes[1]->id.index); |
| 345 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); | 345 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); |
| 346 EXPECT_EQ(2, frame.render_passes[2]->id.index); | 346 EXPECT_EQ(2u, frame.render_passes[2]->id.index); |
| 347 | 347 |
| 348 // The DelegatedRendererLayer should have added copies of its quads to | 348 // The DelegatedRendererLayer should have added copies of its quads to |
| 349 // contributing RenderPasses. | 349 // contributing RenderPasses. |
| 350 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); | 350 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); |
| 351 EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), | 351 EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), |
| 352 frame.render_passes[1]->quad_list.front()->rect.ToString()); | 352 frame.render_passes[1]->quad_list.front()->rect.ToString()); |
| 353 | 353 |
| 354 // Verify it added the right quads. | 354 // Verify it added the right quads. |
| 355 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); | 355 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); |
| 356 EXPECT_EQ(gfx::Rect(0, 0, 7, 7).ToString(), | 356 EXPECT_EQ(gfx::Rect(0, 0, 7, 7).ToString(), |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 473 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 474 | 474 |
| 475 // Each non-DelegatedRendererLayer added one RenderPass. The | 475 // Each non-DelegatedRendererLayer added one RenderPass. The |
| 476 // DelegatedRendererLayer added two contributing passes and its owned surface | 476 // DelegatedRendererLayer added two contributing passes and its owned surface |
| 477 // added one pass. | 477 // added one pass. |
| 478 ASSERT_EQ(6u, frame.render_passes.size()); | 478 ASSERT_EQ(6u, frame.render_passes.size()); |
| 479 | 479 |
| 480 // The DelegatedRendererLayer should have added its contributing RenderPasses | 480 // The DelegatedRendererLayer should have added its contributing RenderPasses |
| 481 // to the frame. | 481 // to the frame. |
| 482 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); | 482 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); |
| 483 EXPECT_EQ(1, frame.render_passes[1]->id.index); | 483 EXPECT_EQ(1u, frame.render_passes[1]->id.index); |
| 484 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); | 484 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); |
| 485 EXPECT_EQ(2, frame.render_passes[2]->id.index); | 485 EXPECT_EQ(2u, frame.render_passes[2]->id.index); |
| 486 // The DelegatedRendererLayer should have added a RenderPass for its surface | 486 // The DelegatedRendererLayer should have added a RenderPass for its surface |
| 487 // to the frame. | 487 // to the frame. |
| 488 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); | 488 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); |
| 489 EXPECT_EQ(0, frame.render_passes[3]->id.index); | 489 EXPECT_EQ(0u, frame.render_passes[3]->id.index); |
| 490 // And all other RenderPasses should be non-delegated. | 490 // And all other RenderPasses should be non-delegated. |
| 491 EXPECT_NE(4, frame.render_passes[0]->id.layer_id); | 491 EXPECT_NE(4, frame.render_passes[0]->id.layer_id); |
| 492 EXPECT_EQ(0, frame.render_passes[0]->id.index); | 492 EXPECT_EQ(0u, frame.render_passes[0]->id.index); |
| 493 EXPECT_NE(4, frame.render_passes[4]->id.layer_id); | 493 EXPECT_NE(4, frame.render_passes[4]->id.layer_id); |
| 494 EXPECT_EQ(0, frame.render_passes[4]->id.index); | 494 EXPECT_EQ(0u, frame.render_passes[4]->id.index); |
| 495 EXPECT_NE(4, frame.render_passes[5]->id.layer_id); | 495 EXPECT_NE(4, frame.render_passes[5]->id.layer_id); |
| 496 EXPECT_EQ(0, frame.render_passes[5]->id.index); | 496 EXPECT_EQ(0u, frame.render_passes[5]->id.index); |
| 497 | 497 |
| 498 // The DelegatedRendererLayer should have added its RenderPasses to the frame | 498 // The DelegatedRendererLayer should have added its RenderPasses to the frame |
| 499 // in order. | 499 // in order. |
| 500 EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), | 500 EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), |
| 501 frame.render_passes[1]->output_rect.ToString()); | 501 frame.render_passes[1]->output_rect.ToString()); |
| 502 EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), | 502 EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), |
| 503 frame.render_passes[2]->output_rect.ToString()); | 503 frame.render_passes[2]->output_rect.ToString()); |
| 504 | 504 |
| 505 host_impl_->DrawLayers(&frame); | 505 host_impl_->DrawLayers(&frame); |
| 506 host_impl_->DidDrawAllLayers(frame); | 506 host_impl_->DidDrawAllLayers(frame); |
| 507 } | 507 } |
| 508 | 508 |
| 509 TEST_F(DelegatedRendererLayerImplTestOwnSurface, | 509 TEST_F(DelegatedRendererLayerImplTestOwnSurface, |
| 510 AddsQuadsToContributingRenderPasses) { | 510 AddsQuadsToContributingRenderPasses) { |
| 511 LayerTreeHostImpl::FrameData frame; | 511 LayerTreeHostImpl::FrameData frame; |
| 512 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 512 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 513 | 513 |
| 514 // Each non-DelegatedRendererLayer added one RenderPass. The | 514 // Each non-DelegatedRendererLayer added one RenderPass. The |
| 515 // DelegatedRendererLayer added two contributing passes and its owned surface | 515 // DelegatedRendererLayer added two contributing passes and its owned surface |
| 516 // added one pass. | 516 // added one pass. |
| 517 ASSERT_EQ(6u, frame.render_passes.size()); | 517 ASSERT_EQ(6u, frame.render_passes.size()); |
| 518 | 518 |
| 519 // The DelegatedRendererLayer should have added its contributing RenderPasses | 519 // The DelegatedRendererLayer should have added its contributing RenderPasses |
| 520 // to the frame. | 520 // to the frame. |
| 521 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); | 521 EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); |
| 522 EXPECT_EQ(1, frame.render_passes[1]->id.index); | 522 EXPECT_EQ(1u, frame.render_passes[1]->id.index); |
| 523 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); | 523 EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); |
| 524 EXPECT_EQ(2, frame.render_passes[2]->id.index); | 524 EXPECT_EQ(2u, frame.render_passes[2]->id.index); |
| 525 | 525 |
| 526 // The DelegatedRendererLayer should have added copies of its quads to | 526 // The DelegatedRendererLayer should have added copies of its quads to |
| 527 // contributing RenderPasses. | 527 // contributing RenderPasses. |
| 528 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); | 528 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); |
| 529 EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), | 529 EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), |
| 530 frame.render_passes[1]->quad_list.front()->rect.ToString()); | 530 frame.render_passes[1]->quad_list.front()->rect.ToString()); |
| 531 | 531 |
| 532 // Verify it added the right quads. | 532 // Verify it added the right quads. |
| 533 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); | 533 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); |
| 534 | 534 |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 } | 748 } |
| 749 | 749 |
| 750 void VerifyRenderPasses( | 750 void VerifyRenderPasses( |
| 751 const LayerTreeHostImpl::FrameData& frame, | 751 const LayerTreeHostImpl::FrameData& frame, |
| 752 size_t num_render_passes, | 752 size_t num_render_passes, |
| 753 const SharedQuadState** root_delegated_shared_quad_state, | 753 const SharedQuadState** root_delegated_shared_quad_state, |
| 754 const SharedQuadState** contrib_delegated_shared_quad_state) { | 754 const SharedQuadState** contrib_delegated_shared_quad_state) { |
| 755 ASSERT_EQ(num_render_passes, frame.render_passes.size()); | 755 ASSERT_EQ(num_render_passes, frame.render_passes.size()); |
| 756 // The contributing render pass in the DelegatedRendererLayer. | 756 // The contributing render pass in the DelegatedRendererLayer. |
| 757 EXPECT_EQ(2, frame.render_passes[0]->id.layer_id); | 757 EXPECT_EQ(2, frame.render_passes[0]->id.layer_id); |
| 758 EXPECT_EQ(1, frame.render_passes[0]->id.index); | 758 EXPECT_EQ(1u, frame.render_passes[0]->id.index); |
| 759 // The root render pass. | 759 // The root render pass. |
| 760 EXPECT_EQ(1, frame.render_passes.back()->id.layer_id); | 760 EXPECT_EQ(1, frame.render_passes.back()->id.layer_id); |
| 761 EXPECT_EQ(0, frame.render_passes.back()->id.index); | 761 EXPECT_EQ(0u, frame.render_passes.back()->id.index); |
| 762 | 762 |
| 763 const QuadList& contrib_delegated_quad_list = | 763 const QuadList& contrib_delegated_quad_list = |
| 764 frame.render_passes[0]->quad_list; | 764 frame.render_passes[0]->quad_list; |
| 765 ASSERT_EQ(2u, contrib_delegated_quad_list.size()); | 765 ASSERT_EQ(2u, contrib_delegated_quad_list.size()); |
| 766 | 766 |
| 767 const QuadList& root_delegated_quad_list = | 767 const QuadList& root_delegated_quad_list = |
| 768 frame.render_passes[1]->quad_list; | 768 frame.render_passes[1]->quad_list; |
| 769 ASSERT_EQ(5u, root_delegated_quad_list.size()); | 769 ASSERT_EQ(5u, root_delegated_quad_list.size()); |
| 770 | 770 |
| 771 // All quads in a render pass should share the same state. | 771 // All quads in a render pass should share the same state. |
| (...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1693 scoped_ptr<DelegatedRendererLayerImpl> other_layer = | 1693 scoped_ptr<DelegatedRendererLayerImpl> other_layer = |
| 1694 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); | 1694 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); |
| 1695 | 1695 |
| 1696 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); | 1696 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); |
| 1697 | 1697 |
| 1698 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); | 1698 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); |
| 1699 } | 1699 } |
| 1700 | 1700 |
| 1701 } // namespace | 1701 } // namespace |
| 1702 } // namespace cc | 1702 } // namespace cc |
| OLD | NEW |