| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/base/scoped_ptr_vector.h" | 5 #include "cc/base/scoped_ptr_vector.h" |
| 6 #include "cc/output/compositor_frame_metadata.h" | 6 #include "cc/output/compositor_frame_metadata.h" |
| 7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
| 8 #include "cc/output/output_surface.h" | 8 #include "cc/output/output_surface.h" |
| 9 #include "cc/output/output_surface_client.h" | 9 #include "cc/output/output_surface_client.h" |
| 10 #include "cc/output/overlay_candidate_validator.h" | 10 #include "cc/output/overlay_candidate_validator.h" |
| 11 #include "cc/output/overlay_processor.h" | 11 #include "cc/output/overlay_processor.h" |
| 12 #include "cc/output/overlay_strategy_single_on_top.h" | 12 #include "cc/output/overlay_strategy_single_on_top.h" |
| 13 #include "cc/output/overlay_strategy_underlay.h" | 13 #include "cc/output/overlay_strategy_underlay.h" |
| 14 #include "cc/quads/checkerboard_draw_quad.h" | |
| 15 #include "cc/quads/render_pass.h" | 14 #include "cc/quads/render_pass.h" |
| 15 #include "cc/quads/solid_color_draw_quad.h" |
| 16 #include "cc/quads/stream_video_draw_quad.h" | 16 #include "cc/quads/stream_video_draw_quad.h" |
| 17 #include "cc/quads/texture_draw_quad.h" | 17 #include "cc/quads/texture_draw_quad.h" |
| 18 #include "cc/resources/resource_provider.h" | 18 #include "cc/resources/resource_provider.h" |
| 19 #include "cc/resources/texture_mailbox.h" | 19 #include "cc/resources/texture_mailbox.h" |
| 20 #include "cc/test/fake_output_surface_client.h" | 20 #include "cc/test/fake_output_surface_client.h" |
| 21 #include "cc/test/fake_resource_provider.h" | 21 #include "cc/test/fake_resource_provider.h" |
| 22 #include "cc/test/geometry_test_utils.h" | 22 #include "cc/test/geometry_test_utils.h" |
| 23 #include "cc/test/test_context_provider.h" | 23 #include "cc/test/test_context_provider.h" |
| 24 #include "cc/test/test_shared_bitmap_manager.h" | 24 #include "cc/test/test_shared_bitmap_manager.h" |
| 25 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 | 231 |
| 232 StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( | 232 StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( |
| 233 ResourceProvider* resource_provider, | 233 ResourceProvider* resource_provider, |
| 234 const SharedQuadState* shared_quad_state, | 234 const SharedQuadState* shared_quad_state, |
| 235 RenderPass* render_pass, | 235 RenderPass* render_pass, |
| 236 const gfx::Transform& transform) { | 236 const gfx::Transform& transform) { |
| 237 return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state, | 237 return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state, |
| 238 render_pass, kOverlayRect, transform); | 238 render_pass, kOverlayRect, transform); |
| 239 } | 239 } |
| 240 | 240 |
| 241 void CreateCheckeredQuadAt(ResourceProvider* resource_provider, | 241 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
| 242 const SharedQuadState* shared_quad_state, | 242 const SharedQuadState* shared_quad_state, |
| 243 RenderPass* render_pass, | 243 RenderPass* render_pass, |
| 244 const gfx::Rect& rect) { | 244 const gfx::Rect& rect) { |
| 245 CheckerboardDrawQuad* checkerboard_quad = | 245 SolidColorDrawQuad* color_quad = |
| 246 render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); | 246 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 247 checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor(), 1.f); | 247 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); |
| 248 } | 248 } |
| 249 | 249 |
| 250 void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider, | 250 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, |
| 251 const SharedQuadState* shared_quad_state, | 251 const SharedQuadState* shared_quad_state, |
| 252 RenderPass* render_pass) { | 252 RenderPass* render_pass) { |
| 253 CreateCheckeredQuadAt( | 253 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, |
| 254 resource_provider, shared_quad_state, render_pass, kOverlayRect); | 254 kOverlayRect); |
| 255 } | 255 } |
| 256 | 256 |
| 257 static void CompareRenderPassLists(const RenderPassList& expected_list, | 257 static void CompareRenderPassLists(const RenderPassList& expected_list, |
| 258 const RenderPassList& actual_list) { | 258 const RenderPassList& actual_list) { |
| 259 EXPECT_EQ(expected_list.size(), actual_list.size()); | 259 EXPECT_EQ(expected_list.size(), actual_list.size()); |
| 260 for (size_t i = 0; i < actual_list.size(); ++i) { | 260 for (size_t i = 0; i < actual_list.size(); ++i) { |
| 261 RenderPass* expected = expected_list[i]; | 261 RenderPass* expected = expected_list[i]; |
| 262 RenderPass* actual = actual_list[i]; | 262 RenderPass* actual = actual_list[i]; |
| 263 | 263 |
| 264 EXPECT_EQ(expected->id, actual->id); | 264 EXPECT_EQ(expected->id, actual->id); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 | 344 |
| 345 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { | 345 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
| 346 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 346 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 347 TextureDrawQuad* original_quad = | 347 TextureDrawQuad* original_quad = |
| 348 CreateFullscreenCandidateQuad(resource_provider_.get(), | 348 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 349 pass->shared_quad_state_list.back(), | 349 pass->shared_quad_state_list.back(), |
| 350 pass.get()); | 350 pass.get()); |
| 351 unsigned original_resource_id = original_quad->resource_id(); | 351 unsigned original_resource_id = original_quad->resource_id(); |
| 352 | 352 |
| 353 // Add something behind it. | 353 // Add something behind it. |
| 354 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 354 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 355 pass->shared_quad_state_list.back(), | 355 pass->shared_quad_state_list.back(), pass.get()); |
| 356 pass.get()); | 356 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 357 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 357 pass->shared_quad_state_list.back(), pass.get()); |
| 358 pass->shared_quad_state_list.back(), | |
| 359 pass.get()); | |
| 360 | 358 |
| 361 RenderPassList pass_list; | 359 RenderPassList pass_list; |
| 362 pass_list.push_back(pass.Pass()); | 360 pass_list.push_back(pass.Pass()); |
| 363 | 361 |
| 364 // Check for potential candidates. | 362 // Check for potential candidates. |
| 365 OverlayCandidateList candidate_list; | 363 OverlayCandidateList candidate_list; |
| 366 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 364 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 367 | 365 |
| 368 ASSERT_EQ(1U, pass_list.size()); | 366 ASSERT_EQ(1U, pass_list.size()); |
| 369 ASSERT_EQ(2U, candidate_list.size()); | 367 ASSERT_EQ(2U, candidate_list.size()); |
| 370 | 368 |
| 371 RenderPass* main_pass = pass_list.back(); | 369 RenderPass* main_pass = pass_list.back(); |
| 372 // Check that the quad is gone. | 370 // Check that the quad is gone. |
| 373 EXPECT_EQ(2U, main_pass->quad_list.size()); | 371 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 374 const QuadList& quad_list = main_pass->quad_list; | 372 const QuadList& quad_list = main_pass->quad_list; |
| 375 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 373 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 376 it != quad_list.BackToFrontEnd(); | 374 it != quad_list.BackToFrontEnd(); |
| 377 ++it) { | 375 ++it) { |
| 378 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 376 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 379 } | 377 } |
| 380 | 378 |
| 381 // Check that the right resource id got extracted. | 379 // Check that the right resource id got extracted. |
| 382 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); | 380 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); |
| 383 } | 381 } |
| 384 | 382 |
| 385 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 383 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
| 386 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 384 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 387 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 385 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 388 pass->shared_quad_state_list.back(), | 386 pass->shared_quad_state_list.back(), pass.get()); |
| 389 pass.get()); | 387 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 390 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 388 pass->shared_quad_state_list.back(), pass.get()); |
| 391 pass->shared_quad_state_list.back(), | |
| 392 pass.get()); | |
| 393 | 389 |
| 394 RenderPassList pass_list; | 390 RenderPassList pass_list; |
| 395 pass_list.push_back(pass.Pass()); | 391 pass_list.push_back(pass.Pass()); |
| 396 | 392 |
| 397 RenderPassList original_pass_list; | 393 RenderPassList original_pass_list; |
| 398 RenderPass::CopyAll(pass_list, &original_pass_list); | 394 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 399 | 395 |
| 400 OverlayCandidateList candidate_list; | 396 OverlayCandidateList candidate_list; |
| 401 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 397 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 402 EXPECT_EQ(0U, candidate_list.size()); | 398 EXPECT_EQ(0U, candidate_list.size()); |
| 403 // There should be nothing new here. | 399 // There should be nothing new here. |
| 404 CompareRenderPassLists(pass_list, original_pass_list); | 400 CompareRenderPassLists(pass_list, original_pass_list); |
| 405 } | 401 } |
| 406 | 402 |
| 407 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 403 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 408 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 404 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 409 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 405 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 410 pass->shared_quad_state_list.back(), | 406 pass->shared_quad_state_list.back(), pass.get()); |
| 411 pass.get()); | 407 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 412 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 408 pass->shared_quad_state_list.back(), pass.get()); |
| 413 pass->shared_quad_state_list.back(), | |
| 414 pass.get()); | |
| 415 | 409 |
| 416 CreateFullscreenCandidateQuad(resource_provider_.get(), | 410 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 417 pass->shared_quad_state_list.back(), | 411 pass->shared_quad_state_list.back(), |
| 418 pass.get()); | 412 pass.get()); |
| 419 | 413 |
| 420 RenderPassList pass_list; | 414 RenderPassList pass_list; |
| 421 pass_list.push_back(pass.Pass()); | 415 pass_list.push_back(pass.Pass()); |
| 422 | 416 |
| 423 RenderPassList original_pass_list; | 417 RenderPassList original_pass_list; |
| 424 RenderPass::CopyAll(pass_list, &original_pass_list); | 418 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 425 | 419 |
| 426 OverlayCandidateList candidate_list; | 420 OverlayCandidateList candidate_list; |
| 427 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 421 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 428 EXPECT_EQ(0U, candidate_list.size()); | 422 EXPECT_EQ(0U, candidate_list.size()); |
| 429 // There should be nothing new here. | 423 // There should be nothing new here. |
| 430 CompareRenderPassLists(pass_list, original_pass_list); | 424 CompareRenderPassLists(pass_list, original_pass_list); |
| 431 } | 425 } |
| 432 | 426 |
| 433 // Test with multiple render passes. | 427 // Test with multiple render passes. |
| 434 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 428 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 435 RenderPassList pass_list; | 429 RenderPassList pass_list; |
| 436 pass_list.push_back(CreateRenderPass()); | 430 pass_list.push_back(CreateRenderPass()); |
| 437 | 431 |
| 438 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 432 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 439 CreateFullscreenCandidateQuad(resource_provider_.get(), | 433 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 440 pass->shared_quad_state_list.back(), | 434 pass->shared_quad_state_list.back(), |
| 441 pass.get()); | 435 pass.get()); |
| 442 | 436 |
| 443 // Add something behind it. | 437 // Add something behind it. |
| 444 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 438 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 445 pass->shared_quad_state_list.back(), | 439 pass->shared_quad_state_list.back(), pass.get()); |
| 446 pass.get()); | 440 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 447 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 441 pass->shared_quad_state_list.back(), pass.get()); |
| 448 pass->shared_quad_state_list.back(), | |
| 449 pass.get()); | |
| 450 | 442 |
| 451 pass_list.push_back(pass.Pass()); | 443 pass_list.push_back(pass.Pass()); |
| 452 | 444 |
| 453 RenderPassList original_pass_list; | 445 RenderPassList original_pass_list; |
| 454 RenderPass::CopyAll(pass_list, &original_pass_list); | 446 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 455 | 447 |
| 456 // Check for potential candidates. | 448 // Check for potential candidates. |
| 457 OverlayCandidateList candidate_list; | 449 OverlayCandidateList candidate_list; |
| 458 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 450 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 459 EXPECT_EQ(2U, candidate_list.size()); | 451 EXPECT_EQ(2U, candidate_list.size()); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 pass_list.push_back(pass.Pass()); | 654 pass_list.push_back(pass.Pass()); |
| 663 OverlayCandidateList candidate_list; | 655 OverlayCandidateList candidate_list; |
| 664 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 656 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 665 ASSERT_EQ(1U, pass_list.size()); | 657 ASSERT_EQ(1U, pass_list.size()); |
| 666 ASSERT_EQ(2U, candidate_list.size()); | 658 ASSERT_EQ(2U, candidate_list.size()); |
| 667 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 659 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 668 } | 660 } |
| 669 | 661 |
| 670 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 662 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 671 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 663 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 672 CreateCheckeredQuadAt(resource_provider_.get(), | 664 CreateOpaqueQuadAt(resource_provider_.get(), |
| 673 pass->shared_quad_state_list.back(), | 665 pass->shared_quad_state_list.back(), pass.get(), |
| 674 pass.get(), | 666 kOverlayTopLeftRect); |
| 675 kOverlayTopLeftRect); | |
| 676 CreateCandidateQuadAt(resource_provider_.get(), | 667 CreateCandidateQuadAt(resource_provider_.get(), |
| 677 pass->shared_quad_state_list.back(), | 668 pass->shared_quad_state_list.back(), |
| 678 pass.get(), | 669 pass.get(), |
| 679 kOverlayBottomRightRect); | 670 kOverlayBottomRightRect); |
| 680 | 671 |
| 681 RenderPassList pass_list; | 672 RenderPassList pass_list; |
| 682 pass_list.push_back(pass.Pass()); | 673 pass_list.push_back(pass.Pass()); |
| 683 | 674 |
| 684 RenderPassList original_pass_list; | 675 RenderPassList original_pass_list; |
| 685 RenderPass::CopyAll(pass_list, &original_pass_list); | 676 RenderPass::CopyAll(pass_list, &original_pass_list); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 RenderPassList pass_list; | 834 RenderPassList pass_list; |
| 844 pass_list.push_back(pass.Pass()); | 835 pass_list.push_back(pass.Pass()); |
| 845 OverlayCandidateList candidate_list; | 836 OverlayCandidateList candidate_list; |
| 846 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 837 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 847 ASSERT_EQ(1U, pass_list.size()); | 838 ASSERT_EQ(1U, pass_list.size()); |
| 848 EXPECT_EQ(2U, candidate_list.size()); | 839 EXPECT_EQ(2U, candidate_list.size()); |
| 849 } | 840 } |
| 850 | 841 |
| 851 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 842 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 852 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 843 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 853 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 844 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 854 pass->shared_quad_state_list.back(), | 845 pass->shared_quad_state_list.back(), pass.get()); |
| 855 pass.get()); | |
| 856 CreateCandidateQuadAt(resource_provider_.get(), | 846 CreateCandidateQuadAt(resource_provider_.get(), |
| 857 pass->shared_quad_state_list.back(), pass.get(), | 847 pass->shared_quad_state_list.back(), pass.get(), |
| 858 kOverlayBottomRightRect); | 848 kOverlayBottomRightRect); |
| 859 | 849 |
| 860 RenderPassList pass_list; | 850 RenderPassList pass_list; |
| 861 pass_list.push_back(pass.Pass()); | 851 pass_list.push_back(pass.Pass()); |
| 862 | 852 |
| 863 OverlayCandidateList candidate_list; | 853 OverlayCandidateList candidate_list; |
| 864 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 854 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 865 EXPECT_EQ(1U, pass_list.size()); | 855 EXPECT_EQ(1U, pass_list.size()); |
| 866 ASSERT_EQ(2U, candidate_list.size()); | 856 ASSERT_EQ(2U, candidate_list.size()); |
| 867 EXPECT_EQ(0, candidate_list[0].plane_z_order); | 857 EXPECT_EQ(0, candidate_list[0].plane_z_order); |
| 868 EXPECT_EQ(-1, candidate_list[1].plane_z_order); | 858 EXPECT_EQ(-1, candidate_list[1].plane_z_order); |
| 869 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); | 859 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); |
| 870 // The overlay quad should have changed to a SOLID_COLOR quad. | 860 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 871 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 861 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 872 } | 862 } |
| 873 | 863 |
| 874 TEST_F(UnderlayTest, AllowOnTop) { | 864 TEST_F(UnderlayTest, AllowOnTop) { |
| 875 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 865 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 876 CreateFullscreenCandidateQuad(resource_provider_.get(), | 866 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 877 pass->shared_quad_state_list.back(), | 867 pass->shared_quad_state_list.back(), |
| 878 pass.get()); | 868 pass.get()); |
| 879 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 869 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 880 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 870 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 881 pass->shared_quad_state_list.back(), | 871 pass->shared_quad_state_list.back(), pass.get()); |
| 882 pass.get()); | |
| 883 | 872 |
| 884 RenderPassList pass_list; | 873 RenderPassList pass_list; |
| 885 pass_list.push_back(pass.Pass()); | 874 pass_list.push_back(pass.Pass()); |
| 886 | 875 |
| 887 OverlayCandidateList candidate_list; | 876 OverlayCandidateList candidate_list; |
| 888 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 877 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 889 EXPECT_EQ(1U, pass_list.size()); | 878 EXPECT_EQ(1U, pass_list.size()); |
| 890 ASSERT_EQ(2U, candidate_list.size()); | 879 ASSERT_EQ(2U, candidate_list.size()); |
| 891 EXPECT_EQ(0, candidate_list[0].plane_z_order); | 880 EXPECT_EQ(0, candidate_list[0].plane_z_order); |
| 892 EXPECT_EQ(-1, candidate_list[1].plane_z_order); | 881 EXPECT_EQ(-1, candidate_list[1].plane_z_order); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 Init(use_validator); | 981 Init(use_validator); |
| 993 renderer_->set_expect_overlays(true); | 982 renderer_->set_expect_overlays(true); |
| 994 gfx::Rect viewport_rect(16, 16); | 983 gfx::Rect viewport_rect(16, 16); |
| 995 | 984 |
| 996 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 985 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 997 | 986 |
| 998 CreateFullscreenCandidateQuad(resource_provider_.get(), | 987 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 999 pass->shared_quad_state_list.back(), | 988 pass->shared_quad_state_list.back(), |
| 1000 pass.get()); | 989 pass.get()); |
| 1001 | 990 |
| 1002 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 991 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1003 pass->shared_quad_state_list.back(), | 992 pass->shared_quad_state_list.back(), pass.get()); |
| 1004 pass.get()); | 993 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1005 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 994 pass->shared_quad_state_list.back(), pass.get()); |
| 1006 pass->shared_quad_state_list.back(), | |
| 1007 pass.get()); | |
| 1008 | 995 |
| 1009 RenderPassList pass_list; | 996 RenderPassList pass_list; |
| 1010 pass_list.push_back(pass.Pass()); | 997 pass_list.push_back(pass.Pass()); |
| 1011 | 998 |
| 1012 // Candidate pass was taken out and extra skipped pass added, | 999 // Candidate pass was taken out and extra skipped pass added, |
| 1013 // so only draw 2 quads. | 1000 // so only draw 2 quads. |
| 1014 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); | 1001 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); |
| 1015 EXPECT_CALL(scheduler_, | 1002 EXPECT_CALL(scheduler_, |
| 1016 Schedule(1, | 1003 Schedule(1, |
| 1017 gfx::OVERLAY_TRANSFORM_NONE, | 1004 gfx::OVERLAY_TRANSFORM_NONE, |
| 1018 _, | 1005 _, |
| 1019 kOverlayRect, | 1006 kOverlayRect, |
| 1020 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1); | 1007 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1); |
| 1021 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1008 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
| 1022 | 1009 |
| 1023 SwapBuffers(); | 1010 SwapBuffers(); |
| 1024 | 1011 |
| 1025 Mock::VerifyAndClearExpectations(renderer_.get()); | 1012 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1026 Mock::VerifyAndClearExpectations(&scheduler_); | 1013 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1027 } | 1014 } |
| 1028 | 1015 |
| 1029 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { | 1016 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { |
| 1030 bool use_validator = true; | 1017 bool use_validator = true; |
| 1031 Init(use_validator); | 1018 Init(use_validator); |
| 1032 renderer_->set_expect_overlays(true); | 1019 renderer_->set_expect_overlays(true); |
| 1033 gfx::Rect viewport_rect(16, 16); | 1020 gfx::Rect viewport_rect(16, 16); |
| 1034 | 1021 |
| 1035 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1022 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1036 | 1023 |
| 1037 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 1024 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1038 pass->shared_quad_state_list.back(), | 1025 pass->shared_quad_state_list.back(), pass.get()); |
| 1039 pass.get()); | 1026 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1040 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 1027 pass->shared_quad_state_list.back(), pass.get()); |
| 1041 pass->shared_quad_state_list.back(), | |
| 1042 pass.get()); | |
| 1043 | 1028 |
| 1044 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1029 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1045 pass->shared_quad_state_list.back(), | 1030 pass->shared_quad_state_list.back(), |
| 1046 pass.get()); | 1031 pass.get()); |
| 1047 | 1032 |
| 1048 RenderPassList pass_list; | 1033 RenderPassList pass_list; |
| 1049 pass_list.push_back(pass.Pass()); | 1034 pass_list.push_back(pass.Pass()); |
| 1050 | 1035 |
| 1051 // Candidate quad should fail to be overlaid on top because of occlusion. | 1036 // Candidate quad should fail to be overlaid on top because of occlusion. |
| 1052 // Expect to be replaced with transparent hole quad and placed in underlay. | 1037 // Expect to be replaced with transparent hole quad and placed in underlay. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1067 Init(use_validator); | 1052 Init(use_validator); |
| 1068 renderer_->set_expect_overlays(false); | 1053 renderer_->set_expect_overlays(false); |
| 1069 gfx::Rect viewport_rect(16, 16); | 1054 gfx::Rect viewport_rect(16, 16); |
| 1070 | 1055 |
| 1071 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1056 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1072 | 1057 |
| 1073 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1058 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1074 pass->shared_quad_state_list.back(), | 1059 pass->shared_quad_state_list.back(), |
| 1075 pass.get()); | 1060 pass.get()); |
| 1076 | 1061 |
| 1077 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 1062 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1078 pass->shared_quad_state_list.back(), | 1063 pass->shared_quad_state_list.back(), pass.get()); |
| 1079 pass.get()); | 1064 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1080 CreateFullscreenCheckeredQuad(resource_provider_.get(), | 1065 pass->shared_quad_state_list.back(), pass.get()); |
| 1081 pass->shared_quad_state_list.back(), | |
| 1082 pass.get()); | |
| 1083 | 1066 |
| 1084 RenderPassList pass_list; | 1067 RenderPassList pass_list; |
| 1085 pass_list.push_back(pass.Pass()); | 1068 pass_list.push_back(pass.Pass()); |
| 1086 | 1069 |
| 1087 // Should see no overlays. | 1070 // Should see no overlays. |
| 1088 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1071 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
| 1089 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1072 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1090 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1073 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
| 1091 | 1074 |
| 1092 SwapBuffers(); | 1075 SwapBuffers(); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1182 renderer_->BeginDrawingFrame(&frame3); | 1165 renderer_->BeginDrawingFrame(&frame3); |
| 1183 renderer_->FinishDrawingFrame(&frame3); | 1166 renderer_->FinishDrawingFrame(&frame3); |
| 1184 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1167 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1185 SwapBuffers(); | 1168 SwapBuffers(); |
| 1186 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1169 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1187 Mock::VerifyAndClearExpectations(&scheduler_); | 1170 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1188 } | 1171 } |
| 1189 | 1172 |
| 1190 } // namespace | 1173 } // namespace |
| 1191 } // namespace cc | 1174 } // namespace cc |
| OLD | NEW |