| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/containers/flat_map.h" | 10 #include "base/containers/flat_map.h" |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 | 499 |
| 500 // Add something behind it. | 500 // Add something behind it. |
| 501 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 501 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 502 pass->shared_quad_state_list.back(), pass.get()); | 502 pass->shared_quad_state_list.back(), pass.get()); |
| 503 | 503 |
| 504 // Check for potential candidates. | 504 // Check for potential candidates. |
| 505 OverlayCandidateList candidate_list; | 505 OverlayCandidateList candidate_list; |
| 506 base::flat_map<int, FilterOperations*> render_pass_filters; | 506 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 507 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 507 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 508 overlay_processor_->ProcessForOverlays( | 508 overlay_processor_->ProcessForOverlays( |
| 509 resource_provider_.get(), pass.get(), render_pass_filters, | 509 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 510 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 510 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 511 &damage_rect_, &content_bounds_); | 511 &damage_rect_, &content_bounds_); |
| 512 ASSERT_EQ(1U, candidate_list.size()); | 512 ASSERT_EQ(1U, candidate_list.size()); |
| 513 | 513 |
| 514 RenderPass* main_pass = pass.get(); | 514 RenderPass* main_pass = pass.get(); |
| 515 // Check that all the quads are gone. | 515 // Check that all the quads are gone. |
| 516 EXPECT_EQ(0U, main_pass->quad_list.size()); | 516 EXPECT_EQ(0U, main_pass->quad_list.size()); |
| 517 // Check that we have only one overlay. | 517 // Check that we have only one overlay. |
| 518 EXPECT_EQ(1U, candidate_list.size()); | 518 EXPECT_EQ(1U, candidate_list.size()); |
| 519 // Check that the right resource id got extracted. | 519 // Check that the right resource id got extracted. |
| 520 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); | 520 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); |
| 521 } | 521 } |
| 522 | 522 |
| 523 TEST_F(FullscreenOverlayTest, AlphaFail) { | 523 TEST_F(FullscreenOverlayTest, AlphaFail) { |
| 524 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 524 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 525 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( | 525 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( |
| 526 resource_provider_.get(), pass->shared_quad_state_list.back(), | 526 resource_provider_.get(), pass->shared_quad_state_list.back(), |
| 527 pass.get()); | 527 pass.get()); |
| 528 original_quad->opaque_rect = gfx::Rect(0, 0, 0, 0); | 528 original_quad->opaque_rect = gfx::Rect(0, 0, 0, 0); |
| 529 | 529 |
| 530 // Check for potential candidates. | 530 // Check for potential candidates. |
| 531 OverlayCandidateList candidate_list; | 531 OverlayCandidateList candidate_list; |
| 532 base::flat_map<int, FilterOperations*> render_pass_filters; | 532 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 533 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 533 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 534 overlay_processor_->ProcessForOverlays( | 534 overlay_processor_->ProcessForOverlays( |
| 535 resource_provider_.get(), pass.get(), render_pass_filters, | 535 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 536 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 536 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 537 &damage_rect_, &content_bounds_); | 537 &damage_rect_, &content_bounds_); |
| 538 | 538 |
| 539 RenderPass* main_pass = pass.get(); | 539 RenderPass* main_pass = pass.get(); |
| 540 // Check that all the quads are gone. | 540 // Check that all the quads are gone. |
| 541 EXPECT_EQ(1U, main_pass->quad_list.size()); | 541 EXPECT_EQ(1U, main_pass->quad_list.size()); |
| 542 // Check that we have only one overlay. | 542 // Check that we have only one overlay. |
| 543 EXPECT_EQ(0U, candidate_list.size()); | 543 EXPECT_EQ(0U, candidate_list.size()); |
| 544 } | 544 } |
| 545 | 545 |
| 546 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { | 546 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { |
| 547 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 547 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 548 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( | 548 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( |
| 549 resource_provider_.get(), pass->shared_quad_state_list.back(), | 549 resource_provider_.get(), pass->shared_quad_state_list.back(), |
| 550 pass.get()); | 550 pass.get()); |
| 551 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); | 551 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); |
| 552 | 552 |
| 553 // Check for potential candidates. | 553 // Check for potential candidates. |
| 554 OverlayCandidateList candidate_list; | 554 OverlayCandidateList candidate_list; |
| 555 base::flat_map<int, FilterOperations*> render_pass_filters; | 555 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 556 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 556 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 557 overlay_processor_->ProcessForOverlays( | 557 overlay_processor_->ProcessForOverlays( |
| 558 resource_provider_.get(), pass.get(), render_pass_filters, | 558 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 559 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 559 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 560 &damage_rect_, &content_bounds_); | 560 &damage_rect_, &content_bounds_); |
| 561 ASSERT_EQ(0U, candidate_list.size()); | 561 ASSERT_EQ(0U, candidate_list.size()); |
| 562 | 562 |
| 563 RenderPass* main_pass = pass.get(); | 563 RenderPass* main_pass = pass.get(); |
| 564 // Check that the quad is not gone. | 564 // Check that the quad is not gone. |
| 565 EXPECT_EQ(1U, main_pass->quad_list.size()); | 565 EXPECT_EQ(1U, main_pass->quad_list.size()); |
| 566 } | 566 } |
| 567 | 567 |
| 568 TEST_F(FullscreenOverlayTest, OnTopFail) { | 568 TEST_F(FullscreenOverlayTest, OnTopFail) { |
| 569 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 569 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 570 | 570 |
| 571 // Add something in front of it. | 571 // Add something in front of it. |
| 572 CreateOpaqueQuadAt(resource_provider_.get(), | 572 CreateOpaqueQuadAt(resource_provider_.get(), |
| 573 pass->shared_quad_state_list.back(), pass.get(), | 573 pass->shared_quad_state_list.back(), pass.get(), |
| 574 kOverlayTopLeftRect); | 574 kOverlayTopLeftRect); |
| 575 | 575 |
| 576 CreateFullscreenCandidateQuad(resource_provider_.get(), | 576 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 577 pass->shared_quad_state_list.back(), | 577 pass->shared_quad_state_list.back(), |
| 578 pass.get()); | 578 pass.get()); |
| 579 | 579 |
| 580 // Check for potential candidates. | 580 // Check for potential candidates. |
| 581 OverlayCandidateList candidate_list; | 581 OverlayCandidateList candidate_list; |
| 582 base::flat_map<int, FilterOperations*> render_pass_filters; | 582 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 583 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 583 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 584 overlay_processor_->ProcessForOverlays( | 584 overlay_processor_->ProcessForOverlays( |
| 585 resource_provider_.get(), pass.get(), render_pass_filters, | 585 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 586 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 586 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 587 &damage_rect_, &content_bounds_); | 587 &damage_rect_, &content_bounds_); |
| 588 ASSERT_EQ(0U, candidate_list.size()); | 588 ASSERT_EQ(0U, candidate_list.size()); |
| 589 | 589 |
| 590 RenderPass* main_pass = pass.get(); | 590 RenderPass* main_pass = pass.get(); |
| 591 // Check that the 2 quads are not gone. | 591 // Check that the 2 quads are not gone. |
| 592 EXPECT_EQ(2U, main_pass->quad_list.size()); | 592 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 593 } | 593 } |
| 594 | 594 |
| 595 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { | 595 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { |
| 596 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 596 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 597 gfx::Rect inset_rect = pass->output_rect; | 597 gfx::Rect inset_rect = pass->output_rect; |
| 598 inset_rect.Inset(0, 1, 0, 1); | 598 inset_rect.Inset(0, 1, 0, 1); |
| 599 CreateCandidateQuadAt(resource_provider_.get(), | 599 CreateCandidateQuadAt(resource_provider_.get(), |
| 600 pass->shared_quad_state_list.back(), pass.get(), | 600 pass->shared_quad_state_list.back(), pass.get(), |
| 601 inset_rect); | 601 inset_rect); |
| 602 | 602 |
| 603 // Check for potential candidates. | 603 // Check for potential candidates. |
| 604 OverlayCandidateList candidate_list; | 604 OverlayCandidateList candidate_list; |
| 605 base::flat_map<int, FilterOperations*> render_pass_filters; | 605 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 606 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 606 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 607 overlay_processor_->ProcessForOverlays( | 607 overlay_processor_->ProcessForOverlays( |
| 608 resource_provider_.get(), pass.get(), render_pass_filters, | 608 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 609 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 609 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 610 &damage_rect_, &content_bounds_); | 610 &damage_rect_, &content_bounds_); |
| 611 ASSERT_EQ(0U, candidate_list.size()); | 611 ASSERT_EQ(0U, candidate_list.size()); |
| 612 | 612 |
| 613 RenderPass* main_pass = pass.get(); | 613 RenderPass* main_pass = pass.get(); |
| 614 // Check that the quad is not gone. | 614 // Check that the quad is not gone. |
| 615 EXPECT_EQ(1U, main_pass->quad_list.size()); | 615 EXPECT_EQ(1U, main_pass->quad_list.size()); |
| 616 } | 616 } |
| 617 | 617 |
| 618 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { | 618 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { |
| 619 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 619 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 620 | 620 |
| 621 // Add something in front of it that is fully transparent. | 621 // Add something in front of it that is fully transparent. |
| 622 pass->shared_quad_state_list.back()->opacity = 0.0f; | 622 pass->shared_quad_state_list.back()->opacity = 0.0f; |
| 623 CreateOpaqueQuadAt(resource_provider_.get(), | 623 CreateOpaqueQuadAt(resource_provider_.get(), |
| 624 pass->shared_quad_state_list.back(), pass.get(), | 624 pass->shared_quad_state_list.back(), pass.get(), |
| 625 kOverlayTopLeftRect); | 625 kOverlayTopLeftRect); |
| 626 | 626 |
| 627 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 627 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 628 shared_state->opacity = 1.f; | 628 shared_state->opacity = 1.f; |
| 629 CreateFullscreenCandidateQuad(resource_provider_.get(), | 629 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 630 pass->shared_quad_state_list.back(), | 630 pass->shared_quad_state_list.back(), |
| 631 pass.get()); | 631 pass.get()); |
| 632 | 632 |
| 633 // Check for potential candidates. | 633 // Check for potential candidates. |
| 634 OverlayCandidateList candidate_list; | 634 OverlayCandidateList candidate_list; |
| 635 base::flat_map<int, FilterOperations*> render_pass_filters; | 635 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 636 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 636 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 637 overlay_processor_->ProcessForOverlays( | 637 overlay_processor_->ProcessForOverlays( |
| 638 resource_provider_.get(), pass.get(), render_pass_filters, | 638 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 639 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 639 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 640 &damage_rect_, &content_bounds_); | 640 &damage_rect_, &content_bounds_); |
| 641 ASSERT_EQ(1U, candidate_list.size()); | 641 ASSERT_EQ(1U, candidate_list.size()); |
| 642 | 642 |
| 643 // Check that the fullscreen quad is gone. | 643 // Check that the fullscreen quad is gone. |
| 644 for (const DrawQuad* quad : pass->quad_list) { | 644 for (const DrawQuad* quad : pass->quad_list) { |
| 645 EXPECT_NE(pass->output_rect, quad->rect); | 645 EXPECT_NE(pass->output_rect, quad->rect); |
| 646 } | 646 } |
| 647 } | 647 } |
| 648 | 648 |
| 649 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { | 649 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { |
| 650 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 650 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 651 TextureDrawQuad* original_quad = | 651 TextureDrawQuad* original_quad = |
| 652 CreateFullscreenCandidateQuad(resource_provider_.get(), | 652 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 653 pass->shared_quad_state_list.back(), | 653 pass->shared_quad_state_list.back(), |
| 654 pass.get()); | 654 pass.get()); |
| 655 unsigned original_resource_id = original_quad->resource_id(); | 655 unsigned original_resource_id = original_quad->resource_id(); |
| 656 | 656 |
| 657 // Add something behind it. | 657 // Add something behind it. |
| 658 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 658 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 659 pass->shared_quad_state_list.back(), pass.get()); | 659 pass->shared_quad_state_list.back(), pass.get()); |
| 660 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 660 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 661 pass->shared_quad_state_list.back(), pass.get()); | 661 pass->shared_quad_state_list.back(), pass.get()); |
| 662 | 662 |
| 663 // Check for potential candidates. | 663 // Check for potential candidates. |
| 664 OverlayCandidateList candidate_list; | 664 OverlayCandidateList candidate_list; |
| 665 base::flat_map<int, FilterOperations*> render_pass_filters; | 665 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 666 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 666 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 667 overlay_processor_->ProcessForOverlays( | 667 overlay_processor_->ProcessForOverlays( |
| 668 resource_provider_.get(), pass.get(), render_pass_filters, | 668 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 669 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 669 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 670 &damage_rect_, &content_bounds_); | 670 &damage_rect_, &content_bounds_); |
| 671 ASSERT_EQ(1U, candidate_list.size()); | 671 ASSERT_EQ(1U, candidate_list.size()); |
| 672 | 672 |
| 673 RenderPass* main_pass = pass.get(); | 673 RenderPass* main_pass = pass.get(); |
| 674 // Check that the quad is gone. | 674 // Check that the quad is gone. |
| 675 EXPECT_EQ(2U, main_pass->quad_list.size()); | 675 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 676 const QuadList& quad_list = main_pass->quad_list; | 676 const QuadList& quad_list = main_pass->quad_list; |
| 677 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 677 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 678 it != quad_list.BackToFrontEnd(); | 678 it != quad_list.BackToFrontEnd(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 706 | 706 |
| 707 // Add something behind it. | 707 // Add something behind it. |
| 708 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 708 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 709 pass->shared_quad_state_list.back(), pass.get()); | 709 pass->shared_quad_state_list.back(), pass.get()); |
| 710 | 710 |
| 711 // Check for potential candidates. | 711 // Check for potential candidates. |
| 712 OverlayCandidateList candidate_list; | 712 OverlayCandidateList candidate_list; |
| 713 base::flat_map<int, FilterOperations*> render_pass_filters; | 713 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 714 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 714 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 715 overlay_processor_->ProcessForOverlays( | 715 overlay_processor_->ProcessForOverlays( |
| 716 resource_provider_.get(), pass.get(), render_pass_filters, | 716 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 717 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 717 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 718 &damage_rect_, &content_bounds_); | 718 &damage_rect_, &content_bounds_); |
| 719 ASSERT_EQ(1U, candidate_list.size()); | 719 ASSERT_EQ(1U, candidate_list.size()); |
| 720 | 720 |
| 721 RenderPass* main_pass = pass.get(); | 721 RenderPass* main_pass = pass.get(); |
| 722 // Check that one quad is gone. | 722 // Check that one quad is gone. |
| 723 EXPECT_EQ(2U, main_pass->quad_list.size()); | 723 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 724 // Check that we have only one overlay. | 724 // Check that we have only one overlay. |
| 725 EXPECT_EQ(1U, candidate_list.size()); | 725 EXPECT_EQ(1U, candidate_list.size()); |
| 726 // Check that the right resource id (bigger quad) got extracted. | 726 // Check that the right resource id (bigger quad) got extracted. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 747 OverlayCandidate output_surface_plane; | 747 OverlayCandidate output_surface_plane; |
| 748 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); | 748 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); |
| 749 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 749 output_surface_plane.quad_rect_in_target_space = kOverlayRect; |
| 750 output_surface_plane.use_output_surface_for_resource = true; | 750 output_surface_plane.use_output_surface_for_resource = true; |
| 751 output_surface_plane.overlay_handled = true; | 751 output_surface_plane.overlay_handled = true; |
| 752 candidate_list.push_back(output_surface_plane); | 752 candidate_list.push_back(output_surface_plane); |
| 753 | 753 |
| 754 base::flat_map<int, FilterOperations*> render_pass_filters; | 754 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 755 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 755 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 756 overlay_processor_->ProcessForOverlays( | 756 overlay_processor_->ProcessForOverlays( |
| 757 resource_provider_.get(), pass.get(), render_pass_filters, | 757 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 758 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 758 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 759 &damage_rect_, &content_bounds_); | 759 &damage_rect_, &content_bounds_); |
| 760 EXPECT_TRUE(damage_rect_.IsEmpty()); | 760 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 761 } | 761 } |
| 762 | 762 |
| 763 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 763 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
| 764 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 764 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 765 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 765 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 766 pass->shared_quad_state_list.back(), pass.get()); | 766 pass->shared_quad_state_list.back(), pass.get()); |
| 767 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 767 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 768 pass->shared_quad_state_list.back(), pass.get()); | 768 pass->shared_quad_state_list.back(), pass.get()); |
| 769 | 769 |
| 770 RenderPassList pass_list; | 770 RenderPassList pass_list; |
| 771 pass_list.push_back(std::move(pass)); | 771 pass_list.push_back(std::move(pass)); |
| 772 | 772 |
| 773 RenderPassList original_pass_list; | 773 RenderPassList original_pass_list; |
| 774 RenderPass::CopyAll(pass_list, &original_pass_list); | 774 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 775 | 775 |
| 776 OverlayCandidateList candidate_list; | 776 OverlayCandidateList candidate_list; |
| 777 base::flat_map<int, FilterOperations*> render_pass_filters; | 777 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 778 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 778 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 779 overlay_processor_->ProcessForOverlays( | 779 overlay_processor_->ProcessForOverlays( |
| 780 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 780 resource_provider_.get(), pass_list.back().get(), false, |
| 781 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 781 render_pass_filters, render_pass_background_filters, &candidate_list, |
| 782 &damage_rect_, &content_bounds_); | 782 nullptr, nullptr, &damage_rect_, &content_bounds_); |
| 783 EXPECT_EQ(0U, candidate_list.size()); | 783 EXPECT_EQ(0U, candidate_list.size()); |
| 784 // There should be nothing new here. | 784 // There should be nothing new here. |
| 785 CompareRenderPassLists(pass_list, original_pass_list); | 785 CompareRenderPassLists(pass_list, original_pass_list); |
| 786 } | 786 } |
| 787 | 787 |
| 788 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 788 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
| 789 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 789 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 790 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 790 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 791 pass->shared_quad_state_list.back(), pass.get()); | 791 pass->shared_quad_state_list.back(), pass.get()); |
| 792 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 792 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 793 pass->shared_quad_state_list.back(), pass.get()); | 793 pass->shared_quad_state_list.back(), pass.get()); |
| 794 | 794 |
| 795 CreateFullscreenCandidateQuad(resource_provider_.get(), | 795 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 796 pass->shared_quad_state_list.back(), | 796 pass->shared_quad_state_list.back(), |
| 797 pass.get()); | 797 pass.get()); |
| 798 | 798 |
| 799 RenderPassList pass_list; | 799 RenderPassList pass_list; |
| 800 pass_list.push_back(std::move(pass)); | 800 pass_list.push_back(std::move(pass)); |
| 801 | 801 |
| 802 RenderPassList original_pass_list; | 802 RenderPassList original_pass_list; |
| 803 RenderPass::CopyAll(pass_list, &original_pass_list); | 803 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 804 | 804 |
| 805 OverlayCandidateList candidate_list; | 805 OverlayCandidateList candidate_list; |
| 806 base::flat_map<int, FilterOperations*> render_pass_filters; | 806 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 807 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 807 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 808 overlay_processor_->ProcessForOverlays( | 808 overlay_processor_->ProcessForOverlays( |
| 809 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 809 resource_provider_.get(), pass_list.back().get(), false, |
| 810 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 810 render_pass_filters, render_pass_background_filters, &candidate_list, |
| 811 &damage_rect_, &content_bounds_); | 811 nullptr, nullptr, &damage_rect_, &content_bounds_); |
| 812 EXPECT_EQ(0U, candidate_list.size()); | 812 EXPECT_EQ(0U, candidate_list.size()); |
| 813 // There should be nothing new here. | 813 // There should be nothing new here. |
| 814 CompareRenderPassLists(pass_list, original_pass_list); | 814 CompareRenderPassLists(pass_list, original_pass_list); |
| 815 } | 815 } |
| 816 | 816 |
| 817 // Test with multiple render passes. | 817 // Test with multiple render passes. |
| 818 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 818 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
| 819 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 819 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 820 CreateFullscreenCandidateQuad(resource_provider_.get(), | 820 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 821 pass->shared_quad_state_list.back(), | 821 pass->shared_quad_state_list.back(), |
| 822 pass.get()); | 822 pass.get()); |
| 823 | 823 |
| 824 // Add something behind it. | 824 // Add something behind it. |
| 825 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 825 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 826 pass->shared_quad_state_list.back(), pass.get()); | 826 pass->shared_quad_state_list.back(), pass.get()); |
| 827 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 827 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 828 pass->shared_quad_state_list.back(), pass.get()); | 828 pass->shared_quad_state_list.back(), pass.get()); |
| 829 | 829 |
| 830 // Check for potential candidates. | 830 // Check for potential candidates. |
| 831 OverlayCandidateList candidate_list; | 831 OverlayCandidateList candidate_list; |
| 832 base::flat_map<int, FilterOperations*> render_pass_filters; | 832 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 833 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 833 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 834 overlay_processor_->ProcessForOverlays( | 834 overlay_processor_->ProcessForOverlays( |
| 835 resource_provider_.get(), pass.get(), render_pass_filters, | 835 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 836 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 836 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 837 &damage_rect_, &content_bounds_); | 837 &damage_rect_, &content_bounds_); |
| 838 EXPECT_EQ(1U, candidate_list.size()); | 838 EXPECT_EQ(1U, candidate_list.size()); |
| 839 } | 839 } |
| 840 | 840 |
| 841 TEST_F(SingleOverlayOnTopTest, AcceptBlending) { | 841 TEST_F(SingleOverlayOnTopTest, AcceptBlending) { |
| 842 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 842 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 843 TextureDrawQuad* quad = | 843 TextureDrawQuad* quad = |
| 844 CreateFullscreenCandidateQuad(resource_provider_.get(), | 844 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 845 pass->shared_quad_state_list.back(), | 845 pass->shared_quad_state_list.back(), |
| 846 pass.get()); | 846 pass.get()); |
| 847 quad->needs_blending = true; | 847 quad->needs_blending = true; |
| 848 quad->opaque_rect = gfx::Rect(0, 0, 0, 0); | 848 quad->opaque_rect = gfx::Rect(0, 0, 0, 0); |
| 849 | 849 |
| 850 OverlayCandidateList candidate_list; | 850 OverlayCandidateList candidate_list; |
| 851 base::flat_map<int, FilterOperations*> render_pass_filters; | 851 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 852 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 852 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 853 damage_rect_ = quad->rect; | 853 damage_rect_ = quad->rect; |
| 854 overlay_processor_->ProcessForOverlays( | 854 overlay_processor_->ProcessForOverlays( |
| 855 resource_provider_.get(), pass.get(), render_pass_filters, | 855 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 856 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 856 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 857 &damage_rect_, &content_bounds_); | 857 &damage_rect_, &content_bounds_); |
| 858 EXPECT_EQ(1U, candidate_list.size()); | 858 EXPECT_EQ(1U, candidate_list.size()); |
| 859 EXPECT_FALSE(damage_rect_.IsEmpty()); | 859 EXPECT_FALSE(damage_rect_.IsEmpty()); |
| 860 } | 860 } |
| 861 | 861 |
| 862 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 862 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
| 863 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 863 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 864 TextureDrawQuad* quad = | 864 TextureDrawQuad* quad = |
| 865 CreateFullscreenCandidateQuad(resource_provider_.get(), | 865 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 866 pass->shared_quad_state_list.back(), | 866 pass->shared_quad_state_list.back(), |
| 867 pass.get()); | 867 pass.get()); |
| 868 quad->background_color = SK_ColorBLACK; | 868 quad->background_color = SK_ColorBLACK; |
| 869 | 869 |
| 870 OverlayCandidateList candidate_list; | 870 OverlayCandidateList candidate_list; |
| 871 base::flat_map<int, FilterOperations*> render_pass_filters; | 871 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 872 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 872 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 873 overlay_processor_->ProcessForOverlays( | 873 overlay_processor_->ProcessForOverlays( |
| 874 resource_provider_.get(), pass.get(), render_pass_filters, | 874 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 875 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 875 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 876 &damage_rect_, &content_bounds_); | 876 &damage_rect_, &content_bounds_); |
| 877 EXPECT_EQ(0U, candidate_list.size()); | 877 EXPECT_EQ(0U, candidate_list.size()); |
| 878 } | 878 } |
| 879 | 879 |
| 880 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 880 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
| 881 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 881 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 882 CreateFullscreenCandidateQuad(resource_provider_.get(), | 882 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 883 pass->shared_quad_state_list.back(), | 883 pass->shared_quad_state_list.back(), |
| 884 pass.get()); | 884 pass.get()); |
| 885 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; | 885 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; |
| 886 | 886 |
| 887 OverlayCandidateList candidate_list; | 887 OverlayCandidateList candidate_list; |
| 888 base::flat_map<int, FilterOperations*> render_pass_filters; | 888 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 889 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 889 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 890 overlay_processor_->ProcessForOverlays( | 890 overlay_processor_->ProcessForOverlays( |
| 891 resource_provider_.get(), pass.get(), render_pass_filters, | 891 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 892 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 892 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 893 &damage_rect_, &content_bounds_); | 893 &damage_rect_, &content_bounds_); |
| 894 EXPECT_EQ(0U, candidate_list.size()); | 894 EXPECT_EQ(0U, candidate_list.size()); |
| 895 } | 895 } |
| 896 | 896 |
| 897 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 897 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
| 898 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 898 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 899 CreateFullscreenCandidateQuad(resource_provider_.get(), | 899 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 900 pass->shared_quad_state_list.back(), | 900 pass->shared_quad_state_list.back(), |
| 901 pass.get()); | 901 pass.get()); |
| 902 pass->shared_quad_state_list.back()->opacity = 0.5f; | 902 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 903 | 903 |
| 904 OverlayCandidateList candidate_list; | 904 OverlayCandidateList candidate_list; |
| 905 base::flat_map<int, FilterOperations*> render_pass_filters; | 905 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 906 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 906 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 907 overlay_processor_->ProcessForOverlays( | 907 overlay_processor_->ProcessForOverlays( |
| 908 resource_provider_.get(), pass.get(), render_pass_filters, | 908 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 909 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 909 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 910 &damage_rect_, &content_bounds_); | 910 &damage_rect_, &content_bounds_); |
| 911 EXPECT_EQ(0U, candidate_list.size()); | 911 EXPECT_EQ(0U, candidate_list.size()); |
| 912 } | 912 } |
| 913 | 913 |
| 914 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 914 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
| 915 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 915 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 916 CreateFullscreenCandidateQuad(resource_provider_.get(), | 916 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 917 pass->shared_quad_state_list.back(), | 917 pass->shared_quad_state_list.back(), |
| 918 pass.get()); | 918 pass.get()); |
| 919 pass->shared_quad_state_list.back() | 919 pass->shared_quad_state_list.back() |
| 920 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 920 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 921 | 921 |
| 922 OverlayCandidateList candidate_list; | 922 OverlayCandidateList candidate_list; |
| 923 base::flat_map<int, FilterOperations*> render_pass_filters; | 923 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 924 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 924 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 925 overlay_processor_->ProcessForOverlays( | 925 overlay_processor_->ProcessForOverlays( |
| 926 resource_provider_.get(), pass.get(), render_pass_filters, | 926 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 927 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 927 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 928 &damage_rect_, &content_bounds_); | 928 &damage_rect_, &content_bounds_); |
| 929 EXPECT_EQ(0U, candidate_list.size()); | 929 EXPECT_EQ(0U, candidate_list.size()); |
| 930 } | 930 } |
| 931 | 931 |
| 932 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 932 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 933 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 933 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 934 CreateFullscreenCandidateQuad(resource_provider_.get(), | 934 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 935 pass->shared_quad_state_list.back(), | 935 pass->shared_quad_state_list.back(), |
| 936 pass.get()); | 936 pass.get()); |
| 937 pass->shared_quad_state_list.back()->is_clipped = true; | 937 pass->shared_quad_state_list.back()->is_clipped = true; |
| 938 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 938 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 939 | 939 |
| 940 OverlayCandidateList candidate_list; | 940 OverlayCandidateList candidate_list; |
| 941 base::flat_map<int, FilterOperations*> render_pass_filters; | 941 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 942 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 942 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 943 overlay_processor_->ProcessForOverlays( | 943 overlay_processor_->ProcessForOverlays( |
| 944 resource_provider_.get(), pass.get(), render_pass_filters, | 944 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 945 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 945 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 946 &damage_rect_, &content_bounds_); | 946 &damage_rect_, &content_bounds_); |
| 947 EXPECT_EQ(1U, candidate_list.size()); | 947 EXPECT_EQ(1U, candidate_list.size()); |
| 948 } | 948 } |
| 949 | 949 |
| 950 TEST_F(UnderlayTest, AllowVerticalFlip) { | 950 TEST_F(UnderlayTest, AllowVerticalFlip) { |
| 951 gfx::Rect rect = kOverlayRect; | 951 gfx::Rect rect = kOverlayRect; |
| 952 rect.set_width(rect.width() / 2); | 952 rect.set_width(rect.width() / 2); |
| 953 rect.Offset(0, -rect.height()); | 953 rect.Offset(0, -rect.height()); |
| 954 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 954 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 955 CreateCandidateQuadAt(resource_provider_.get(), | 955 CreateCandidateQuadAt(resource_provider_.get(), |
| 956 pass->shared_quad_state_list.back(), pass.get(), rect); | 956 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 957 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 957 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 958 -1.0f); | 958 -1.0f); |
| 959 OverlayCandidateList candidate_list; | 959 OverlayCandidateList candidate_list; |
| 960 base::flat_map<int, FilterOperations*> render_pass_filters; | 960 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 961 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 961 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 962 overlay_processor_->ProcessForOverlays( | 962 overlay_processor_->ProcessForOverlays( |
| 963 resource_provider_.get(), pass.get(), render_pass_filters, | 963 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 964 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 964 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 965 &damage_rect_, &content_bounds_); | 965 &damage_rect_, &content_bounds_); |
| 966 ASSERT_EQ(1U, candidate_list.size()); | 966 ASSERT_EQ(1U, candidate_list.size()); |
| 967 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 967 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 968 candidate_list.back().transform); | 968 candidate_list.back().transform); |
| 969 } | 969 } |
| 970 | 970 |
| 971 TEST_F(UnderlayTest, AllowHorizontalFlip) { | 971 TEST_F(UnderlayTest, AllowHorizontalFlip) { |
| 972 gfx::Rect rect = kOverlayRect; | 972 gfx::Rect rect = kOverlayRect; |
| 973 rect.set_height(rect.height() / 2); | 973 rect.set_height(rect.height() / 2); |
| 974 rect.Offset(-rect.width(), 0); | 974 rect.Offset(-rect.width(), 0); |
| 975 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 975 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 976 CreateCandidateQuadAt(resource_provider_.get(), | 976 CreateCandidateQuadAt(resource_provider_.get(), |
| 977 pass->shared_quad_state_list.back(), pass.get(), rect); | 977 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 978 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 978 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 979 2.0f); | 979 2.0f); |
| 980 | 980 |
| 981 OverlayCandidateList candidate_list; | 981 OverlayCandidateList candidate_list; |
| 982 base::flat_map<int, FilterOperations*> render_pass_filters; | 982 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 983 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 983 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 984 overlay_processor_->ProcessForOverlays( | 984 overlay_processor_->ProcessForOverlays( |
| 985 resource_provider_.get(), pass.get(), render_pass_filters, | 985 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 986 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 986 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 987 &damage_rect_, &content_bounds_); | 987 &damage_rect_, &content_bounds_); |
| 988 ASSERT_EQ(1U, candidate_list.size()); | 988 ASSERT_EQ(1U, candidate_list.size()); |
| 989 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 989 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 990 candidate_list.back().transform); | 990 candidate_list.back().transform); |
| 991 } | 991 } |
| 992 | 992 |
| 993 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 993 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 994 gfx::Rect rect = kOverlayRect; | 994 gfx::Rect rect = kOverlayRect; |
| 995 rect.set_width(rect.width() / 2); | 995 rect.set_width(rect.width() / 2); |
| 996 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 996 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 997 CreateCandidateQuadAt(resource_provider_.get(), | 997 CreateCandidateQuadAt(resource_provider_.get(), |
| 998 pass->shared_quad_state_list.back(), pass.get(), rect); | 998 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 999 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 999 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 1000 1.0f); | 1000 1.0f); |
| 1001 OverlayCandidateList candidate_list; | 1001 OverlayCandidateList candidate_list; |
| 1002 base::flat_map<int, FilterOperations*> render_pass_filters; | 1002 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1003 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1003 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1004 overlay_processor_->ProcessForOverlays( | 1004 overlay_processor_->ProcessForOverlays( |
| 1005 resource_provider_.get(), pass.get(), render_pass_filters, | 1005 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1006 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1006 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1007 &damage_rect_, &content_bounds_); | 1007 &damage_rect_, &content_bounds_); |
| 1008 EXPECT_EQ(1U, candidate_list.size()); | 1008 EXPECT_EQ(1U, candidate_list.size()); |
| 1009 } | 1009 } |
| 1010 | 1010 |
| 1011 TEST_F(SingleOverlayOnTopTest, AcceptMirrorYTransform) { | 1011 TEST_F(SingleOverlayOnTopTest, AcceptMirrorYTransform) { |
| 1012 gfx::Rect rect = kOverlayRect; | 1012 gfx::Rect rect = kOverlayRect; |
| 1013 rect.Offset(0, -rect.height()); | 1013 rect.Offset(0, -rect.height()); |
| 1014 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1014 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1015 CreateCandidateQuadAt(resource_provider_.get(), | 1015 CreateCandidateQuadAt(resource_provider_.get(), |
| 1016 pass->shared_quad_state_list.back(), pass.get(), rect); | 1016 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 1017 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(1.f, | 1017 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(1.f, |
| 1018 -1.f); | 1018 -1.f); |
| 1019 | 1019 |
| 1020 OverlayCandidateList candidate_list; | 1020 OverlayCandidateList candidate_list; |
| 1021 base::flat_map<int, FilterOperations*> render_pass_filters; | 1021 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1022 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1022 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1023 overlay_processor_->ProcessForOverlays( | 1023 overlay_processor_->ProcessForOverlays( |
| 1024 resource_provider_.get(), pass.get(), render_pass_filters, | 1024 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1025 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1025 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1026 &damage_rect_, &content_bounds_); | 1026 &damage_rect_, &content_bounds_); |
| 1027 ASSERT_EQ(1U, candidate_list.size()); | 1027 ASSERT_EQ(1U, candidate_list.size()); |
| 1028 } | 1028 } |
| 1029 | 1029 |
| 1030 TEST_F(UnderlayTest, Allow90DegreeRotation) { | 1030 TEST_F(UnderlayTest, Allow90DegreeRotation) { |
| 1031 gfx::Rect rect = kOverlayRect; | 1031 gfx::Rect rect = kOverlayRect; |
| 1032 rect.Offset(0, -rect.height()); | 1032 rect.Offset(0, -rect.height()); |
| 1033 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1033 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1034 CreateCandidateQuadAt(resource_provider_.get(), | 1034 CreateCandidateQuadAt(resource_provider_.get(), |
| 1035 pass->shared_quad_state_list.back(), pass.get(), rect); | 1035 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 1036 pass->shared_quad_state_list.back() | 1036 pass->shared_quad_state_list.back() |
| 1037 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 1037 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 1038 | 1038 |
| 1039 OverlayCandidateList candidate_list; | 1039 OverlayCandidateList candidate_list; |
| 1040 base::flat_map<int, FilterOperations*> render_pass_filters; | 1040 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1041 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1041 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1042 overlay_processor_->ProcessForOverlays( | 1042 overlay_processor_->ProcessForOverlays( |
| 1043 resource_provider_.get(), pass.get(), render_pass_filters, | 1043 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1044 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1044 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1045 &damage_rect_, &content_bounds_); | 1045 &damage_rect_, &content_bounds_); |
| 1046 ASSERT_EQ(1U, candidate_list.size()); | 1046 ASSERT_EQ(1U, candidate_list.size()); |
| 1047 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 1047 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 TEST_F(UnderlayTest, Allow180DegreeRotation) { | 1050 TEST_F(UnderlayTest, Allow180DegreeRotation) { |
| 1051 gfx::Rect rect = kOverlayRect; | 1051 gfx::Rect rect = kOverlayRect; |
| 1052 rect.Offset(-rect.width(), -rect.height()); | 1052 rect.Offset(-rect.width(), -rect.height()); |
| 1053 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1053 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1054 CreateCandidateQuadAt(resource_provider_.get(), | 1054 CreateCandidateQuadAt(resource_provider_.get(), |
| 1055 pass->shared_quad_state_list.back(), pass.get(), rect); | 1055 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 1056 pass->shared_quad_state_list.back() | 1056 pass->shared_quad_state_list.back() |
| 1057 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 1057 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 1058 | 1058 |
| 1059 OverlayCandidateList candidate_list; | 1059 OverlayCandidateList candidate_list; |
| 1060 base::flat_map<int, FilterOperations*> render_pass_filters; | 1060 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1061 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1061 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1062 overlay_processor_->ProcessForOverlays( | 1062 overlay_processor_->ProcessForOverlays( |
| 1063 resource_provider_.get(), pass.get(), render_pass_filters, | 1063 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1064 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1064 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1065 &damage_rect_, &content_bounds_); | 1065 &damage_rect_, &content_bounds_); |
| 1066 ASSERT_EQ(1U, candidate_list.size()); | 1066 ASSERT_EQ(1U, candidate_list.size()); |
| 1067 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 1067 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 1068 } | 1068 } |
| 1069 | 1069 |
| 1070 TEST_F(UnderlayTest, Allow270DegreeRotation) { | 1070 TEST_F(UnderlayTest, Allow270DegreeRotation) { |
| 1071 gfx::Rect rect = kOverlayRect; | 1071 gfx::Rect rect = kOverlayRect; |
| 1072 rect.Offset(-rect.width(), 0); | 1072 rect.Offset(-rect.width(), 0); |
| 1073 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1073 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1074 CreateCandidateQuadAt(resource_provider_.get(), | 1074 CreateCandidateQuadAt(resource_provider_.get(), |
| 1075 pass->shared_quad_state_list.back(), pass.get(), rect); | 1075 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 1076 pass->shared_quad_state_list.back() | 1076 pass->shared_quad_state_list.back() |
| 1077 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 1077 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 1078 | 1078 |
| 1079 OverlayCandidateList candidate_list; | 1079 OverlayCandidateList candidate_list; |
| 1080 base::flat_map<int, FilterOperations*> render_pass_filters; | 1080 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1081 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1081 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1082 overlay_processor_->ProcessForOverlays( | 1082 overlay_processor_->ProcessForOverlays( |
| 1083 resource_provider_.get(), pass.get(), render_pass_filters, | 1083 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1084 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1084 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1085 &damage_rect_, &content_bounds_); | 1085 &damage_rect_, &content_bounds_); |
| 1086 ASSERT_EQ(1U, candidate_list.size()); | 1086 ASSERT_EQ(1U, candidate_list.size()); |
| 1087 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 1087 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 1088 } | 1088 } |
| 1089 | 1089 |
| 1090 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 1090 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 1091 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1091 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1092 gfx::RectF(kOverlayBottomRightRect)); | 1092 gfx::RectF(kOverlayBottomRightRect)); |
| 1093 | 1093 |
| 1094 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1094 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1095 CreateOpaqueQuadAt(resource_provider_.get(), | 1095 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1096 pass->shared_quad_state_list.back(), pass.get(), | 1096 pass->shared_quad_state_list.back(), pass.get(), |
| 1097 kOverlayTopLeftRect); | 1097 kOverlayTopLeftRect); |
| 1098 CreateCandidateQuadAt(resource_provider_.get(), | 1098 CreateCandidateQuadAt(resource_provider_.get(), |
| 1099 pass->shared_quad_state_list.back(), | 1099 pass->shared_quad_state_list.back(), |
| 1100 pass.get(), | 1100 pass.get(), |
| 1101 kOverlayBottomRightRect); | 1101 kOverlayBottomRightRect); |
| 1102 | 1102 |
| 1103 OverlayCandidateList candidate_list; | 1103 OverlayCandidateList candidate_list; |
| 1104 base::flat_map<int, FilterOperations*> render_pass_filters; | 1104 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1105 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1105 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1106 overlay_processor_->ProcessForOverlays( | 1106 overlay_processor_->ProcessForOverlays( |
| 1107 resource_provider_.get(), pass.get(), render_pass_filters, | 1107 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1108 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1108 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1109 &damage_rect_, &content_bounds_); | 1109 &damage_rect_, &content_bounds_); |
| 1110 EXPECT_EQ(1U, candidate_list.size()); | 1110 EXPECT_EQ(1U, candidate_list.size()); |
| 1111 } | 1111 } |
| 1112 | 1112 |
| 1113 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 1113 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 1114 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1114 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1115 gfx::RectF(kOverlayBottomRightRect)); | 1115 gfx::RectF(kOverlayBottomRightRect)); |
| 1116 | 1116 |
| 1117 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1117 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1118 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1118 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1119 shared_state->opacity = 0.f; | 1119 shared_state->opacity = 0.f; |
| 1120 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1120 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1121 kOverlayBottomRightRect); | 1121 kOverlayBottomRightRect); |
| 1122 shared_state = pass->CreateAndAppendSharedQuadState(); | 1122 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1123 shared_state->opacity = 1.f; | 1123 shared_state->opacity = 1.f; |
| 1124 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1124 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1125 kOverlayBottomRightRect); | 1125 kOverlayBottomRightRect); |
| 1126 | 1126 |
| 1127 OverlayCandidateList candidate_list; | 1127 OverlayCandidateList candidate_list; |
| 1128 base::flat_map<int, FilterOperations*> render_pass_filters; | 1128 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1129 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1129 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1130 overlay_processor_->ProcessForOverlays( | 1130 overlay_processor_->ProcessForOverlays( |
| 1131 resource_provider_.get(), pass.get(), render_pass_filters, | 1131 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1132 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1132 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1133 &damage_rect_, &content_bounds_); | 1133 &damage_rect_, &content_bounds_); |
| 1134 EXPECT_EQ(1U, candidate_list.size()); | 1134 EXPECT_EQ(1U, candidate_list.size()); |
| 1135 } | 1135 } |
| 1136 | 1136 |
| 1137 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1137 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1138 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1138 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1139 gfx::RectF(kOverlayBottomRightRect)); | 1139 gfx::RectF(kOverlayBottomRightRect)); |
| 1140 | 1140 |
| 1141 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1141 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1142 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1142 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 1143 SK_ColorTRANSPARENT, pass.get(), | 1143 SK_ColorTRANSPARENT, pass.get(), |
| 1144 kOverlayBottomRightRect); | 1144 kOverlayBottomRightRect); |
| 1145 CreateCandidateQuadAt(resource_provider_.get(), | 1145 CreateCandidateQuadAt(resource_provider_.get(), |
| 1146 pass->shared_quad_state_list.back(), pass.get(), | 1146 pass->shared_quad_state_list.back(), pass.get(), |
| 1147 kOverlayBottomRightRect); | 1147 kOverlayBottomRightRect); |
| 1148 | 1148 |
| 1149 OverlayCandidateList candidate_list; | 1149 OverlayCandidateList candidate_list; |
| 1150 base::flat_map<int, FilterOperations*> render_pass_filters; | 1150 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1151 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1151 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1152 overlay_processor_->ProcessForOverlays( | 1152 overlay_processor_->ProcessForOverlays( |
| 1153 resource_provider_.get(), pass.get(), render_pass_filters, | 1153 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1154 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1154 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1155 &damage_rect_, &content_bounds_); | 1155 &damage_rect_, &content_bounds_); |
| 1156 EXPECT_EQ(1U, candidate_list.size()); | 1156 EXPECT_EQ(1U, candidate_list.size()); |
| 1157 } | 1157 } |
| 1158 | 1158 |
| 1159 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1159 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 1160 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1160 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1161 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1161 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1162 shared_state->opacity = 0.5f; | 1162 shared_state->opacity = 0.5f; |
| 1163 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1163 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1164 kOverlayBottomRightRect); | 1164 kOverlayBottomRightRect); |
| 1165 shared_state = pass->CreateAndAppendSharedQuadState(); | 1165 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1166 shared_state->opacity = 1.f; | 1166 shared_state->opacity = 1.f; |
| 1167 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1167 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1168 kOverlayBottomRightRect); | 1168 kOverlayBottomRightRect); |
| 1169 | 1169 |
| 1170 OverlayCandidateList candidate_list; | 1170 OverlayCandidateList candidate_list; |
| 1171 base::flat_map<int, FilterOperations*> render_pass_filters; | 1171 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1172 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1172 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1173 overlay_processor_->ProcessForOverlays( | 1173 overlay_processor_->ProcessForOverlays( |
| 1174 resource_provider_.get(), pass.get(), render_pass_filters, | 1174 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1175 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1175 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1176 &damage_rect_, &content_bounds_); | 1176 &damage_rect_, &content_bounds_); |
| 1177 EXPECT_EQ(0U, candidate_list.size()); | 1177 EXPECT_EQ(0U, candidate_list.size()); |
| 1178 } | 1178 } |
| 1179 | 1179 |
| 1180 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 1180 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 1181 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1181 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1182 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1182 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1183 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 1183 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 1184 kOverlayBottomRightRect)->opaque_rect = | 1184 kOverlayBottomRightRect)->opaque_rect = |
| 1185 kOverlayBottomRightRect; | 1185 kOverlayBottomRightRect; |
| 1186 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1186 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 1187 kOverlayBottomRightRect); | 1187 kOverlayBottomRightRect); |
| 1188 | 1188 |
| 1189 OverlayCandidateList candidate_list; | 1189 OverlayCandidateList candidate_list; |
| 1190 base::flat_map<int, FilterOperations*> render_pass_filters; | 1190 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1191 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1191 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1192 overlay_processor_->ProcessForOverlays( | 1192 overlay_processor_->ProcessForOverlays( |
| 1193 resource_provider_.get(), pass.get(), render_pass_filters, | 1193 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1194 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1194 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1195 &damage_rect_, &content_bounds_); | 1195 &damage_rect_, &content_bounds_); |
| 1196 EXPECT_EQ(0U, candidate_list.size()); | 1196 EXPECT_EQ(0U, candidate_list.size()); |
| 1197 } | 1197 } |
| 1198 | 1198 |
| 1199 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 1199 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 1200 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1200 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1201 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1201 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1202 pass->shared_quad_state_list.back(), | 1202 pass->shared_quad_state_list.back(), |
| 1203 pass.get(), kSwapTransform); | 1203 pass.get(), kSwapTransform); |
| 1204 | 1204 |
| 1205 OverlayCandidateList candidate_list; | 1205 OverlayCandidateList candidate_list; |
| 1206 base::flat_map<int, FilterOperations*> render_pass_filters; | 1206 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1207 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1207 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1208 overlay_processor_->ProcessForOverlays( | 1208 overlay_processor_->ProcessForOverlays( |
| 1209 resource_provider_.get(), pass.get(), render_pass_filters, | 1209 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1210 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1210 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1211 &damage_rect_, &content_bounds_); | 1211 &damage_rect_, &content_bounds_); |
| 1212 EXPECT_EQ(0U, candidate_list.size()); | 1212 EXPECT_EQ(0U, candidate_list.size()); |
| 1213 } | 1213 } |
| 1214 | 1214 |
| 1215 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { | 1215 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { |
| 1216 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1216 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1217 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1217 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1218 pass->shared_quad_state_list.back(), | 1218 pass->shared_quad_state_list.back(), |
| 1219 pass.get(), kXMirrorTransform); | 1219 pass.get(), kXMirrorTransform); |
| 1220 | 1220 |
| 1221 OverlayCandidateList candidate_list; | 1221 OverlayCandidateList candidate_list; |
| 1222 base::flat_map<int, FilterOperations*> render_pass_filters; | 1222 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1223 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1223 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1224 overlay_processor_->ProcessForOverlays( | 1224 overlay_processor_->ProcessForOverlays( |
| 1225 resource_provider_.get(), pass.get(), render_pass_filters, | 1225 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1226 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1226 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1227 &damage_rect_, &content_bounds_); | 1227 &damage_rect_, &content_bounds_); |
| 1228 EXPECT_EQ(1U, candidate_list.size()); | 1228 EXPECT_EQ(1U, candidate_list.size()); |
| 1229 } | 1229 } |
| 1230 | 1230 |
| 1231 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { | 1231 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { |
| 1232 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1232 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1233 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1233 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1234 pass->shared_quad_state_list.back(), | 1234 pass->shared_quad_state_list.back(), |
| 1235 pass.get(), kBothMirrorTransform); | 1235 pass.get(), kBothMirrorTransform); |
| 1236 | 1236 |
| 1237 OverlayCandidateList candidate_list; | 1237 OverlayCandidateList candidate_list; |
| 1238 base::flat_map<int, FilterOperations*> render_pass_filters; | 1238 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1239 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1239 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1240 overlay_processor_->ProcessForOverlays( | 1240 overlay_processor_->ProcessForOverlays( |
| 1241 resource_provider_.get(), pass.get(), render_pass_filters, | 1241 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1242 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1242 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1243 &damage_rect_, &content_bounds_); | 1243 &damage_rect_, &content_bounds_); |
| 1244 EXPECT_EQ(1U, candidate_list.size()); | 1244 EXPECT_EQ(1U, candidate_list.size()); |
| 1245 } | 1245 } |
| 1246 | 1246 |
| 1247 TEST_F(UnderlayTest, AllowVideoNormalTransform) { | 1247 TEST_F(UnderlayTest, AllowVideoNormalTransform) { |
| 1248 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1248 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1249 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1249 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1250 pass->shared_quad_state_list.back(), | 1250 pass->shared_quad_state_list.back(), |
| 1251 pass.get(), kNormalTransform); | 1251 pass.get(), kNormalTransform); |
| 1252 | 1252 |
| 1253 OverlayCandidateList candidate_list; | 1253 OverlayCandidateList candidate_list; |
| 1254 base::flat_map<int, FilterOperations*> render_pass_filters; | 1254 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1255 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1255 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1256 overlay_processor_->ProcessForOverlays( | 1256 overlay_processor_->ProcessForOverlays( |
| 1257 resource_provider_.get(), pass.get(), render_pass_filters, | 1257 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1258 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1258 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1259 &damage_rect_, &content_bounds_); | 1259 &damage_rect_, &content_bounds_); |
| 1260 EXPECT_EQ(1U, candidate_list.size()); | 1260 EXPECT_EQ(1U, candidate_list.size()); |
| 1261 } | 1261 } |
| 1262 | 1262 |
| 1263 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1263 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 1264 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1264 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1265 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1265 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1266 pass->shared_quad_state_list.back(), | 1266 pass->shared_quad_state_list.back(), |
| 1267 pass.get(), kYMirrorTransform); | 1267 pass.get(), kYMirrorTransform); |
| 1268 | 1268 |
| 1269 OverlayCandidateList candidate_list; | 1269 OverlayCandidateList candidate_list; |
| 1270 base::flat_map<int, FilterOperations*> render_pass_filters; | 1270 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1271 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1271 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1272 overlay_processor_->ProcessForOverlays( | 1272 overlay_processor_->ProcessForOverlays( |
| 1273 resource_provider_.get(), pass.get(), render_pass_filters, | 1273 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1274 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1274 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1275 &damage_rect_, &content_bounds_); | 1275 &damage_rect_, &content_bounds_); |
| 1276 EXPECT_EQ(1U, candidate_list.size()); | 1276 EXPECT_EQ(1U, candidate_list.size()); |
| 1277 } | 1277 } |
| 1278 | 1278 |
| 1279 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1279 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1280 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1280 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1281 gfx::RectF(kOverlayBottomRightRect)); | 1281 gfx::RectF(kOverlayBottomRightRect)); |
| 1282 | 1282 |
| 1283 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1283 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1284 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1284 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1285 pass->shared_quad_state_list.back(), pass.get()); | 1285 pass->shared_quad_state_list.back(), pass.get()); |
| 1286 CreateCandidateQuadAt(resource_provider_.get(), | 1286 CreateCandidateQuadAt(resource_provider_.get(), |
| 1287 pass->shared_quad_state_list.back(), pass.get(), | 1287 pass->shared_quad_state_list.back(), pass.get(), |
| 1288 kOverlayBottomRightRect); | 1288 kOverlayBottomRightRect); |
| 1289 | 1289 |
| 1290 OverlayCandidateList candidate_list; | 1290 OverlayCandidateList candidate_list; |
| 1291 base::flat_map<int, FilterOperations*> render_pass_filters; | 1291 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1292 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1292 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1293 overlay_processor_->ProcessForOverlays( | 1293 overlay_processor_->ProcessForOverlays( |
| 1294 resource_provider_.get(), pass.get(), render_pass_filters, | 1294 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1295 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1295 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1296 &damage_rect_, &content_bounds_); | 1296 &damage_rect_, &content_bounds_); |
| 1297 ASSERT_EQ(1U, candidate_list.size()); | 1297 ASSERT_EQ(1U, candidate_list.size()); |
| 1298 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1298 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1299 EXPECT_EQ(2U, pass->quad_list.size()); | 1299 EXPECT_EQ(2U, pass->quad_list.size()); |
| 1300 // The overlay quad should have changed to a SOLID_COLOR quad. | 1300 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1301 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1301 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 TEST_F(UnderlayTest, AllowOnTop) { | 1304 TEST_F(UnderlayTest, AllowOnTop) { |
| 1305 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1305 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1306 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1306 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1307 pass->shared_quad_state_list.back(), | 1307 pass->shared_quad_state_list.back(), |
| 1308 pass.get()); | 1308 pass.get()); |
| 1309 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1309 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 1310 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1310 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1311 pass->shared_quad_state_list.back(), pass.get()); | 1311 pass->shared_quad_state_list.back(), pass.get()); |
| 1312 | 1312 |
| 1313 OverlayCandidateList candidate_list; | 1313 OverlayCandidateList candidate_list; |
| 1314 base::flat_map<int, FilterOperations*> render_pass_filters; | 1314 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1315 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1315 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1316 overlay_processor_->ProcessForOverlays( | 1316 overlay_processor_->ProcessForOverlays( |
| 1317 resource_provider_.get(), pass.get(), render_pass_filters, | 1317 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1318 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1318 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1319 &damage_rect_, &content_bounds_); | 1319 &damage_rect_, &content_bounds_); |
| 1320 ASSERT_EQ(1U, candidate_list.size()); | 1320 ASSERT_EQ(1U, candidate_list.size()); |
| 1321 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1321 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1322 // The overlay quad should have changed to a SOLID_COLOR quad. | 1322 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1323 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1323 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 1324 } | 1324 } |
| 1325 | 1325 |
| 1326 // The first time an underlay is scheduled its damage must not be subtracted. | 1326 // The first time an underlay is scheduled its damage must not be subtracted. |
| 1327 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { | 1327 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { |
| 1328 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1328 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1329 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1329 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1330 pass->shared_quad_state_list.back(), | 1330 pass->shared_quad_state_list.back(), |
| 1331 pass.get()); | 1331 pass.get()); |
| 1332 | 1332 |
| 1333 damage_rect_ = kOverlayRect; | 1333 damage_rect_ = kOverlayRect; |
| 1334 | 1334 |
| 1335 OverlayCandidateList candidate_list; | 1335 OverlayCandidateList candidate_list; |
| 1336 base::flat_map<int, FilterOperations*> render_pass_filters; | 1336 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1337 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1337 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1338 overlay_processor_->ProcessForOverlays( | 1338 overlay_processor_->ProcessForOverlays( |
| 1339 resource_provider_.get(), pass.get(), render_pass_filters, | 1339 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1340 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1340 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1341 &damage_rect_, &content_bounds_); | 1341 &damage_rect_, &content_bounds_); |
| 1342 | 1342 |
| 1343 EXPECT_EQ(kOverlayRect, damage_rect_); | 1343 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 // An identical underlay for two frames in a row means the damage can be | 1346 // An identical underlay for two frames in a row means the damage can be |
| 1347 // subtracted the second time. | 1347 // subtracted the second time. |
| 1348 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { | 1348 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { |
| 1349 for (int i = 0; i < 2; ++i) { | 1349 for (int i = 0; i < 2; ++i) { |
| 1350 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1350 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1351 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1351 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1352 pass->shared_quad_state_list.back(), | 1352 pass->shared_quad_state_list.back(), |
| 1353 pass.get()); | 1353 pass.get()); |
| 1354 | 1354 |
| 1355 damage_rect_ = kOverlayRect; | 1355 damage_rect_ = kOverlayRect; |
| 1356 | 1356 |
| 1357 // Add something behind it. | 1357 // Add something behind it. |
| 1358 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1358 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1359 pass->shared_quad_state_list.back(), pass.get()); | 1359 pass->shared_quad_state_list.back(), pass.get()); |
| 1360 | 1360 |
| 1361 OverlayCandidateList candidate_list; | 1361 OverlayCandidateList candidate_list; |
| 1362 base::flat_map<int, FilterOperations*> render_pass_filters; | 1362 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1363 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1363 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1364 overlay_processor_->ProcessForOverlays( | 1364 overlay_processor_->ProcessForOverlays( |
| 1365 resource_provider_.get(), pass.get(), render_pass_filters, | 1365 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1366 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1366 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1367 &damage_rect_, &content_bounds_); | 1367 &damage_rect_, &content_bounds_); |
| 1368 } | 1368 } |
| 1369 | 1369 |
| 1370 // The second time the same overlay rect is scheduled it will be subtracted | 1370 // The second time the same overlay rect is scheduled it will be subtracted |
| 1371 // from the damage rect. | 1371 // from the damage rect. |
| 1372 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1372 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 // Underlay damage can only be subtracted if the previous frame's underlay | 1375 // Underlay damage can only be subtracted if the previous frame's underlay |
| 1376 // was the same rect. | 1376 // was the same rect. |
| 1377 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { | 1377 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
| 1378 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; | 1378 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; |
| 1379 for (int i = 0; i < 2; ++i) { | 1379 for (int i = 0; i < 2; ++i) { |
| 1380 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1380 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1381 gfx::RectF(overlay_rects[i])); | 1381 gfx::RectF(overlay_rects[i])); |
| 1382 | 1382 |
| 1383 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1383 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1384 | 1384 |
| 1385 CreateCandidateQuadAt(resource_provider_.get(), | 1385 CreateCandidateQuadAt(resource_provider_.get(), |
| 1386 pass->shared_quad_state_list.back(), pass.get(), | 1386 pass->shared_quad_state_list.back(), pass.get(), |
| 1387 overlay_rects[i]); | 1387 overlay_rects[i]); |
| 1388 | 1388 |
| 1389 damage_rect_ = overlay_rects[i]; | 1389 damage_rect_ = overlay_rects[i]; |
| 1390 | 1390 |
| 1391 OverlayCandidateList candidate_list; | 1391 OverlayCandidateList candidate_list; |
| 1392 base::flat_map<int, FilterOperations*> render_pass_filters; | 1392 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1393 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1393 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1394 overlay_processor_->ProcessForOverlays( | 1394 overlay_processor_->ProcessForOverlays( |
| 1395 resource_provider_.get(), pass.get(), render_pass_filters, | 1395 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1396 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1396 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1397 &damage_rect_, &content_bounds_); | 1397 &damage_rect_, &content_bounds_); |
| 1398 | 1398 |
| 1399 EXPECT_EQ(overlay_rects[i], damage_rect_); | 1399 EXPECT_EQ(overlay_rects[i], damage_rect_); |
| 1400 } | 1400 } |
| 1401 } | 1401 } |
| 1402 | 1402 |
| 1403 // Underlay damage can only be subtracted if the previous frame's underlay | 1403 // Underlay damage can only be subtracted if the previous frame's underlay |
| 1404 // exists. | 1404 // exists. |
| 1405 TEST_F(UnderlayTest, DamageNotSubtractedForNonConsecutiveIdenticalUnderlays) { | 1405 TEST_F(UnderlayTest, DamageNotSubtractedForNonConsecutiveIdenticalUnderlays) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1417 damage_rect_ = kOverlayRect; | 1417 damage_rect_ = kOverlayRect; |
| 1418 | 1418 |
| 1419 // Add something behind it. | 1419 // Add something behind it. |
| 1420 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1420 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1421 pass->shared_quad_state_list.back(), pass.get()); | 1421 pass->shared_quad_state_list.back(), pass.get()); |
| 1422 | 1422 |
| 1423 OverlayCandidateList candidate_list; | 1423 OverlayCandidateList candidate_list; |
| 1424 base::flat_map<int, FilterOperations*> render_pass_filters; | 1424 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1425 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1425 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1426 overlay_processor_->ProcessForOverlays( | 1426 overlay_processor_->ProcessForOverlays( |
| 1427 resource_provider_.get(), pass.get(), render_pass_filters, | 1427 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1428 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1428 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1429 &damage_rect_, &content_bounds_); | 1429 &damage_rect_, &content_bounds_); |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 EXPECT_EQ(kOverlayRect, damage_rect_); | 1432 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1433 } | 1433 } |
| 1434 | 1434 |
| 1435 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { | 1435 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { |
| 1436 for (int i = 0; i < 2; ++i) { | 1436 for (int i = 0; i < 2; ++i) { |
| 1437 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1437 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1438 // Add an overlapping quad above the candidate. | 1438 // Add an overlapping quad above the candidate. |
| 1439 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1439 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1440 pass->shared_quad_state_list.back(), pass.get()); | 1440 pass->shared_quad_state_list.back(), pass.get()); |
| 1441 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1441 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1442 pass->shared_quad_state_list.back(), | 1442 pass->shared_quad_state_list.back(), |
| 1443 pass.get()); | 1443 pass.get()); |
| 1444 | 1444 |
| 1445 damage_rect_ = kOverlayRect; | 1445 damage_rect_ = kOverlayRect; |
| 1446 | 1446 |
| 1447 OverlayCandidateList candidate_list; | 1447 OverlayCandidateList candidate_list; |
| 1448 base::flat_map<int, FilterOperations*> render_pass_filters; | 1448 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1449 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1449 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1450 overlay_processor_->ProcessForOverlays( | 1450 overlay_processor_->ProcessForOverlays( |
| 1451 resource_provider_.get(), pass.get(), render_pass_filters, | 1451 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1452 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1452 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1453 &damage_rect_, &content_bounds_); | 1453 &damage_rect_, &content_bounds_); |
| 1454 } | 1454 } |
| 1455 | 1455 |
| 1456 EXPECT_EQ(kOverlayRect, damage_rect_); | 1456 EXPECT_EQ(kOverlayRect, damage_rect_); |
| 1457 } | 1457 } |
| 1458 | 1458 |
| 1459 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { | 1459 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| 1460 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1460 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1461 gfx::RectF(kOverlayBottomRightRect)); | 1461 gfx::RectF(kOverlayBottomRightRect)); |
| 1462 | 1462 |
| 1463 for (int i = 0; i < 2; ++i) { | 1463 for (int i = 0; i < 2; ++i) { |
| 1464 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1464 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1465 // Add a non-overlapping quad above the candidate. | 1465 // Add a non-overlapping quad above the candidate. |
| 1466 CreateOpaqueQuadAt(resource_provider_.get(), | 1466 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1467 pass->shared_quad_state_list.back(), pass.get(), | 1467 pass->shared_quad_state_list.back(), pass.get(), |
| 1468 kOverlayTopLeftRect); | 1468 kOverlayTopLeftRect); |
| 1469 CreateCandidateQuadAt(resource_provider_.get(), | 1469 CreateCandidateQuadAt(resource_provider_.get(), |
| 1470 pass->shared_quad_state_list.back(), pass.get(), | 1470 pass->shared_quad_state_list.back(), pass.get(), |
| 1471 kOverlayBottomRightRect); | 1471 kOverlayBottomRightRect); |
| 1472 | 1472 |
| 1473 damage_rect_ = kOverlayBottomRightRect; | 1473 damage_rect_ = kOverlayBottomRightRect; |
| 1474 | 1474 |
| 1475 OverlayCandidateList candidate_list; | 1475 OverlayCandidateList candidate_list; |
| 1476 base::flat_map<int, FilterOperations*> render_pass_filters; | 1476 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1477 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1477 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1478 overlay_processor_->ProcessForOverlays( | 1478 overlay_processor_->ProcessForOverlays( |
| 1479 resource_provider_.get(), pass.get(), render_pass_filters, | 1479 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1480 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1480 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1481 &damage_rect_, &content_bounds_); | 1481 &damage_rect_, &content_bounds_); |
| 1482 } | 1482 } |
| 1483 | 1483 |
| 1484 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1484 EXPECT_TRUE(damage_rect_.IsEmpty()); |
| 1485 } | 1485 } |
| 1486 | 1486 |
| 1487 TEST_F(UnderlayCastTest, NoOverlayContentBounds) { | 1487 TEST_F(UnderlayCastTest, NoOverlayContentBounds) { |
| 1488 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1488 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1489 | 1489 |
| 1490 CreateOpaqueQuadAt(resource_provider_.get(), | 1490 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1491 pass->shared_quad_state_list.back(), pass.get(), | 1491 pass->shared_quad_state_list.back(), pass.get(), |
| 1492 kOverlayTopLeftRect); | 1492 kOverlayTopLeftRect); |
| 1493 | 1493 |
| 1494 OverlayCandidateList candidate_list; | 1494 OverlayCandidateList candidate_list; |
| 1495 base::flat_map<int, FilterOperations*> render_pass_filters; | 1495 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1496 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1496 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1497 overlay_processor_->ProcessForOverlays( | 1497 overlay_processor_->ProcessForOverlays( |
| 1498 resource_provider_.get(), pass.get(), render_pass_filters, | 1498 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1499 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1499 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1500 &damage_rect_, &content_bounds_); | 1500 &damage_rect_, &content_bounds_); |
| 1501 EXPECT_EQ(0U, content_bounds_.size()); | 1501 EXPECT_EQ(0U, content_bounds_.size()); |
| 1502 } | 1502 } |
| 1503 | 1503 |
| 1504 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { | 1504 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { |
| 1505 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1505 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1506 CreateCandidateQuadAt(resource_provider_.get(), | 1506 CreateCandidateQuadAt(resource_provider_.get(), |
| 1507 pass->shared_quad_state_list.back(), pass.get(), | 1507 pass->shared_quad_state_list.back(), pass.get(), |
| 1508 kOverlayRect); | 1508 kOverlayRect); |
| 1509 | 1509 |
| 1510 OverlayCandidateList candidate_list; | 1510 OverlayCandidateList candidate_list; |
| 1511 base::flat_map<int, FilterOperations*> render_pass_filters; | 1511 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1512 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1512 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1513 overlay_processor_->ProcessForOverlays( | 1513 overlay_processor_->ProcessForOverlays( |
| 1514 resource_provider_.get(), pass.get(), render_pass_filters, | 1514 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1515 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1515 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1516 &damage_rect_, &content_bounds_); | 1516 &damage_rect_, &content_bounds_); |
| 1517 | 1517 |
| 1518 EXPECT_EQ(1U, content_bounds_.size()); | 1518 EXPECT_EQ(1U, content_bounds_.size()); |
| 1519 EXPECT_TRUE(content_bounds_[0].IsEmpty()); | 1519 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1520 } | 1520 } |
| 1521 | 1521 |
| 1522 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { | 1522 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { |
| 1523 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1523 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1524 gfx::RectF(kOverlayBottomRightRect)); | 1524 gfx::RectF(kOverlayBottomRightRect)); |
| 1525 | 1525 |
| 1526 const gfx::Rect kLeftSide(0, 0, 128, 256); | 1526 const gfx::Rect kLeftSide(0, 0, 128, 256); |
| 1527 const gfx::Rect kTopRight(128, 0, 128, 128); | 1527 const gfx::Rect kTopRight(128, 0, 128, 128); |
| 1528 | 1528 |
| 1529 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1529 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1530 CreateCandidateQuadAt(resource_provider_.get(), | 1530 CreateCandidateQuadAt(resource_provider_.get(), |
| 1531 pass->shared_quad_state_list.back(), pass.get(), | 1531 pass->shared_quad_state_list.back(), pass.get(), |
| 1532 kOverlayBottomRightRect); | 1532 kOverlayBottomRightRect); |
| 1533 CreateOpaqueQuadAt(resource_provider_.get(), | 1533 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1534 pass->shared_quad_state_list.back(), pass.get(), kLeftSide, | 1534 pass->shared_quad_state_list.back(), pass.get(), kLeftSide, |
| 1535 SK_ColorBLACK); | 1535 SK_ColorBLACK); |
| 1536 CreateOpaqueQuadAt(resource_provider_.get(), | 1536 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1537 pass->shared_quad_state_list.back(), pass.get(), kTopRight, | 1537 pass->shared_quad_state_list.back(), pass.get(), kTopRight, |
| 1538 SK_ColorBLACK); | 1538 SK_ColorBLACK); |
| 1539 | 1539 |
| 1540 OverlayCandidateList candidate_list; | 1540 OverlayCandidateList candidate_list; |
| 1541 base::flat_map<int, FilterOperations*> render_pass_filters; | 1541 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1542 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1542 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1543 overlay_processor_->ProcessForOverlays( | 1543 overlay_processor_->ProcessForOverlays( |
| 1544 resource_provider_.get(), pass.get(), render_pass_filters, | 1544 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1545 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1545 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1546 &damage_rect_, &content_bounds_); | 1546 &damage_rect_, &content_bounds_); |
| 1547 | 1547 |
| 1548 EXPECT_EQ(1U, content_bounds_.size()); | 1548 EXPECT_EQ(1U, content_bounds_.size()); |
| 1549 EXPECT_TRUE(content_bounds_[0].IsEmpty()); | 1549 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1550 } | 1550 } |
| 1551 | 1551 |
| 1552 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { | 1552 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { |
| 1553 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1553 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1554 CreateOpaqueQuadAt(resource_provider_.get(), | 1554 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1555 pass->shared_quad_state_list.back(), pass.get(), | 1555 pass->shared_quad_state_list.back(), pass.get(), |
| 1556 kOverlayTopLeftRect); | 1556 kOverlayTopLeftRect); |
| 1557 CreateCandidateQuadAt(resource_provider_.get(), | 1557 CreateCandidateQuadAt(resource_provider_.get(), |
| 1558 pass->shared_quad_state_list.back(), pass.get(), | 1558 pass->shared_quad_state_list.back(), pass.get(), |
| 1559 kOverlayRect); | 1559 kOverlayRect); |
| 1560 | 1560 |
| 1561 OverlayCandidateList candidate_list; | 1561 OverlayCandidateList candidate_list; |
| 1562 base::flat_map<int, FilterOperations*> render_pass_filters; | 1562 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1563 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1563 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1564 overlay_processor_->ProcessForOverlays( | 1564 overlay_processor_->ProcessForOverlays( |
| 1565 resource_provider_.get(), pass.get(), render_pass_filters, | 1565 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1566 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1566 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1567 &damage_rect_, &content_bounds_); | 1567 &damage_rect_, &content_bounds_); |
| 1568 | 1568 |
| 1569 EXPECT_EQ(1U, content_bounds_.size()); | 1569 EXPECT_EQ(1U, content_bounds_.size()); |
| 1570 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); | 1570 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); |
| 1571 } | 1571 } |
| 1572 | 1572 |
| 1573 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { | 1573 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { |
| 1574 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1574 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1575 CreateOpaqueQuadAt(resource_provider_.get(), | 1575 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1576 pass->shared_quad_state_list.back(), pass.get(), | 1576 pass->shared_quad_state_list.back(), pass.get(), |
| 1577 kOverlayTopLeftRect); | 1577 kOverlayTopLeftRect); |
| 1578 CreateOpaqueQuadAt(resource_provider_.get(), | 1578 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1579 pass->shared_quad_state_list.back(), pass.get(), | 1579 pass->shared_quad_state_list.back(), pass.get(), |
| 1580 kOverlayBottomRightRect); | 1580 kOverlayBottomRightRect); |
| 1581 CreateCandidateQuadAt(resource_provider_.get(), | 1581 CreateCandidateQuadAt(resource_provider_.get(), |
| 1582 pass->shared_quad_state_list.back(), pass.get(), | 1582 pass->shared_quad_state_list.back(), pass.get(), |
| 1583 kOverlayRect); | 1583 kOverlayRect); |
| 1584 | 1584 |
| 1585 OverlayCandidateList candidate_list; | 1585 OverlayCandidateList candidate_list; |
| 1586 base::flat_map<int, FilterOperations*> render_pass_filters; | 1586 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1587 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1587 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1588 overlay_processor_->ProcessForOverlays( | 1588 overlay_processor_->ProcessForOverlays( |
| 1589 resource_provider_.get(), pass.get(), render_pass_filters, | 1589 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1590 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1590 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1591 &damage_rect_, &content_bounds_); | 1591 &damage_rect_, &content_bounds_); |
| 1592 | 1592 |
| 1593 EXPECT_EQ(1U, content_bounds_.size()); | 1593 EXPECT_EQ(1U, content_bounds_.size()); |
| 1594 EXPECT_EQ(kOverlayRect, content_bounds_[0]); | 1594 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1595 } | 1595 } |
| 1596 | 1596 |
| 1597 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { | 1597 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { |
| 1598 // Check rounding behaviour on overlay quads. Be conservative (content | 1598 // Check rounding behaviour on overlay quads. Be conservative (content |
| 1599 // potentially visible on boundary). | 1599 // potentially visible on boundary). |
| 1600 const gfx::Rect overlay_rect(1, 1, 8, 8); | 1600 const gfx::Rect overlay_rect(1, 1, 8, 8); |
| 1601 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( | 1601 output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( |
| 1602 gfx::RectF(1.5f, 1.5f, 8, 8)); | 1602 gfx::RectF(1.5f, 1.5f, 8, 8)); |
| 1603 | 1603 |
| 1604 gfx::Transform transform; | 1604 gfx::Transform transform; |
| 1605 transform.Translate(0.5f, 0.5f); | 1605 transform.Translate(0.5f, 0.5f); |
| 1606 | 1606 |
| 1607 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); | 1607 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1608 CreateCandidateQuadAt(resource_provider_.get(), | 1608 CreateCandidateQuadAt(resource_provider_.get(), |
| 1609 pass->shared_quad_state_list.back(), pass.get(), | 1609 pass->shared_quad_state_list.back(), pass.get(), |
| 1610 overlay_rect); | 1610 overlay_rect); |
| 1611 CreateOpaqueQuadAt(resource_provider_.get(), | 1611 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1612 pass->shared_quad_state_list.back(), pass.get(), | 1612 pass->shared_quad_state_list.back(), pass.get(), |
| 1613 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); | 1613 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); |
| 1614 | 1614 |
| 1615 OverlayCandidateList candidate_list; | 1615 OverlayCandidateList candidate_list; |
| 1616 base::flat_map<int, FilterOperations*> render_pass_filters; | 1616 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1617 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1617 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1618 overlay_processor_->ProcessForOverlays( | 1618 overlay_processor_->ProcessForOverlays( |
| 1619 resource_provider_.get(), pass.get(), render_pass_filters, | 1619 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1620 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1620 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1621 &damage_rect_, &content_bounds_); | 1621 &damage_rect_, &content_bounds_); |
| 1622 | 1622 |
| 1623 EXPECT_EQ(1U, content_bounds_.size()); | 1623 EXPECT_EQ(1U, content_bounds_.size()); |
| 1624 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); | 1624 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); |
| 1625 } | 1625 } |
| 1626 | 1626 |
| 1627 TEST_F(UnderlayCastTest, RoundContentBounds) { | 1627 TEST_F(UnderlayCastTest, RoundContentBounds) { |
| 1628 // Check rounding behaviour on content quads (bounds should be enclosing | 1628 // Check rounding behaviour on content quads (bounds should be enclosing |
| 1629 // rect). | 1629 // rect). |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1640 pass->shared_quad_state_list.back(), pass.get(), | 1640 pass->shared_quad_state_list.back(), pass.get(), |
| 1641 overlay_rect); | 1641 overlay_rect); |
| 1642 CreateOpaqueQuadAt(resource_provider_.get(), | 1642 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1643 pass->shared_quad_state_list.back(), pass.get(), | 1643 pass->shared_quad_state_list.back(), pass.get(), |
| 1644 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE); | 1644 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE); |
| 1645 | 1645 |
| 1646 OverlayCandidateList candidate_list; | 1646 OverlayCandidateList candidate_list; |
| 1647 base::flat_map<int, FilterOperations*> render_pass_filters; | 1647 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1648 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1648 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1649 overlay_processor_->ProcessForOverlays( | 1649 overlay_processor_->ProcessForOverlays( |
| 1650 resource_provider_.get(), pass.get(), render_pass_filters, | 1650 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1651 render_pass_background_filters, &candidate_list, nullptr, nullptr, | 1651 render_pass_background_filters, &candidate_list, nullptr, nullptr, |
| 1652 &damage_rect_, &content_bounds_); | 1652 &damage_rect_, &content_bounds_); |
| 1653 | 1653 |
| 1654 EXPECT_EQ(1U, content_bounds_.size()); | 1654 EXPECT_EQ(1U, content_bounds_.size()); |
| 1655 EXPECT_EQ(kOverlayRect, content_bounds_[0]); | 1655 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1656 } | 1656 } |
| 1657 | 1657 |
| 1658 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { | 1658 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { |
| 1659 OverlayCandidateList list; | 1659 OverlayCandidateList list; |
| 1660 OverlayCandidate output_surface_plane; | 1660 OverlayCandidate output_surface_plane; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1674 pass.get()); | 1674 pass.get()); |
| 1675 pass->shared_quad_state_list.back() | 1675 pass->shared_quad_state_list.back() |
| 1676 ->quad_to_target_transform.RotateAboutZAxis(45.f); | 1676 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
| 1677 | 1677 |
| 1678 gfx::Rect damage_rect; | 1678 gfx::Rect damage_rect; |
| 1679 CALayerOverlayList ca_layer_list; | 1679 CALayerOverlayList ca_layer_list; |
| 1680 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1680 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1681 base::flat_map<int, FilterOperations*> render_pass_filters; | 1681 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1682 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1682 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1683 overlay_processor_->ProcessForOverlays( | 1683 overlay_processor_->ProcessForOverlays( |
| 1684 resource_provider_.get(), pass.get(), render_pass_filters, | 1684 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1685 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, | 1685 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
| 1686 &damage_rect_, &content_bounds_); | 1686 &damage_rect_, &content_bounds_); |
| 1687 EXPECT_EQ(gfx::Rect(), damage_rect); | 1687 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1688 EXPECT_EQ(0U, overlay_list.size()); | 1688 EXPECT_EQ(0U, overlay_list.size()); |
| 1689 EXPECT_EQ(1U, ca_layer_list.size()); | 1689 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1690 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1690 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1691 } | 1691 } |
| 1692 | 1692 |
| 1693 TEST_F(CALayerOverlayTest, ThreeDTransform) { | 1693 TEST_F(CALayerOverlayTest, ThreeDTransform) { |
| 1694 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1694 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1695 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1695 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1696 pass->shared_quad_state_list.back(), | 1696 pass->shared_quad_state_list.back(), |
| 1697 pass.get()); | 1697 pass.get()); |
| 1698 pass->shared_quad_state_list.back() | 1698 pass->shared_quad_state_list.back() |
| 1699 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 1699 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 1700 | 1700 |
| 1701 gfx::Rect damage_rect; | 1701 gfx::Rect damage_rect; |
| 1702 CALayerOverlayList ca_layer_list; | 1702 CALayerOverlayList ca_layer_list; |
| 1703 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1703 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1704 base::flat_map<int, FilterOperations*> render_pass_filters; | 1704 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1705 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1705 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1706 overlay_processor_->ProcessForOverlays( | 1706 overlay_processor_->ProcessForOverlays( |
| 1707 resource_provider_.get(), pass.get(), render_pass_filters, | 1707 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1708 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, | 1708 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
| 1709 &damage_rect_, &content_bounds_); | 1709 &damage_rect_, &content_bounds_); |
| 1710 EXPECT_EQ(0U, overlay_list.size()); | 1710 EXPECT_EQ(0U, overlay_list.size()); |
| 1711 EXPECT_EQ(1U, ca_layer_list.size()); | 1711 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1712 gfx::Transform expected_transform; | 1712 gfx::Transform expected_transform; |
| 1713 expected_transform.RotateAboutXAxis(45.f); | 1713 expected_transform.RotateAboutXAxis(45.f); |
| 1714 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); | 1714 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); |
| 1715 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); | 1715 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); |
| 1716 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1716 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1717 } | 1717 } |
| 1718 | 1718 |
| 1719 TEST_F(CALayerOverlayTest, AllowContainingClip) { | 1719 TEST_F(CALayerOverlayTest, AllowContainingClip) { |
| 1720 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1720 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1721 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1721 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1722 pass->shared_quad_state_list.back(), | 1722 pass->shared_quad_state_list.back(), |
| 1723 pass.get()); | 1723 pass.get()); |
| 1724 pass->shared_quad_state_list.back()->is_clipped = true; | 1724 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1725 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; | 1725 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; |
| 1726 | 1726 |
| 1727 gfx::Rect damage_rect; | 1727 gfx::Rect damage_rect; |
| 1728 CALayerOverlayList ca_layer_list; | 1728 CALayerOverlayList ca_layer_list; |
| 1729 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1729 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1730 base::flat_map<int, FilterOperations*> render_pass_filters; | 1730 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1731 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1731 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1732 overlay_processor_->ProcessForOverlays( | 1732 overlay_processor_->ProcessForOverlays( |
| 1733 resource_provider_.get(), pass.get(), render_pass_filters, | 1733 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1734 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, | 1734 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
| 1735 &damage_rect_, &content_bounds_); | 1735 &damage_rect_, &content_bounds_); |
| 1736 EXPECT_EQ(gfx::Rect(), damage_rect); | 1736 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1737 EXPECT_EQ(0U, overlay_list.size()); | 1737 EXPECT_EQ(0U, overlay_list.size()); |
| 1738 EXPECT_EQ(1U, ca_layer_list.size()); | 1738 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1739 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1739 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1740 } | 1740 } |
| 1741 | 1741 |
| 1742 TEST_F(CALayerOverlayTest, NontrivialClip) { | 1742 TEST_F(CALayerOverlayTest, NontrivialClip) { |
| 1743 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1743 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1744 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1744 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1745 pass->shared_quad_state_list.back(), | 1745 pass->shared_quad_state_list.back(), |
| 1746 pass.get()); | 1746 pass.get()); |
| 1747 pass->shared_quad_state_list.back()->is_clipped = true; | 1747 pass->shared_quad_state_list.back()->is_clipped = true; |
| 1748 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); | 1748 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); |
| 1749 | 1749 |
| 1750 gfx::Rect damage_rect; | 1750 gfx::Rect damage_rect; |
| 1751 CALayerOverlayList ca_layer_list; | 1751 CALayerOverlayList ca_layer_list; |
| 1752 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1752 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1753 base::flat_map<int, FilterOperations*> render_pass_filters; | 1753 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1754 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1754 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1755 overlay_processor_->ProcessForOverlays( | 1755 overlay_processor_->ProcessForOverlays( |
| 1756 resource_provider_.get(), pass.get(), render_pass_filters, | 1756 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1757 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, | 1757 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
| 1758 &damage_rect_, &content_bounds_); | 1758 &damage_rect_, &content_bounds_); |
| 1759 EXPECT_EQ(gfx::Rect(), damage_rect); | 1759 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1760 EXPECT_EQ(0U, overlay_list.size()); | 1760 EXPECT_EQ(0U, overlay_list.size()); |
| 1761 EXPECT_EQ(1U, ca_layer_list.size()); | 1761 EXPECT_EQ(1U, ca_layer_list.size()); |
| 1762 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); | 1762 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); |
| 1763 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), | 1763 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), |
| 1764 ca_layer_list.back().shared_state->clip_rect); | 1764 ca_layer_list.back().shared_state->clip_rect); |
| 1765 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1765 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1766 } | 1766 } |
| 1767 | 1767 |
| 1768 TEST_F(CALayerOverlayTest, SkipTransparent) { | 1768 TEST_F(CALayerOverlayTest, SkipTransparent) { |
| 1769 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1769 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1770 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1770 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1771 pass->shared_quad_state_list.back(), | 1771 pass->shared_quad_state_list.back(), |
| 1772 pass.get()); | 1772 pass.get()); |
| 1773 pass->shared_quad_state_list.back()->opacity = 0; | 1773 pass->shared_quad_state_list.back()->opacity = 0; |
| 1774 | 1774 |
| 1775 gfx::Rect damage_rect; | 1775 gfx::Rect damage_rect; |
| 1776 CALayerOverlayList ca_layer_list; | 1776 CALayerOverlayList ca_layer_list; |
| 1777 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1777 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
| 1778 base::flat_map<int, FilterOperations*> render_pass_filters; | 1778 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1779 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1779 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1780 overlay_processor_->ProcessForOverlays( | 1780 overlay_processor_->ProcessForOverlays( |
| 1781 resource_provider_.get(), pass.get(), render_pass_filters, | 1781 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1782 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, | 1782 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
| 1783 &damage_rect_, &content_bounds_); | 1783 &damage_rect_, &content_bounds_); |
| 1784 EXPECT_EQ(gfx::Rect(), damage_rect); | 1784 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1785 EXPECT_EQ(0U, overlay_list.size()); | 1785 EXPECT_EQ(0U, overlay_list.size()); |
| 1786 EXPECT_EQ(0U, ca_layer_list.size()); | 1786 EXPECT_EQ(0U, ca_layer_list.size()); |
| 1787 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1787 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1788 } | 1788 } |
| 1789 | 1789 |
| 1790 TEST_F(DCLayerOverlayTest, AllowNonAxisAlignedTransform) { | 1790 TEST_F(DCLayerOverlayTest, AllowNonAxisAlignedTransform) { |
| 1791 base::test::ScopedFeatureList feature_list; | 1791 base::test::ScopedFeatureList feature_list; |
| 1792 feature_list.InitAndEnableFeature( | 1792 feature_list.InitAndEnableFeature( |
| 1793 features::kDirectCompositionComplexOverlays); | 1793 features::kDirectCompositionComplexOverlays); |
| 1794 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1794 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1795 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), | 1795 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
| 1796 pass->shared_quad_state_list.back(), | 1796 pass->shared_quad_state_list.back(), |
| 1797 pass.get()); | 1797 pass.get()); |
| 1798 pass->shared_quad_state_list.back() | 1798 pass->shared_quad_state_list.back() |
| 1799 ->quad_to_target_transform.RotateAboutZAxis(45.f); | 1799 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
| 1800 | 1800 |
| 1801 gfx::Rect damage_rect; | 1801 gfx::Rect damage_rect; |
| 1802 DCLayerOverlayList dc_layer_list; | 1802 DCLayerOverlayList dc_layer_list; |
| 1803 OverlayCandidateList overlay_list; | 1803 OverlayCandidateList overlay_list; |
| 1804 base::flat_map<int, FilterOperations*> render_pass_filters; | 1804 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1805 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1805 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1806 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1806 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1807 overlay_processor_->ProcessForOverlays( | 1807 overlay_processor_->ProcessForOverlays( |
| 1808 resource_provider_.get(), pass.get(), render_pass_filters, | 1808 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1809 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1809 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1810 &damage_rect_, &content_bounds_); | 1810 &damage_rect_, &content_bounds_); |
| 1811 EXPECT_EQ(gfx::Rect(), damage_rect); | 1811 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1812 EXPECT_EQ(0U, overlay_list.size()); | 1812 EXPECT_EQ(0U, overlay_list.size()); |
| 1813 EXPECT_EQ(1U, dc_layer_list.size()); | 1813 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1814 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); | 1814 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
| 1815 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1815 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1816 EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_); | 1816 EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_); |
| 1817 } | 1817 } |
| 1818 | 1818 |
| 1819 TEST_F(DCLayerOverlayTest, Occluded) { | 1819 TEST_F(DCLayerOverlayTest, Occluded) { |
| 1820 base::test::ScopedFeatureList feature_list; | 1820 base::test::ScopedFeatureList feature_list; |
| 1821 feature_list.InitAndEnableFeature(features::kDirectCompositionUnderlays); | 1821 feature_list.InitAndEnableFeature(features::kDirectCompositionUnderlays); |
| 1822 { | 1822 { |
| 1823 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1823 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1824 CreateOpaqueQuadAt(resource_provider_.get(), | 1824 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1825 pass->shared_quad_state_list.back(), pass.get(), | 1825 pass->shared_quad_state_list.back(), pass.get(), |
| 1826 gfx::Rect(0, 2, 100, 100), SK_ColorWHITE); | 1826 gfx::Rect(0, 2, 100, 100), SK_ColorWHITE); |
| 1827 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), | 1827 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
| 1828 pass->shared_quad_state_list.back(), | 1828 pass->shared_quad_state_list.back(), |
| 1829 pass.get()); | 1829 pass.get()); |
| 1830 | 1830 |
| 1831 gfx::Rect damage_rect; | 1831 gfx::Rect damage_rect; |
| 1832 DCLayerOverlayList dc_layer_list; | 1832 DCLayerOverlayList dc_layer_list; |
| 1833 OverlayCandidateList overlay_list; | 1833 OverlayCandidateList overlay_list; |
| 1834 base::flat_map<int, FilterOperations*> render_pass_filters; | 1834 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1835 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1835 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1836 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1836 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1837 overlay_processor_->ProcessForOverlays( | 1837 overlay_processor_->ProcessForOverlays( |
| 1838 resource_provider_.get(), pass.get(), render_pass_filters, | 1838 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1839 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1839 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1840 &damage_rect_, &content_bounds_); | 1840 &damage_rect_, &content_bounds_); |
| 1841 EXPECT_EQ(gfx::Rect(), damage_rect); | 1841 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1842 EXPECT_EQ(0U, overlay_list.size()); | 1842 EXPECT_EQ(0U, overlay_list.size()); |
| 1843 EXPECT_EQ(1U, dc_layer_list.size()); | 1843 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1844 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1844 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1845 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); | 1845 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); |
| 1846 // Entire underlay rect must be redrawn. | 1846 // Entire underlay rect must be redrawn. |
| 1847 EXPECT_EQ(gfx::Rect(0, 0, 256, 256), damage_rect_); | 1847 EXPECT_EQ(gfx::Rect(0, 0, 256, 256), damage_rect_); |
| 1848 } | 1848 } |
| 1849 { | 1849 { |
| 1850 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1850 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1851 CreateOpaqueQuadAt(resource_provider_.get(), | 1851 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1852 pass->shared_quad_state_list.back(), pass.get(), | 1852 pass->shared_quad_state_list.back(), pass.get(), |
| 1853 gfx::Rect(2, 2, 100, 100), SK_ColorWHITE); | 1853 gfx::Rect(2, 2, 100, 100), SK_ColorWHITE); |
| 1854 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), | 1854 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
| 1855 pass->shared_quad_state_list.back(), | 1855 pass->shared_quad_state_list.back(), |
| 1856 pass.get()); | 1856 pass.get()); |
| 1857 | 1857 |
| 1858 gfx::Rect damage_rect; | 1858 gfx::Rect damage_rect; |
| 1859 DCLayerOverlayList dc_layer_list; | 1859 DCLayerOverlayList dc_layer_list; |
| 1860 OverlayCandidateList overlay_list; | 1860 OverlayCandidateList overlay_list; |
| 1861 base::flat_map<int, FilterOperations*> render_pass_filters; | 1861 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1862 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1862 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1863 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1863 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1864 overlay_processor_->ProcessForOverlays( | 1864 overlay_processor_->ProcessForOverlays( |
| 1865 resource_provider_.get(), pass.get(), render_pass_filters, | 1865 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1866 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1866 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1867 &damage_rect_, &content_bounds_); | 1867 &damage_rect_, &content_bounds_); |
| 1868 EXPECT_EQ(gfx::Rect(), damage_rect); | 1868 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1869 EXPECT_EQ(0U, overlay_list.size()); | 1869 EXPECT_EQ(0U, overlay_list.size()); |
| 1870 EXPECT_EQ(1U, dc_layer_list.size()); | 1870 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1871 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1871 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1872 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); | 1872 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); |
| 1873 // The underlay rectangle is the same, so the damage is contained within | 1873 // The underlay rectangle is the same, so the damage is contained within |
| 1874 // the combined occluding rects for this and the last frame. | 1874 // the combined occluding rects for this and the last frame. |
| 1875 EXPECT_EQ(gfx::Rect(1, 2, 10, 9), damage_rect_); | 1875 EXPECT_EQ(gfx::Rect(1, 2, 10, 9), damage_rect_); |
| 1876 } | 1876 } |
| 1877 } | 1877 } |
| 1878 | 1878 |
| 1879 TEST_F(DCLayerOverlayTest, DamageRect) { | 1879 TEST_F(DCLayerOverlayTest, DamageRect) { |
| 1880 for (int i = 0; i < 2; i++) { | 1880 for (int i = 0; i < 2; i++) { |
| 1881 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1881 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1882 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), | 1882 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
| 1883 pass->shared_quad_state_list.back(), | 1883 pass->shared_quad_state_list.back(), |
| 1884 pass.get()); | 1884 pass.get()); |
| 1885 | 1885 |
| 1886 gfx::Rect damage_rect; | 1886 gfx::Rect damage_rect; |
| 1887 DCLayerOverlayList dc_layer_list; | 1887 DCLayerOverlayList dc_layer_list; |
| 1888 OverlayCandidateList overlay_list; | 1888 OverlayCandidateList overlay_list; |
| 1889 base::flat_map<int, FilterOperations*> render_pass_filters; | 1889 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1890 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1890 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1891 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1891 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1892 overlay_processor_->ProcessForOverlays( | 1892 overlay_processor_->ProcessForOverlays( |
| 1893 resource_provider_.get(), pass.get(), render_pass_filters, | 1893 resource_provider_.get(), pass.get(), (i == 0), render_pass_filters, |
| 1894 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1894 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1895 &damage_rect_, &content_bounds_); | 1895 &damage_rect_, &content_bounds_); |
| 1896 EXPECT_EQ(gfx::Rect(), damage_rect); | 1896 EXPECT_EQ(gfx::Rect(), damage_rect); |
| 1897 EXPECT_EQ(0U, overlay_list.size()); | 1897 EXPECT_EQ(0U, overlay_list.size()); |
| 1898 EXPECT_EQ(1U, dc_layer_list.size()); | 1898 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1899 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1899 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
| 1900 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); | 1900 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
| 1901 // Damage rect should be unchanged on initial frame because of resize, but | 1901 // Damage rect should be unchanged on initial frame because of resize, but |
| 1902 // should be empty on the second frame because everything was put in a | 1902 // should be empty on the second frame because everything was put in a |
| 1903 // layer. | 1903 // layer. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1929 shared_state->is_clipped = true; | 1929 shared_state->is_clipped = true; |
| 1930 // Clipped rect shouldn't be overlapped by clipped opaque quad rect. | 1930 // Clipped rect shouldn't be overlapped by clipped opaque quad rect. |
| 1931 shared_state->clip_rect = gfx::Rect(0, 0, 100, 3); | 1931 shared_state->clip_rect = gfx::Rect(0, 0, 100, 3); |
| 1932 | 1932 |
| 1933 DCLayerOverlayList dc_layer_list; | 1933 DCLayerOverlayList dc_layer_list; |
| 1934 OverlayCandidateList overlay_list; | 1934 OverlayCandidateList overlay_list; |
| 1935 base::flat_map<int, FilterOperations*> render_pass_filters; | 1935 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1936 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1936 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1937 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1937 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1938 overlay_processor_->ProcessForOverlays( | 1938 overlay_processor_->ProcessForOverlays( |
| 1939 resource_provider_.get(), pass.get(), render_pass_filters, | 1939 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1940 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1940 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1941 &damage_rect_, &content_bounds_); | 1941 &damage_rect_, &content_bounds_); |
| 1942 EXPECT_EQ(0U, overlay_list.size()); | 1942 EXPECT_EQ(0U, overlay_list.size()); |
| 1943 EXPECT_EQ(1U, dc_layer_list.size()); | 1943 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1944 // Because of clip rects the overlay isn't occluded and shouldn't be an | 1944 // Because of clip rects the overlay isn't occluded and shouldn't be an |
| 1945 // underlay. | 1945 // underlay. |
| 1946 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); | 1946 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
| 1947 if (i == 1) { | 1947 if (i == 1) { |
| 1948 // The damage rect should only contain contents that aren't in the | 1948 // The damage rect should only contain contents that aren't in the |
| 1949 // clipped overlay rect. | 1949 // clipped overlay rect. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1964 pass->shared_quad_state_list.back(), | 1964 pass->shared_quad_state_list.back(), |
| 1965 pass.get()); | 1965 pass.get()); |
| 1966 pass->shared_quad_state_list.back()->opacity = 0.5f; | 1966 pass->shared_quad_state_list.back()->opacity = 0.5f; |
| 1967 | 1967 |
| 1968 DCLayerOverlayList dc_layer_list; | 1968 DCLayerOverlayList dc_layer_list; |
| 1969 OverlayCandidateList overlay_list; | 1969 OverlayCandidateList overlay_list; |
| 1970 base::flat_map<int, FilterOperations*> render_pass_filters; | 1970 base::flat_map<int, FilterOperations*> render_pass_filters; |
| 1971 base::flat_map<int, FilterOperations*> render_pass_background_filters; | 1971 base::flat_map<int, FilterOperations*> render_pass_background_filters; |
| 1972 damage_rect_ = gfx::Rect(1, 1, 10, 10); | 1972 damage_rect_ = gfx::Rect(1, 1, 10, 10); |
| 1973 overlay_processor_->ProcessForOverlays( | 1973 overlay_processor_->ProcessForOverlays( |
| 1974 resource_provider_.get(), pass.get(), render_pass_filters, | 1974 resource_provider_.get(), pass.get(), false, render_pass_filters, |
| 1975 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, | 1975 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
| 1976 &damage_rect_, &content_bounds_); | 1976 &damage_rect_, &content_bounds_); |
| 1977 EXPECT_EQ(0U, overlay_list.size()); | 1977 EXPECT_EQ(0U, overlay_list.size()); |
| 1978 EXPECT_EQ(1U, dc_layer_list.size()); | 1978 EXPECT_EQ(1U, dc_layer_list.size()); |
| 1979 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); | 1979 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
| 1980 // Quad isn't opaque, so underlying damage must remain the same. | 1980 // Quad isn't opaque, so underlying damage must remain the same. |
| 1981 EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_); | 1981 EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_); |
| 1982 } | 1982 } |
| 1983 } | 1983 } |
| 1984 | 1984 |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2511 CALayerOverlayTest::SetUp(); | 2511 CALayerOverlayTest::SetUp(); |
| 2512 pass_ = CreateRenderPass(); | 2512 pass_ = CreateRenderPass(); |
| 2513 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 2513 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 2514 render_pass_id_ = 3; | 2514 render_pass_id_ = 3; |
| 2515 } | 2515 } |
| 2516 | 2516 |
| 2517 void ProcessForOverlays() { | 2517 void ProcessForOverlays() { |
| 2518 gfx::Rect damage_rect; | 2518 gfx::Rect damage_rect; |
| 2519 overlay_list_ = BackbufferOverlayList(pass_.get()); | 2519 overlay_list_ = BackbufferOverlayList(pass_.get()); |
| 2520 overlay_processor_->ProcessForOverlays( | 2520 overlay_processor_->ProcessForOverlays( |
| 2521 resource_provider_.get(), pass_.get(), render_pass_filters_, | 2521 resource_provider_.get(), pass_.get(), false, render_pass_filters_, |
| 2522 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, | 2522 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, |
| 2523 nullptr, &damage_rect_, &content_bounds_); | 2523 nullptr, &damage_rect_, &content_bounds_); |
| 2524 } | 2524 } |
| 2525 std::unique_ptr<RenderPass> pass_; | 2525 std::unique_ptr<RenderPass> pass_; |
| 2526 RenderPassDrawQuad* quad_; | 2526 RenderPassDrawQuad* quad_; |
| 2527 int render_pass_id_; | 2527 int render_pass_id_; |
| 2528 FilterOperations filters_; | 2528 FilterOperations filters_; |
| 2529 FilterOperations background_filters_; | 2529 FilterOperations background_filters_; |
| 2530 base::flat_map<int, FilterOperations*> render_pass_filters_; | 2530 base::flat_map<int, FilterOperations*> render_pass_filters_; |
| 2531 base::flat_map<int, FilterOperations*> render_pass_background_filters_; | 2531 base::flat_map<int, FilterOperations*> render_pass_background_filters_; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2633 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(), | 2633 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(), |
| 2634 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF()); | 2634 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF()); |
| 2635 } | 2635 } |
| 2636 | 2636 |
| 2637 ProcessForOverlays(); | 2637 ProcessForOverlays(); |
| 2638 EXPECT_EQ(0U, ca_layer_list_.size()); | 2638 EXPECT_EQ(0U, ca_layer_list_.size()); |
| 2639 } | 2639 } |
| 2640 | 2640 |
| 2641 } // namespace | 2641 } // namespace |
| 2642 } // namespace cc | 2642 } // namespace cc |
| OLD | NEW |