| 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/region.h" | 5 #include "cc/base/region.h" |
| 6 #include "cc/base/scoped_ptr_vector.h" | 6 #include "cc/base/scoped_ptr_vector.h" |
| 7 #include "cc/output/compositor_frame_metadata.h" | 7 #include "cc/output/compositor_frame_metadata.h" |
| 8 #include "cc/output/gl_renderer.h" | 8 #include "cc/output/gl_renderer.h" |
| 9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
| 10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); | 359 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); |
| 360 overlay_processor_->Initialize(); | 360 overlay_processor_->Initialize(); |
| 361 } | 361 } |
| 362 | 362 |
| 363 scoped_refptr<TestContextProvider> provider_; | 363 scoped_refptr<TestContextProvider> provider_; |
| 364 scoped_ptr<OverlayOutputSurface> output_surface_; | 364 scoped_ptr<OverlayOutputSurface> output_surface_; |
| 365 FakeOutputSurfaceClient client_; | 365 FakeOutputSurfaceClient client_; |
| 366 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 366 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 367 scoped_ptr<ResourceProvider> resource_provider_; | 367 scoped_ptr<ResourceProvider> resource_provider_; |
| 368 scoped_ptr<OverlayProcessor> overlay_processor_; | 368 scoped_ptr<OverlayProcessor> overlay_processor_; |
| 369 gfx::Rect damage_rect_; | |
| 370 }; | 369 }; |
| 371 | 370 |
| 372 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; | 371 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; |
| 373 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; | 372 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; |
| 374 typedef OverlayTest<SandwichOverlayValidator> SandwichTest; | 373 typedef OverlayTest<SandwichOverlayValidator> SandwichTest; |
| 375 typedef OverlayTest<AllOrNothingOverlayValidator> AllOrNothingOverlayTest; | 374 typedef OverlayTest<AllOrNothingOverlayValidator> AllOrNothingOverlayTest; |
| 376 | 375 |
| 377 TEST(OverlayTest, NoOverlaysByDefault) { | 376 TEST(OverlayTest, NoOverlaysByDefault) { |
| 378 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 377 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
| 379 OverlayOutputSurface output_surface(provider); | 378 OverlayOutputSurface output_surface(provider); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 pass->shared_quad_state_list.back(), pass.get()); | 412 pass->shared_quad_state_list.back(), pass.get()); |
| 414 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 413 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 415 pass->shared_quad_state_list.back(), pass.get()); | 414 pass->shared_quad_state_list.back(), pass.get()); |
| 416 | 415 |
| 417 RenderPassList pass_list; | 416 RenderPassList pass_list; |
| 418 pass_list.push_back(pass.Pass()); | 417 pass_list.push_back(pass.Pass()); |
| 419 | 418 |
| 420 // Check for potential candidates. | 419 // Check for potential candidates. |
| 421 OverlayCandidateList candidate_list; | 420 OverlayCandidateList candidate_list; |
| 422 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 421 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 423 &candidate_list, &damage_rect_); | 422 &candidate_list); |
| 424 | 423 |
| 425 ASSERT_EQ(1U, pass_list.size()); | 424 ASSERT_EQ(1U, pass_list.size()); |
| 426 ASSERT_EQ(1U, candidate_list.size()); | 425 ASSERT_EQ(1U, candidate_list.size()); |
| 427 | 426 |
| 428 RenderPass* main_pass = pass_list.back(); | 427 RenderPass* main_pass = pass_list.back(); |
| 429 // Check that the quad is gone. | 428 // Check that the quad is gone. |
| 430 EXPECT_EQ(2U, main_pass->quad_list.size()); | 429 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 431 const QuadList& quad_list = main_pass->quad_list; | 430 const QuadList& quad_list = main_pass->quad_list; |
| 432 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 431 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 433 it != quad_list.BackToFrontEnd(); ++it) { | 432 it != quad_list.BackToFrontEnd(); ++it) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 455 pass->shared_quad_state_list.back(), pass.get()); | 454 pass->shared_quad_state_list.back(), pass.get()); |
| 456 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 455 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 457 pass->shared_quad_state_list.back(), pass.get()); | 456 pass->shared_quad_state_list.back(), pass.get()); |
| 458 | 457 |
| 459 RenderPassList pass_list; | 458 RenderPassList pass_list; |
| 460 pass_list.push_back(pass.Pass()); | 459 pass_list.push_back(pass.Pass()); |
| 461 | 460 |
| 462 // Check for potential candidates. | 461 // Check for potential candidates. |
| 463 OverlayCandidateList candidate_list; | 462 OverlayCandidateList candidate_list; |
| 464 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 463 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 465 &candidate_list, &damage_rect_); | 464 &candidate_list); |
| 466 | 465 |
| 467 // Ensure that the display and uv rects have cropping applied to them. | 466 // Ensure that the display and uv rects have cropping applied to them. |
| 468 ASSERT_EQ(1U, pass_list.size()); | 467 ASSERT_EQ(1U, pass_list.size()); |
| 469 ASSERT_EQ(1U, candidate_list.size()); | 468 ASSERT_EQ(1U, candidate_list.size()); |
| 470 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); | 469 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); |
| 471 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); | 470 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); |
| 472 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); | 471 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); |
| 473 } | 472 } |
| 474 | 473 |
| 475 TEST_F(SandwichTest, SuccessfulTwoOverlays) { | 474 TEST_F(SandwichTest, SuccessfulTwoOverlays) { |
| 476 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 475 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 477 | 476 |
| 478 // Add two non-overlapping candidates. | 477 // Add two non-overlapping candidates. |
| 479 CreateCandidateQuadAt(resource_provider_.get(), | 478 CreateCandidateQuadAt(resource_provider_.get(), |
| 480 pass->shared_quad_state_list.back(), pass.get(), | 479 pass->shared_quad_state_list.back(), pass.get(), |
| 481 kOverlayTopLeftRect); | 480 kOverlayTopLeftRect); |
| 482 CreateCandidateQuadAt(resource_provider_.get(), | 481 CreateCandidateQuadAt(resource_provider_.get(), |
| 483 pass->shared_quad_state_list.back(), pass.get(), | 482 pass->shared_quad_state_list.back(), pass.get(), |
| 484 kOverlayBottomRightRect); | 483 kOverlayBottomRightRect); |
| 485 | 484 |
| 486 // Add something behind it. | 485 // Add something behind it. |
| 487 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 486 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 488 pass->shared_quad_state_list.back(), pass.get()); | 487 pass->shared_quad_state_list.back(), pass.get()); |
| 489 | 488 |
| 490 RenderPassList pass_list; | 489 RenderPassList pass_list; |
| 491 pass_list.push_back(pass.Pass()); | 490 pass_list.push_back(pass.Pass()); |
| 492 OverlayCandidateList candidate_list; | 491 OverlayCandidateList candidate_list; |
| 493 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 492 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 494 &candidate_list, &damage_rect_); | 493 &candidate_list); |
| 495 | 494 |
| 496 // Both candidates should become overlays. | 495 // Both candidates should become overlays. |
| 497 EXPECT_EQ(1u, pass_list.size()); | 496 EXPECT_EQ(1u, pass_list.size()); |
| 498 EXPECT_EQ(2u, candidate_list.size()); | 497 EXPECT_EQ(2u, candidate_list.size()); |
| 499 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); | 498 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 500 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), | 499 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), |
| 501 candidate_list[1].display_rect); | 500 candidate_list[1].display_rect); |
| 502 | 501 |
| 503 // The overlay quads should be gone. | 502 // The overlay quads should be gone. |
| 504 const QuadList& quad_list = pass_list.back()->quad_list; | 503 const QuadList& quad_list = pass_list.back()->quad_list; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 518 kOverlayRect); | 517 kOverlayRect); |
| 519 | 518 |
| 520 // Add something behind it. | 519 // Add something behind it. |
| 521 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 520 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 522 pass->shared_quad_state_list.back(), pass.get()); | 521 pass->shared_quad_state_list.back(), pass.get()); |
| 523 | 522 |
| 524 RenderPassList pass_list; | 523 RenderPassList pass_list; |
| 525 pass_list.push_back(pass.Pass()); | 524 pass_list.push_back(pass.Pass()); |
| 526 OverlayCandidateList candidate_list; | 525 OverlayCandidateList candidate_list; |
| 527 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 526 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 528 &candidate_list, &damage_rect_); | 527 &candidate_list); |
| 529 | 528 |
| 530 // Only one of the candidates should become an overlay. | 529 // Only one of the candidates should become an overlay. |
| 531 EXPECT_EQ(1u, pass_list.size()); | 530 EXPECT_EQ(1u, pass_list.size()); |
| 532 EXPECT_EQ(1u, candidate_list.size()); | 531 EXPECT_EQ(1u, candidate_list.size()); |
| 533 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); | 532 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 534 | 533 |
| 535 // One of the overlay quads should be gone. | 534 // One of the overlay quads should be gone. |
| 536 const QuadList& quad_list = pass_list.back()->quad_list; | 535 const QuadList& quad_list = pass_list.back()->quad_list; |
| 537 EXPECT_EQ(2u, quad_list.size()); | 536 EXPECT_EQ(2u, quad_list.size()); |
| 538 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); | 537 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 553 CreateOpaqueQuadAt(resource_provider_.get(), | 552 CreateOpaqueQuadAt(resource_provider_.get(), |
| 554 pass->shared_quad_state_list.back(), pass.get(), | 553 pass->shared_quad_state_list.back(), pass.get(), |
| 555 gfx::Rect(kDisplaySize)); | 554 gfx::Rect(kDisplaySize)); |
| 556 | 555 |
| 557 RenderPassList pass_list; | 556 RenderPassList pass_list; |
| 558 pass_list.push_back(pass.Pass()); | 557 pass_list.push_back(pass.Pass()); |
| 559 | 558 |
| 560 // Check for potential candidates. | 559 // Check for potential candidates. |
| 561 OverlayCandidateList candidate_list; | 560 OverlayCandidateList candidate_list; |
| 562 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 561 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 563 &candidate_list, &damage_rect_); | 562 &candidate_list); |
| 563 |
| 564 ASSERT_EQ(1U, pass_list.size()); | 564 ASSERT_EQ(1U, pass_list.size()); |
| 565 ASSERT_EQ(2U, candidate_list.size()); | 565 ASSERT_EQ(2U, candidate_list.size()); |
| 566 | 566 |
| 567 RenderPass* main_pass = pass_list.back(); | 567 RenderPass* main_pass = pass_list.back(); |
| 568 // Check that the quad is gone. | 568 // Check that the quad is gone. |
| 569 EXPECT_EQ(3U, main_pass->quad_list.size()); | 569 EXPECT_EQ(3U, main_pass->quad_list.size()); |
| 570 const QuadList& quad_list = main_pass->quad_list; | 570 const QuadList& quad_list = main_pass->quad_list; |
| 571 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 571 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 572 it != quad_list.BackToFrontEnd(); ++it) { | 572 it != quad_list.BackToFrontEnd(); ++it) { |
| 573 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 573 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 gfx::Rect(kDisplaySize)); | 608 gfx::Rect(kDisplaySize)); |
| 609 | 609 |
| 610 RenderPassList pass_list; | 610 RenderPassList pass_list; |
| 611 pass_list.push_back(pass.Pass()); | 611 pass_list.push_back(pass.Pass()); |
| 612 | 612 |
| 613 // Run the overlay strategy on that input. | 613 // Run the overlay strategy on that input. |
| 614 RenderPass* main_pass = pass_list.back(); | 614 RenderPass* main_pass = pass_list.back(); |
| 615 OverlayCandidateList candidate_list; | 615 OverlayCandidateList candidate_list; |
| 616 EXPECT_EQ(4U, main_pass->quad_list.size()); | 616 EXPECT_EQ(4U, main_pass->quad_list.size()); |
| 617 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 617 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 618 &candidate_list, &damage_rect_); | 618 &candidate_list); |
| 619 ASSERT_EQ(1U, pass_list.size()); | 619 ASSERT_EQ(1U, pass_list.size()); |
| 620 ASSERT_EQ(3U, candidate_list.size()); | 620 ASSERT_EQ(3U, candidate_list.size()); |
| 621 | 621 |
| 622 // Check that the candidate quad is gone and that we now have two transparent | 622 // Check that the candidate quad is gone and that we now have two transparent |
| 623 // quads for the same region that was covered on the overlay. | 623 // quads for the same region that was covered on the overlay. |
| 624 EXPECT_EQ(5U, main_pass->quad_list.size()); | 624 EXPECT_EQ(5U, main_pass->quad_list.size()); |
| 625 const QuadList& quad_list = main_pass->quad_list; | 625 const QuadList& quad_list = main_pass->quad_list; |
| 626 Region transparent_quad_region; | 626 Region transparent_quad_region; |
| 627 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 627 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 628 it != quad_list.BackToFrontEnd(); ++it) { | 628 it != quad_list.BackToFrontEnd(); ++it) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 pass->shared_quad_state_list.back(), pass.get()); | 660 pass->shared_quad_state_list.back(), pass.get()); |
| 661 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 661 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 662 pass->shared_quad_state_list.back(), pass.get()); | 662 pass->shared_quad_state_list.back(), pass.get()); |
| 663 | 663 |
| 664 RenderPassList pass_list; | 664 RenderPassList pass_list; |
| 665 pass_list.push_back(pass.Pass()); | 665 pass_list.push_back(pass.Pass()); |
| 666 | 666 |
| 667 // Check for potential candidates. | 667 // Check for potential candidates. |
| 668 OverlayCandidateList candidate_list; | 668 OverlayCandidateList candidate_list; |
| 669 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 669 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 670 &candidate_list, &damage_rect_); | 670 &candidate_list); |
| 671 | 671 |
| 672 ASSERT_EQ(1U, pass_list.size()); | 672 ASSERT_EQ(1U, pass_list.size()); |
| 673 ASSERT_EQ(1U, candidate_list.size()); | 673 ASSERT_EQ(1U, candidate_list.size()); |
| 674 | 674 |
| 675 RenderPass* main_pass = pass_list.back(); | 675 RenderPass* main_pass = pass_list.back(); |
| 676 // Check that the quad is gone. | 676 // Check that the quad is gone. |
| 677 EXPECT_EQ(2U, main_pass->quad_list.size()); | 677 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 678 const QuadList& quad_list = main_pass->quad_list; | 678 const QuadList& quad_list = main_pass->quad_list; |
| 679 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 679 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 680 it != quad_list.BackToFrontEnd(); | 680 it != quad_list.BackToFrontEnd(); |
| 681 ++it) { | 681 ++it) { |
| 682 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 682 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 683 } | 683 } |
| 684 | 684 |
| 685 // Check that the right resource id got extracted. | 685 // Check that the right resource id got extracted. |
| 686 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); | 686 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); |
| 687 } | 687 } |
| 688 | 688 |
| 689 TEST_F(SingleOverlayOnTopTest, DamageRect) { | |
| 690 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 691 CreateFullscreenCandidateQuad(resource_provider_.get(), | |
| 692 pass->shared_quad_state_list.back(), | |
| 693 pass.get()); | |
| 694 damage_rect_ = kOverlayRect; | |
| 695 | |
| 696 // Add something behind it. | |
| 697 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 698 pass->shared_quad_state_list.back(), pass.get()); | |
| 699 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 700 pass->shared_quad_state_list.back(), pass.get()); | |
| 701 | |
| 702 RenderPassList pass_list; | |
| 703 pass_list.push_back(pass.Pass()); | |
| 704 | |
| 705 // Check for potential candidates. | |
| 706 OverlayCandidateList candidate_list; | |
| 707 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | |
| 708 &candidate_list, &damage_rect_); | |
| 709 DCHECK(damage_rect_.IsEmpty()); | |
| 710 } | |
| 711 | |
| 712 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 689 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
| 713 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 690 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 714 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 691 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 715 pass->shared_quad_state_list.back(), pass.get()); | 692 pass->shared_quad_state_list.back(), pass.get()); |
| 716 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 693 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 717 pass->shared_quad_state_list.back(), pass.get()); | 694 pass->shared_quad_state_list.back(), pass.get()); |
| 718 | 695 |
| 719 RenderPassList pass_list; | 696 RenderPassList pass_list; |
| 720 pass_list.push_back(pass.Pass()); | 697 pass_list.push_back(pass.Pass()); |
| 698 |
| 699 RenderPassList original_pass_list; |
| 700 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 701 |
| 702 OverlayCandidateList candidate_list; |
| 703 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 704 &candidate_list); |
| 705 EXPECT_EQ(0U, candidate_list.size()); |
| 706 // There should be nothing new here. |
| 707 CompareRenderPassLists(pass_list, original_pass_list); |
| 708 } |
| 709 |
| 710 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 711 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 712 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 713 pass->shared_quad_state_list.back(), pass.get()); |
| 714 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 715 pass->shared_quad_state_list.back(), pass.get()); |
| 716 |
| 717 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 718 pass->shared_quad_state_list.back(), |
| 719 pass.get()); |
| 720 |
| 721 RenderPassList pass_list; |
| 722 pass_list.push_back(pass.Pass()); |
| 721 | 723 |
| 722 RenderPassList original_pass_list; | 724 RenderPassList original_pass_list; |
| 723 RenderPass::CopyAll(pass_list, &original_pass_list); | 725 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 724 | 726 |
| 725 OverlayCandidateList candidate_list; | 727 OverlayCandidateList candidate_list; |
| 726 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 728 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 727 &candidate_list, &damage_rect_); | 729 &candidate_list); |
| 728 EXPECT_EQ(0U, candidate_list.size()); | |
| 729 // There should be nothing new here. | |
| 730 CompareRenderPassLists(pass_list, original_pass_list); | |
| 731 } | |
| 732 | |
| 733 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | |
| 734 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 735 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 736 pass->shared_quad_state_list.back(), pass.get()); | |
| 737 CreateFullscreenOpaqueQuad(resource_provider_.get(), | |
| 738 pass->shared_quad_state_list.back(), pass.get()); | |
| 739 | |
| 740 CreateFullscreenCandidateQuad(resource_provider_.get(), | |
| 741 pass->shared_quad_state_list.back(), | |
| 742 pass.get()); | |
| 743 | |
| 744 RenderPassList pass_list; | |
| 745 pass_list.push_back(pass.Pass()); | |
| 746 | |
| 747 RenderPassList original_pass_list; | |
| 748 RenderPass::CopyAll(pass_list, &original_pass_list); | |
| 749 | |
| 750 OverlayCandidateList candidate_list; | |
| 751 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | |
| 752 &candidate_list, &damage_rect_); | |
| 753 EXPECT_EQ(0U, candidate_list.size()); | 730 EXPECT_EQ(0U, candidate_list.size()); |
| 754 // There should be nothing new here. | 731 // There should be nothing new here. |
| 755 CompareRenderPassLists(pass_list, original_pass_list); | 732 CompareRenderPassLists(pass_list, original_pass_list); |
| 756 } | 733 } |
| 757 | 734 |
| 758 // Test with multiple render passes. | 735 // Test with multiple render passes. |
| 759 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 736 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 760 RenderPassList pass_list; | 737 RenderPassList pass_list; |
| 761 pass_list.push_back(CreateRenderPass()); | 738 pass_list.push_back(CreateRenderPass()); |
| 762 | 739 |
| 763 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 740 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 764 CreateFullscreenCandidateQuad(resource_provider_.get(), | 741 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 765 pass->shared_quad_state_list.back(), | 742 pass->shared_quad_state_list.back(), |
| 766 pass.get()); | 743 pass.get()); |
| 767 | 744 |
| 768 // Add something behind it. | 745 // Add something behind it. |
| 769 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 746 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 770 pass->shared_quad_state_list.back(), pass.get()); | 747 pass->shared_quad_state_list.back(), pass.get()); |
| 771 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 748 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 772 pass->shared_quad_state_list.back(), pass.get()); | 749 pass->shared_quad_state_list.back(), pass.get()); |
| 773 | 750 |
| 774 pass_list.push_back(pass.Pass()); | 751 pass_list.push_back(pass.Pass()); |
| 775 | 752 |
| 776 RenderPassList original_pass_list; | 753 RenderPassList original_pass_list; |
| 777 RenderPass::CopyAll(pass_list, &original_pass_list); | 754 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 778 | 755 |
| 779 // Check for potential candidates. | 756 // Check for potential candidates. |
| 780 OverlayCandidateList candidate_list; | 757 OverlayCandidateList candidate_list; |
| 781 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 758 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 782 &candidate_list, &damage_rect_); | 759 &candidate_list); |
| 783 EXPECT_EQ(1U, candidate_list.size()); | 760 EXPECT_EQ(1U, candidate_list.size()); |
| 784 | 761 |
| 785 // This should be the same. | 762 // This should be the same. |
| 786 ASSERT_EQ(2U, pass_list.size()); | 763 ASSERT_EQ(2U, pass_list.size()); |
| 787 } | 764 } |
| 788 | 765 |
| 789 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { | 766 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
| 790 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 767 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 791 TextureDrawQuad* quad = | 768 TextureDrawQuad* quad = |
| 792 CreateFullscreenCandidateQuad(resource_provider_.get(), | 769 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 793 pass->shared_quad_state_list.back(), | 770 pass->shared_quad_state_list.back(), |
| 794 pass.get()); | 771 pass.get()); |
| 795 quad->premultiplied_alpha = true; | 772 quad->premultiplied_alpha = true; |
| 796 | 773 |
| 797 RenderPassList pass_list; | 774 RenderPassList pass_list; |
| 798 pass_list.push_back(pass.Pass()); | 775 pass_list.push_back(pass.Pass()); |
| 799 OverlayCandidateList candidate_list; | 776 OverlayCandidateList candidate_list; |
| 800 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 777 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 801 &candidate_list, &damage_rect_); | 778 &candidate_list); |
| 802 EXPECT_EQ(1U, pass_list.size()); | 779 EXPECT_EQ(1U, pass_list.size()); |
| 803 EXPECT_EQ(0U, candidate_list.size()); | 780 EXPECT_EQ(0U, candidate_list.size()); |
| 804 } | 781 } |
| 805 | 782 |
| 806 TEST_F(SingleOverlayOnTopTest, RejectBlending) { | 783 TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
| 807 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 784 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 808 TextureDrawQuad* quad = | 785 TextureDrawQuad* quad = |
| 809 CreateFullscreenCandidateQuad(resource_provider_.get(), | 786 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 810 pass->shared_quad_state_list.back(), | 787 pass->shared_quad_state_list.back(), |
| 811 pass.get()); | 788 pass.get()); |
| 812 quad->needs_blending = true; | 789 quad->needs_blending = true; |
| 813 | 790 |
| 814 RenderPassList pass_list; | 791 RenderPassList pass_list; |
| 815 pass_list.push_back(pass.Pass()); | 792 pass_list.push_back(pass.Pass()); |
| 816 OverlayCandidateList candidate_list; | 793 OverlayCandidateList candidate_list; |
| 817 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 794 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 818 &candidate_list, &damage_rect_); | 795 &candidate_list); |
| 819 ASSERT_EQ(1U, pass_list.size()); | 796 ASSERT_EQ(1U, pass_list.size()); |
| 820 EXPECT_EQ(0U, candidate_list.size()); | 797 EXPECT_EQ(0U, candidate_list.size()); |
| 821 } | 798 } |
| 822 | 799 |
| 823 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 800 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
| 824 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 801 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 825 TextureDrawQuad* quad = | 802 TextureDrawQuad* quad = |
| 826 CreateFullscreenCandidateQuad(resource_provider_.get(), | 803 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 827 pass->shared_quad_state_list.back(), | 804 pass->shared_quad_state_list.back(), |
| 828 pass.get()); | 805 pass.get()); |
| 829 quad->background_color = SK_ColorBLACK; | 806 quad->background_color = SK_ColorBLACK; |
| 830 | 807 |
| 831 RenderPassList pass_list; | 808 RenderPassList pass_list; |
| 832 pass_list.push_back(pass.Pass()); | 809 pass_list.push_back(pass.Pass()); |
| 833 OverlayCandidateList candidate_list; | 810 OverlayCandidateList candidate_list; |
| 834 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 811 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 835 &candidate_list, &damage_rect_); | 812 &candidate_list); |
| 836 ASSERT_EQ(1U, pass_list.size()); | 813 ASSERT_EQ(1U, pass_list.size()); |
| 837 EXPECT_EQ(0U, candidate_list.size()); | 814 EXPECT_EQ(0U, candidate_list.size()); |
| 838 } | 815 } |
| 839 | 816 |
| 840 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 817 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
| 841 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 818 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 842 CreateFullscreenCandidateQuad(resource_provider_.get(), | 819 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 843 pass->shared_quad_state_list.back(), | 820 pass->shared_quad_state_list.back(), |
| 844 pass.get()); | 821 pass.get()); |
| 845 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; | 822 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; |
| 846 | 823 |
| 847 RenderPassList pass_list; | 824 RenderPassList pass_list; |
| 848 pass_list.push_back(pass.Pass()); | 825 pass_list.push_back(pass.Pass()); |
| 849 OverlayCandidateList candidate_list; | 826 OverlayCandidateList candidate_list; |
| 850 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 827 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 851 &candidate_list, &damage_rect_); | 828 &candidate_list); |
| 852 ASSERT_EQ(1U, pass_list.size()); | 829 ASSERT_EQ(1U, pass_list.size()); |
| 853 EXPECT_EQ(0U, candidate_list.size()); | 830 EXPECT_EQ(0U, candidate_list.size()); |
| 854 } | 831 } |
| 855 | 832 |
| 856 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 833 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
| 857 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 834 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 858 CreateFullscreenCandidateQuad(resource_provider_.get(), | 835 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 859 pass->shared_quad_state_list.back(), | 836 pass->shared_quad_state_list.back(), |
| 860 pass.get()); | 837 pass.get()); |
| 861 pass->shared_quad_state_list.back()->opacity = 0.5f; | 838 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 862 | 839 |
| 863 RenderPassList pass_list; | 840 RenderPassList pass_list; |
| 864 pass_list.push_back(pass.Pass()); | 841 pass_list.push_back(pass.Pass()); |
| 865 OverlayCandidateList candidate_list; | 842 OverlayCandidateList candidate_list; |
| 866 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 843 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 867 &candidate_list, &damage_rect_); | 844 &candidate_list); |
| 868 ASSERT_EQ(1U, pass_list.size()); | 845 ASSERT_EQ(1U, pass_list.size()); |
| 869 EXPECT_EQ(0U, candidate_list.size()); | 846 EXPECT_EQ(0U, candidate_list.size()); |
| 870 } | 847 } |
| 871 | 848 |
| 872 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 849 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
| 873 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 850 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 874 CreateFullscreenCandidateQuad(resource_provider_.get(), | 851 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 875 pass->shared_quad_state_list.back(), | 852 pass->shared_quad_state_list.back(), |
| 876 pass.get()); | 853 pass.get()); |
| 877 pass->shared_quad_state_list.back() | 854 pass->shared_quad_state_list.back() |
| 878 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 855 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 879 | 856 |
| 880 RenderPassList pass_list; | 857 RenderPassList pass_list; |
| 881 pass_list.push_back(pass.Pass()); | 858 pass_list.push_back(pass.Pass()); |
| 882 OverlayCandidateList candidate_list; | 859 OverlayCandidateList candidate_list; |
| 883 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 860 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 884 &candidate_list, &damage_rect_); | 861 &candidate_list); |
| 885 ASSERT_EQ(1U, pass_list.size()); | 862 ASSERT_EQ(1U, pass_list.size()); |
| 886 EXPECT_EQ(0U, candidate_list.size()); | 863 EXPECT_EQ(0U, candidate_list.size()); |
| 887 } | 864 } |
| 888 | 865 |
| 889 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 866 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 890 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 867 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 891 CreateFullscreenCandidateQuad(resource_provider_.get(), | 868 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 892 pass->shared_quad_state_list.back(), | 869 pass->shared_quad_state_list.back(), |
| 893 pass.get()); | 870 pass.get()); |
| 894 pass->shared_quad_state_list.back()->is_clipped = true; | 871 pass->shared_quad_state_list.back()->is_clipped = true; |
| 895 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 872 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 896 | 873 |
| 897 RenderPassList pass_list; | 874 RenderPassList pass_list; |
| 898 pass_list.push_back(pass.Pass()); | 875 pass_list.push_back(pass.Pass()); |
| 899 OverlayCandidateList candidate_list; | 876 OverlayCandidateList candidate_list; |
| 900 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 877 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 901 &candidate_list, &damage_rect_); | 878 &candidate_list); |
| 902 ASSERT_EQ(1U, pass_list.size()); | 879 ASSERT_EQ(1U, pass_list.size()); |
| 903 EXPECT_EQ(1U, candidate_list.size()); | 880 EXPECT_EQ(1U, candidate_list.size()); |
| 904 } | 881 } |
| 905 | 882 |
| 906 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 883 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
| 907 gfx::Rect rect = kOverlayRect; | 884 gfx::Rect rect = kOverlayRect; |
| 908 rect.set_width(rect.width() / 2); | 885 rect.set_width(rect.width() / 2); |
| 909 rect.Offset(0, -rect.height()); | 886 rect.Offset(0, -rect.height()); |
| 910 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 887 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 911 CreateCandidateQuadAt(resource_provider_.get(), | 888 CreateCandidateQuadAt(resource_provider_.get(), |
| 912 pass->shared_quad_state_list.back(), pass.get(), rect); | 889 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 913 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 890 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 914 -1.0f); | 891 -1.0f); |
| 915 | 892 |
| 916 RenderPassList pass_list; | 893 RenderPassList pass_list; |
| 917 pass_list.push_back(pass.Pass()); | 894 pass_list.push_back(pass.Pass()); |
| 918 OverlayCandidateList candidate_list; | 895 OverlayCandidateList candidate_list; |
| 919 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 896 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 920 &candidate_list, &damage_rect_); | 897 &candidate_list); |
| 921 ASSERT_EQ(1U, pass_list.size()); | 898 ASSERT_EQ(1U, pass_list.size()); |
| 922 ASSERT_EQ(1U, candidate_list.size()); | 899 ASSERT_EQ(1U, candidate_list.size()); |
| 923 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 900 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 924 candidate_list.back().transform); | 901 candidate_list.back().transform); |
| 925 } | 902 } |
| 926 | 903 |
| 927 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { | 904 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { |
| 928 gfx::Rect rect = kOverlayRect; | 905 gfx::Rect rect = kOverlayRect; |
| 929 rect.set_height(rect.height() / 2); | 906 rect.set_height(rect.height() / 2); |
| 930 rect.Offset(-rect.width(), 0); | 907 rect.Offset(-rect.width(), 0); |
| 931 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 908 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 932 CreateCandidateQuadAt(resource_provider_.get(), | 909 CreateCandidateQuadAt(resource_provider_.get(), |
| 933 pass->shared_quad_state_list.back(), pass.get(), rect); | 910 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 934 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 911 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 935 2.0f); | 912 2.0f); |
| 936 | 913 |
| 937 RenderPassList pass_list; | 914 RenderPassList pass_list; |
| 938 pass_list.push_back(pass.Pass()); | 915 pass_list.push_back(pass.Pass()); |
| 939 OverlayCandidateList candidate_list; | 916 OverlayCandidateList candidate_list; |
| 940 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 917 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 941 &candidate_list, &damage_rect_); | 918 &candidate_list); |
| 942 ASSERT_EQ(1U, pass_list.size()); | 919 ASSERT_EQ(1U, pass_list.size()); |
| 943 ASSERT_EQ(1U, candidate_list.size()); | 920 ASSERT_EQ(1U, candidate_list.size()); |
| 944 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 921 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 945 candidate_list.back().transform); | 922 candidate_list.back().transform); |
| 946 } | 923 } |
| 947 | 924 |
| 948 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 925 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 949 gfx::Rect rect = kOverlayRect; | 926 gfx::Rect rect = kOverlayRect; |
| 950 rect.set_width(rect.width() / 2); | 927 rect.set_width(rect.width() / 2); |
| 951 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 928 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 952 CreateCandidateQuadAt(resource_provider_.get(), | 929 CreateCandidateQuadAt(resource_provider_.get(), |
| 953 pass->shared_quad_state_list.back(), pass.get(), rect); | 930 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 954 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 931 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 955 1.0f); | 932 1.0f); |
| 956 | 933 |
| 957 RenderPassList pass_list; | 934 RenderPassList pass_list; |
| 958 pass_list.push_back(pass.Pass()); | 935 pass_list.push_back(pass.Pass()); |
| 959 OverlayCandidateList candidate_list; | 936 OverlayCandidateList candidate_list; |
| 960 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 937 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 961 &candidate_list, &damage_rect_); | 938 &candidate_list); |
| 962 ASSERT_EQ(1U, pass_list.size()); | 939 ASSERT_EQ(1U, pass_list.size()); |
| 963 EXPECT_EQ(1U, candidate_list.size()); | 940 EXPECT_EQ(1U, candidate_list.size()); |
| 964 } | 941 } |
| 965 | 942 |
| 966 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { | 943 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { |
| 967 gfx::Rect rect = kOverlayRect; | 944 gfx::Rect rect = kOverlayRect; |
| 968 rect.Offset(0, -rect.height()); | 945 rect.Offset(0, -rect.height()); |
| 969 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 946 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 970 CreateCandidateQuadAt(resource_provider_.get(), | 947 CreateCandidateQuadAt(resource_provider_.get(), |
| 971 pass->shared_quad_state_list.back(), pass.get(), rect); | 948 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 972 pass->shared_quad_state_list.back() | 949 pass->shared_quad_state_list.back() |
| 973 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 950 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 974 | 951 |
| 975 RenderPassList pass_list; | 952 RenderPassList pass_list; |
| 976 pass_list.push_back(pass.Pass()); | 953 pass_list.push_back(pass.Pass()); |
| 977 OverlayCandidateList candidate_list; | 954 OverlayCandidateList candidate_list; |
| 978 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 955 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 979 &candidate_list, &damage_rect_); | 956 &candidate_list); |
| 980 ASSERT_EQ(1U, pass_list.size()); | 957 ASSERT_EQ(1U, pass_list.size()); |
| 981 ASSERT_EQ(1U, candidate_list.size()); | 958 ASSERT_EQ(1U, candidate_list.size()); |
| 982 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 959 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 983 } | 960 } |
| 984 | 961 |
| 985 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { | 962 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { |
| 986 gfx::Rect rect = kOverlayRect; | 963 gfx::Rect rect = kOverlayRect; |
| 987 rect.Offset(-rect.width(), -rect.height()); | 964 rect.Offset(-rect.width(), -rect.height()); |
| 988 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 965 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 989 CreateCandidateQuadAt(resource_provider_.get(), | 966 CreateCandidateQuadAt(resource_provider_.get(), |
| 990 pass->shared_quad_state_list.back(), pass.get(), rect); | 967 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 991 pass->shared_quad_state_list.back() | 968 pass->shared_quad_state_list.back() |
| 992 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 969 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 993 | 970 |
| 994 RenderPassList pass_list; | 971 RenderPassList pass_list; |
| 995 pass_list.push_back(pass.Pass()); | 972 pass_list.push_back(pass.Pass()); |
| 996 OverlayCandidateList candidate_list; | 973 OverlayCandidateList candidate_list; |
| 997 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 974 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 998 &candidate_list, &damage_rect_); | 975 &candidate_list); |
| 999 ASSERT_EQ(1U, pass_list.size()); | 976 ASSERT_EQ(1U, pass_list.size()); |
| 1000 ASSERT_EQ(1U, candidate_list.size()); | 977 ASSERT_EQ(1U, candidate_list.size()); |
| 1001 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 978 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 1002 } | 979 } |
| 1003 | 980 |
| 1004 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { | 981 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { |
| 1005 gfx::Rect rect = kOverlayRect; | 982 gfx::Rect rect = kOverlayRect; |
| 1006 rect.Offset(-rect.width(), 0); | 983 rect.Offset(-rect.width(), 0); |
| 1007 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 984 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1008 CreateCandidateQuadAt(resource_provider_.get(), | 985 CreateCandidateQuadAt(resource_provider_.get(), |
| 1009 pass->shared_quad_state_list.back(), pass.get(), rect); | 986 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 1010 pass->shared_quad_state_list.back() | 987 pass->shared_quad_state_list.back() |
| 1011 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 988 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 1012 | 989 |
| 1013 RenderPassList pass_list; | 990 RenderPassList pass_list; |
| 1014 pass_list.push_back(pass.Pass()); | 991 pass_list.push_back(pass.Pass()); |
| 1015 OverlayCandidateList candidate_list; | 992 OverlayCandidateList candidate_list; |
| 1016 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 993 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1017 &candidate_list, &damage_rect_); | 994 &candidate_list); |
| 1018 ASSERT_EQ(1U, pass_list.size()); | 995 ASSERT_EQ(1U, pass_list.size()); |
| 1019 ASSERT_EQ(1U, candidate_list.size()); | 996 ASSERT_EQ(1U, candidate_list.size()); |
| 1020 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 997 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 1021 } | 998 } |
| 1022 | 999 |
| 1023 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 1000 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 1024 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1001 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1025 CreateOpaqueQuadAt(resource_provider_.get(), | 1002 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1026 pass->shared_quad_state_list.back(), pass.get(), | 1003 pass->shared_quad_state_list.back(), pass.get(), |
| 1027 kOverlayTopLeftRect); | 1004 kOverlayTopLeftRect); |
| 1028 CreateCandidateQuadAt(resource_provider_.get(), | 1005 CreateCandidateQuadAt(resource_provider_.get(), |
| 1029 pass->shared_quad_state_list.back(), | 1006 pass->shared_quad_state_list.back(), |
| 1030 pass.get(), | 1007 pass.get(), |
| 1031 kOverlayBottomRightRect); | 1008 kOverlayBottomRightRect); |
| 1032 | 1009 |
| 1033 RenderPassList pass_list; | 1010 RenderPassList pass_list; |
| 1034 pass_list.push_back(pass.Pass()); | 1011 pass_list.push_back(pass.Pass()); |
| 1035 | 1012 |
| 1036 RenderPassList original_pass_list; | 1013 RenderPassList original_pass_list; |
| 1037 RenderPass::CopyAll(pass_list, &original_pass_list); | 1014 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1038 | 1015 |
| 1039 OverlayCandidateList candidate_list; | 1016 OverlayCandidateList candidate_list; |
| 1040 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1017 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1041 &candidate_list, &damage_rect_); | 1018 &candidate_list); |
| 1042 EXPECT_EQ(1U, pass_list.size()); | 1019 EXPECT_EQ(1U, pass_list.size()); |
| 1043 EXPECT_EQ(1U, candidate_list.size()); | 1020 EXPECT_EQ(1U, candidate_list.size()); |
| 1044 } | 1021 } |
| 1045 | 1022 |
| 1046 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 1023 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 1047 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1024 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1048 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1025 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1049 shared_state->opacity = 0.f; | 1026 shared_state->opacity = 0.f; |
| 1050 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1027 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1051 kOverlayBottomRightRect); | 1028 kOverlayBottomRightRect); |
| 1052 shared_state = pass->CreateAndAppendSharedQuadState(); | 1029 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1053 shared_state->opacity = 1.f; | 1030 shared_state->opacity = 1.f; |
| 1054 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1031 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1055 kOverlayBottomRightRect); | 1032 kOverlayBottomRightRect); |
| 1056 | 1033 |
| 1057 RenderPassList pass_list; | 1034 RenderPassList pass_list; |
| 1058 pass_list.push_back(pass.Pass()); | 1035 pass_list.push_back(pass.Pass()); |
| 1059 | 1036 |
| 1060 RenderPassList original_pass_list; | 1037 RenderPassList original_pass_list; |
| 1061 RenderPass::CopyAll(pass_list, &original_pass_list); | 1038 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1062 | 1039 |
| 1063 OverlayCandidateList candidate_list; | 1040 OverlayCandidateList candidate_list; |
| 1064 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1041 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1065 &candidate_list, &damage_rect_); | 1042 &candidate_list); |
| 1066 EXPECT_EQ(1U, pass_list.size()); | 1043 EXPECT_EQ(1U, pass_list.size()); |
| 1067 EXPECT_EQ(1U, candidate_list.size()); | 1044 EXPECT_EQ(1U, candidate_list.size()); |
| 1068 } | 1045 } |
| 1069 | 1046 |
| 1070 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1047 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1071 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1048 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1072 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1049 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 1073 SK_ColorTRANSPARENT, pass.get(), | 1050 SK_ColorTRANSPARENT, pass.get(), |
| 1074 kOverlayBottomRightRect); | 1051 kOverlayBottomRightRect); |
| 1075 CreateCandidateQuadAt(resource_provider_.get(), | 1052 CreateCandidateQuadAt(resource_provider_.get(), |
| 1076 pass->shared_quad_state_list.back(), pass.get(), | 1053 pass->shared_quad_state_list.back(), pass.get(), |
| 1077 kOverlayBottomRightRect); | 1054 kOverlayBottomRightRect); |
| 1078 | 1055 |
| 1079 RenderPassList pass_list; | 1056 RenderPassList pass_list; |
| 1080 pass_list.push_back(pass.Pass()); | 1057 pass_list.push_back(pass.Pass()); |
| 1081 | 1058 |
| 1082 RenderPassList original_pass_list; | 1059 RenderPassList original_pass_list; |
| 1083 RenderPass::CopyAll(pass_list, &original_pass_list); | 1060 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1084 | 1061 |
| 1085 OverlayCandidateList candidate_list; | 1062 OverlayCandidateList candidate_list; |
| 1086 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1063 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1087 &candidate_list, &damage_rect_); | 1064 &candidate_list); |
| 1088 EXPECT_EQ(1U, pass_list.size()); | 1065 EXPECT_EQ(1U, pass_list.size()); |
| 1089 EXPECT_EQ(1U, candidate_list.size()); | 1066 EXPECT_EQ(1U, candidate_list.size()); |
| 1090 } | 1067 } |
| 1091 | 1068 |
| 1092 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1069 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 1093 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1070 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1094 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1071 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1095 shared_state->opacity = 0.5f; | 1072 shared_state->opacity = 0.5f; |
| 1096 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1073 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1097 kOverlayBottomRightRect); | 1074 kOverlayBottomRightRect); |
| 1098 shared_state = pass->CreateAndAppendSharedQuadState(); | 1075 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1099 shared_state->opacity = 1.f; | 1076 shared_state->opacity = 1.f; |
| 1100 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1077 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1101 kOverlayBottomRightRect); | 1078 kOverlayBottomRightRect); |
| 1102 | 1079 |
| 1103 RenderPassList pass_list; | 1080 RenderPassList pass_list; |
| 1104 pass_list.push_back(pass.Pass()); | 1081 pass_list.push_back(pass.Pass()); |
| 1105 | 1082 |
| 1106 RenderPassList original_pass_list; | 1083 RenderPassList original_pass_list; |
| 1107 RenderPass::CopyAll(pass_list, &original_pass_list); | 1084 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1108 | 1085 |
| 1109 OverlayCandidateList candidate_list; | 1086 OverlayCandidateList candidate_list; |
| 1110 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1087 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1111 &candidate_list, &damage_rect_); | 1088 &candidate_list); |
| 1112 EXPECT_EQ(1U, pass_list.size()); | 1089 EXPECT_EQ(1U, pass_list.size()); |
| 1113 EXPECT_EQ(0U, candidate_list.size()); | 1090 EXPECT_EQ(0U, candidate_list.size()); |
| 1114 } | 1091 } |
| 1115 | 1092 |
| 1116 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 1093 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 1117 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1094 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1118 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1095 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1119 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 1096 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 1120 kOverlayBottomRightRect)->opaque_rect = | 1097 kOverlayBottomRightRect)->opaque_rect = |
| 1121 kOverlayBottomRightRect; | 1098 kOverlayBottomRightRect; |
| 1122 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1099 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1123 kOverlayBottomRightRect); | 1100 kOverlayBottomRightRect); |
| 1124 | 1101 |
| 1125 RenderPassList pass_list; | 1102 RenderPassList pass_list; |
| 1126 pass_list.push_back(pass.Pass()); | 1103 pass_list.push_back(pass.Pass()); |
| 1127 | 1104 |
| 1128 RenderPassList original_pass_list; | 1105 RenderPassList original_pass_list; |
| 1129 RenderPass::CopyAll(pass_list, &original_pass_list); | 1106 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1130 | 1107 |
| 1131 OverlayCandidateList candidate_list; | 1108 OverlayCandidateList candidate_list; |
| 1132 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1109 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1133 &candidate_list, &damage_rect_); | 1110 &candidate_list); |
| 1134 EXPECT_EQ(1U, pass_list.size()); | 1111 EXPECT_EQ(1U, pass_list.size()); |
| 1135 EXPECT_EQ(0U, candidate_list.size()); | 1112 EXPECT_EQ(0U, candidate_list.size()); |
| 1136 } | 1113 } |
| 1137 | 1114 |
| 1138 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 1115 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 1139 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1116 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1140 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1117 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1141 pass->shared_quad_state_list.back(), | 1118 pass->shared_quad_state_list.back(), |
| 1142 pass.get(), kSwapTransform); | 1119 pass.get(), kSwapTransform); |
| 1143 | 1120 |
| 1144 RenderPassList pass_list; | 1121 RenderPassList pass_list; |
| 1145 pass_list.push_back(pass.Pass()); | 1122 pass_list.push_back(pass.Pass()); |
| 1146 OverlayCandidateList candidate_list; | 1123 OverlayCandidateList candidate_list; |
| 1147 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1124 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1148 &candidate_list, &damage_rect_); | 1125 &candidate_list); |
| 1149 ASSERT_EQ(1U, pass_list.size()); | 1126 ASSERT_EQ(1U, pass_list.size()); |
| 1150 EXPECT_EQ(0U, candidate_list.size()); | 1127 EXPECT_EQ(0U, candidate_list.size()); |
| 1151 } | 1128 } |
| 1152 | 1129 |
| 1153 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { | 1130 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { |
| 1154 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1131 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1155 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1132 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1156 pass->shared_quad_state_list.back(), | 1133 pass->shared_quad_state_list.back(), |
| 1157 pass.get(), kXMirrorTransform); | 1134 pass.get(), kXMirrorTransform); |
| 1158 | 1135 |
| 1159 RenderPassList pass_list; | 1136 RenderPassList pass_list; |
| 1160 pass_list.push_back(pass.Pass()); | 1137 pass_list.push_back(pass.Pass()); |
| 1161 OverlayCandidateList candidate_list; | 1138 OverlayCandidateList candidate_list; |
| 1162 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1139 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1163 &candidate_list, &damage_rect_); | 1140 &candidate_list); |
| 1164 ASSERT_EQ(1U, pass_list.size()); | 1141 ASSERT_EQ(1U, pass_list.size()); |
| 1165 EXPECT_EQ(1U, candidate_list.size()); | 1142 EXPECT_EQ(1U, candidate_list.size()); |
| 1166 } | 1143 } |
| 1167 | 1144 |
| 1168 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { | 1145 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { |
| 1169 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1146 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1170 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1147 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1171 pass->shared_quad_state_list.back(), | 1148 pass->shared_quad_state_list.back(), |
| 1172 pass.get(), kBothMirrorTransform); | 1149 pass.get(), kBothMirrorTransform); |
| 1173 | 1150 |
| 1174 RenderPassList pass_list; | 1151 RenderPassList pass_list; |
| 1175 pass_list.push_back(pass.Pass()); | 1152 pass_list.push_back(pass.Pass()); |
| 1176 OverlayCandidateList candidate_list; | 1153 OverlayCandidateList candidate_list; |
| 1177 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1154 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1178 &candidate_list, &damage_rect_); | 1155 &candidate_list); |
| 1179 ASSERT_EQ(1U, pass_list.size()); | 1156 ASSERT_EQ(1U, pass_list.size()); |
| 1180 EXPECT_EQ(1U, candidate_list.size()); | 1157 EXPECT_EQ(1U, candidate_list.size()); |
| 1181 } | 1158 } |
| 1182 | 1159 |
| 1183 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { | 1160 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { |
| 1184 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1161 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1185 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1162 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1186 pass->shared_quad_state_list.back(), | 1163 pass->shared_quad_state_list.back(), |
| 1187 pass.get(), kNormalTransform); | 1164 pass.get(), kNormalTransform); |
| 1188 | 1165 |
| 1189 RenderPassList pass_list; | 1166 RenderPassList pass_list; |
| 1190 pass_list.push_back(pass.Pass()); | 1167 pass_list.push_back(pass.Pass()); |
| 1191 OverlayCandidateList candidate_list; | 1168 OverlayCandidateList candidate_list; |
| 1192 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1169 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1193 &candidate_list, &damage_rect_); | 1170 &candidate_list); |
| 1194 ASSERT_EQ(1U, pass_list.size()); | 1171 ASSERT_EQ(1U, pass_list.size()); |
| 1195 EXPECT_EQ(1U, candidate_list.size()); | 1172 EXPECT_EQ(1U, candidate_list.size()); |
| 1196 } | 1173 } |
| 1197 | 1174 |
| 1198 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1175 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 1199 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1176 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1200 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1177 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1201 pass->shared_quad_state_list.back(), | 1178 pass->shared_quad_state_list.back(), |
| 1202 pass.get(), kYMirrorTransform); | 1179 pass.get(), kYMirrorTransform); |
| 1203 | 1180 |
| 1204 RenderPassList pass_list; | 1181 RenderPassList pass_list; |
| 1205 pass_list.push_back(pass.Pass()); | 1182 pass_list.push_back(pass.Pass()); |
| 1206 OverlayCandidateList candidate_list; | 1183 OverlayCandidateList candidate_list; |
| 1207 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1184 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1208 &candidate_list, &damage_rect_); | 1185 &candidate_list); |
| 1209 ASSERT_EQ(1U, pass_list.size()); | 1186 ASSERT_EQ(1U, pass_list.size()); |
| 1210 EXPECT_EQ(1U, candidate_list.size()); | 1187 EXPECT_EQ(1U, candidate_list.size()); |
| 1211 } | 1188 } |
| 1212 | 1189 |
| 1213 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1190 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1214 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1191 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1215 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1192 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1216 pass->shared_quad_state_list.back(), pass.get()); | 1193 pass->shared_quad_state_list.back(), pass.get()); |
| 1217 CreateCandidateQuadAt(resource_provider_.get(), | 1194 CreateCandidateQuadAt(resource_provider_.get(), |
| 1218 pass->shared_quad_state_list.back(), pass.get(), | 1195 pass->shared_quad_state_list.back(), pass.get(), |
| 1219 kOverlayBottomRightRect); | 1196 kOverlayBottomRightRect); |
| 1220 | 1197 |
| 1221 RenderPassList pass_list; | 1198 RenderPassList pass_list; |
| 1222 pass_list.push_back(pass.Pass()); | 1199 pass_list.push_back(pass.Pass()); |
| 1223 | 1200 |
| 1224 OverlayCandidateList candidate_list; | 1201 OverlayCandidateList candidate_list; |
| 1225 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1202 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1226 &candidate_list, &damage_rect_); | 1203 &candidate_list); |
| 1227 EXPECT_EQ(1U, pass_list.size()); | 1204 EXPECT_EQ(1U, pass_list.size()); |
| 1228 ASSERT_EQ(1U, candidate_list.size()); | 1205 ASSERT_EQ(1U, candidate_list.size()); |
| 1229 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1206 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1230 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); | 1207 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); |
| 1231 // The overlay quad should have changed to a SOLID_COLOR quad. | 1208 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1232 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1209 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 1233 } | 1210 } |
| 1234 | 1211 |
| 1235 TEST_F(UnderlayTest, AllowOnTop) { | 1212 TEST_F(UnderlayTest, AllowOnTop) { |
| 1236 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1213 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1237 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1214 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1238 pass->shared_quad_state_list.back(), | 1215 pass->shared_quad_state_list.back(), |
| 1239 pass.get()); | 1216 pass.get()); |
| 1240 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1217 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 1241 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1218 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1242 pass->shared_quad_state_list.back(), pass.get()); | 1219 pass->shared_quad_state_list.back(), pass.get()); |
| 1243 | 1220 |
| 1244 RenderPassList pass_list; | 1221 RenderPassList pass_list; |
| 1245 pass_list.push_back(pass.Pass()); | 1222 pass_list.push_back(pass.Pass()); |
| 1246 | 1223 |
| 1247 OverlayCandidateList candidate_list; | 1224 OverlayCandidateList candidate_list; |
| 1248 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1225 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1249 &candidate_list, &damage_rect_); | 1226 &candidate_list); |
| 1250 EXPECT_EQ(1U, pass_list.size()); | 1227 EXPECT_EQ(1U, pass_list.size()); |
| 1251 ASSERT_EQ(1U, candidate_list.size()); | 1228 ASSERT_EQ(1U, candidate_list.size()); |
| 1252 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1229 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1253 // The overlay quad should have changed to a SOLID_COLOR quad. | 1230 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1254 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1231 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 1255 } | 1232 } |
| 1256 | 1233 |
| 1257 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { | 1234 TEST_F(AllOrNothingOverlayTest, SuccessfulOverlappingOverlays) { |
| 1258 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1235 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1259 | 1236 |
| 1260 // Add two overlapping candidates. | 1237 // Add two overlapping candidates. |
| 1261 CreateCandidateQuadAt(resource_provider_.get(), | 1238 CreateCandidateQuadAt(resource_provider_.get(), |
| 1262 pass->shared_quad_state_list.back(), pass.get(), | 1239 pass->shared_quad_state_list.back(), pass.get(), |
| 1263 kOverlayTopLeftRect); | 1240 kOverlayTopLeftRect); |
| 1264 CreateCandidateQuadAt(resource_provider_.get(), | 1241 CreateCandidateQuadAt(resource_provider_.get(), |
| 1265 pass->shared_quad_state_list.back(), pass.get(), | 1242 pass->shared_quad_state_list.back(), pass.get(), |
| 1266 kOverlayRect); | 1243 kOverlayRect); |
| 1267 | 1244 |
| 1268 RenderPassList pass_list; | 1245 RenderPassList pass_list; |
| 1269 pass_list.push_back(pass.Pass()); | 1246 pass_list.push_back(pass.Pass()); |
| 1270 OverlayCandidateList candidates; | 1247 OverlayCandidateList candidates; |
| 1271 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1248 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1272 &candidates, &damage_rect_); | 1249 &candidates); |
| 1273 | 1250 |
| 1274 // Both quads should become overlays. | 1251 // Both quads should become overlays. |
| 1275 EXPECT_EQ(2u, candidates.size()); | 1252 EXPECT_EQ(2u, candidates.size()); |
| 1276 EXPECT_EQ(-2, candidates[0].plane_z_order); | 1253 EXPECT_EQ(-1, candidates[0].plane_z_order); |
| 1277 EXPECT_EQ(-1, candidates[1].plane_z_order); | 1254 EXPECT_EQ(-2, candidates[1].plane_z_order); |
| 1278 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[1].display_rect); | 1255 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidates[0].display_rect); |
| 1279 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[0].display_rect); | 1256 EXPECT_EQ(gfx::RectF(kOverlayRect), candidates[1].display_rect); |
| 1280 | 1257 |
| 1281 // All quads should be gone. | 1258 // All quads should be gone. |
| 1282 EXPECT_TRUE(pass_list.back()->quad_list.empty()); | 1259 EXPECT_TRUE(pass_list.back()->quad_list.empty()); |
| 1283 } | 1260 } |
| 1284 | 1261 |
| 1285 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { | 1262 TEST_F(AllOrNothingOverlayTest, RejectQuadWithTransform) { |
| 1286 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1263 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1287 | 1264 |
| 1288 CreateCandidateQuadAt(resource_provider_.get(), | 1265 CreateCandidateQuadAt(resource_provider_.get(), |
| 1289 pass->shared_quad_state_list.back(), pass.get(), | 1266 pass->shared_quad_state_list.back(), pass.get(), |
| 1290 kOverlayTopLeftRect); | 1267 kOverlayTopLeftRect); |
| 1291 | 1268 |
| 1292 // Add a rotated quad that can't be promoted into overlay. | 1269 // Add a rotated quad that can't be promoted into overlay. |
| 1293 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1270 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1294 shared_state->opacity = 1.f; | 1271 shared_state->opacity = 1.f; |
| 1295 shared_state->quad_to_target_transform.Rotate(90); | 1272 shared_state->quad_to_target_transform.Rotate(90); |
| 1296 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1273 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1297 kOverlayBottomRightRect); | 1274 kOverlayBottomRightRect); |
| 1298 | 1275 |
| 1299 RenderPassList pass_list; | 1276 RenderPassList pass_list; |
| 1300 pass_list.push_back(pass.Pass()); | 1277 pass_list.push_back(pass.Pass()); |
| 1301 OverlayCandidateList candidates; | 1278 OverlayCandidateList candidates; |
| 1302 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, | 1279 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, |
| 1303 &candidates, &damage_rect_); | 1280 &candidates); |
| 1304 | 1281 |
| 1305 // No quads should become overlays. | 1282 // No quads should become overlays. |
| 1306 EXPECT_EQ(0u, candidates.size()); | 1283 EXPECT_EQ(0u, candidates.size()); |
| 1307 EXPECT_EQ(2u, pass_list.back()->quad_list.size()); | 1284 EXPECT_EQ(2u, pass_list.back()->quad_list.size()); |
| 1308 } | 1285 } |
| 1309 | 1286 |
| 1310 class OverlayInfoRendererGL : public GLRenderer { | 1287 class OverlayInfoRendererGL : public GLRenderer { |
| 1311 public: | 1288 public: |
| 1312 OverlayInfoRendererGL(RendererClient* client, | 1289 OverlayInfoRendererGL(RendererClient* client, |
| 1313 const RendererSettings* settings, | 1290 const RendererSettings* settings, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1330 | 1307 |
| 1331 void FinishDrawingFrame(DrawingFrame* frame) override { | 1308 void FinishDrawingFrame(DrawingFrame* frame) override { |
| 1332 GLRenderer::FinishDrawingFrame(frame); | 1309 GLRenderer::FinishDrawingFrame(frame); |
| 1333 | 1310 |
| 1334 if (!expect_overlays_) { | 1311 if (!expect_overlays_) { |
| 1335 EXPECT_EQ(0U, frame->overlay_list.size()); | 1312 EXPECT_EQ(0U, frame->overlay_list.size()); |
| 1336 return; | 1313 return; |
| 1337 } | 1314 } |
| 1338 | 1315 |
| 1339 ASSERT_EQ(2U, frame->overlay_list.size()); | 1316 ASSERT_EQ(2U, frame->overlay_list.size()); |
| 1340 EXPECT_GE(frame->overlay_list.back().resource_id, 0U); | 1317 EXPECT_NE(0U, frame->overlay_list.back().resource_id); |
| 1341 } | 1318 } |
| 1342 | 1319 |
| 1343 void set_expect_overlays(bool expect_overlays) { | 1320 void set_expect_overlays(bool expect_overlays) { |
| 1344 expect_overlays_ = expect_overlays; | 1321 expect_overlays_ = expect_overlays; |
| 1345 } | 1322 } |
| 1346 | 1323 |
| 1347 private: | 1324 private: |
| 1348 bool expect_overlays_; | 1325 bool expect_overlays_; |
| 1349 }; | 1326 }; |
| 1350 | 1327 |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1625 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1602 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1626 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1603 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1627 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1604 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1628 SwapBuffers(); | 1605 SwapBuffers(); |
| 1629 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1606 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1630 Mock::VerifyAndClearExpectations(&scheduler_); | 1607 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1631 } | 1608 } |
| 1632 | 1609 |
| 1633 } // namespace | 1610 } // namespace |
| 1634 } // namespace cc | 1611 } // namespace cc |
| OLD | NEW |