Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: cc/output/overlay_unittest.cc

Issue 1452943002: cc: Fix overlay damage tracking bug (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/base/region.h" 5 #include "cc/base/region.h"
6 #include "cc/base/scoped_ptr_vector.h" 6 #include "cc/base/scoped_ptr_vector.h"
7 #include "cc/output/compositor_frame_metadata.h" 7 #include "cc/output/compositor_frame_metadata.h"
8 #include "cc/output/gl_renderer.h" 8 #include "cc/output/gl_renderer.h"
9 #include "cc/output/output_surface.h" 9 #include "cc/output/output_surface.h"
10 #include "cc/output/output_surface_client.h" 10 #include "cc/output/output_surface_client.h"
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 pass->shared_quad_state_list.back(), pass.get()); 407 pass->shared_quad_state_list.back(), pass.get());
408 CreateFullscreenOpaqueQuad(resource_provider_.get(), 408 CreateFullscreenOpaqueQuad(resource_provider_.get(),
409 pass->shared_quad_state_list.back(), pass.get()); 409 pass->shared_quad_state_list.back(), pass.get());
410 410
411 RenderPassList pass_list; 411 RenderPassList pass_list;
412 pass_list.push_back(pass.Pass()); 412 pass_list.push_back(pass.Pass());
413 413
414 // Check for potential candidates. 414 // Check for potential candidates.
415 OverlayCandidateList candidate_list; 415 OverlayCandidateList candidate_list;
416 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 416 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
417 &candidate_list, &damage_rect_); 417 &candidate_list, nullptr,
418 &damage_rect_);
418 419
419 ASSERT_EQ(1U, pass_list.size()); 420 ASSERT_EQ(1U, pass_list.size());
420 ASSERT_EQ(1U, candidate_list.size()); 421 ASSERT_EQ(1U, candidate_list.size());
421 422
422 RenderPass* main_pass = pass_list.back(); 423 RenderPass* main_pass = pass_list.back();
423 // Check that the quad is gone. 424 // Check that the quad is gone.
424 EXPECT_EQ(2U, main_pass->quad_list.size()); 425 EXPECT_EQ(2U, main_pass->quad_list.size());
425 const QuadList& quad_list = main_pass->quad_list; 426 const QuadList& quad_list = main_pass->quad_list;
426 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 427 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
427 it != quad_list.BackToFrontEnd(); ++it) { 428 it != quad_list.BackToFrontEnd(); ++it) {
(...skipping 21 matching lines...) Expand all
449 pass->shared_quad_state_list.back(), pass.get()); 450 pass->shared_quad_state_list.back(), pass.get());
450 CreateFullscreenOpaqueQuad(resource_provider_.get(), 451 CreateFullscreenOpaqueQuad(resource_provider_.get(),
451 pass->shared_quad_state_list.back(), pass.get()); 452 pass->shared_quad_state_list.back(), pass.get());
452 453
453 RenderPassList pass_list; 454 RenderPassList pass_list;
454 pass_list.push_back(pass.Pass()); 455 pass_list.push_back(pass.Pass());
455 456
456 // Check for potential candidates. 457 // Check for potential candidates.
457 OverlayCandidateList candidate_list; 458 OverlayCandidateList candidate_list;
458 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 459 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
459 &candidate_list, &damage_rect_); 460 &candidate_list, nullptr,
461 &damage_rect_);
460 462
461 // Ensure that the display and uv rects have cropping applied to them. 463 // Ensure that the display and uv rects have cropping applied to them.
462 ASSERT_EQ(1U, pass_list.size()); 464 ASSERT_EQ(1U, pass_list.size());
463 ASSERT_EQ(1U, candidate_list.size()); 465 ASSERT_EQ(1U, candidate_list.size());
464 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); 466 EXPECT_EQ(candidate_id, candidate_list[0].resource_id);
465 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); 467 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect);
466 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); 468 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect);
467 } 469 }
468 470
469 TEST_F(SandwichTest, SuccessfulTwoOverlays) { 471 TEST_F(SandwichTest, SuccessfulTwoOverlays) {
470 scoped_ptr<RenderPass> pass = CreateRenderPass(); 472 scoped_ptr<RenderPass> pass = CreateRenderPass();
471 473
472 // Add two non-overlapping candidates. 474 // Add two non-overlapping candidates.
473 CreateCandidateQuadAt(resource_provider_.get(), 475 CreateCandidateQuadAt(resource_provider_.get(),
474 pass->shared_quad_state_list.back(), pass.get(), 476 pass->shared_quad_state_list.back(), pass.get(),
475 kOverlayTopLeftRect); 477 kOverlayTopLeftRect);
476 CreateCandidateQuadAt(resource_provider_.get(), 478 CreateCandidateQuadAt(resource_provider_.get(),
477 pass->shared_quad_state_list.back(), pass.get(), 479 pass->shared_quad_state_list.back(), pass.get(),
478 kOverlayBottomRightRect); 480 kOverlayBottomRightRect);
479 481
480 // Add something behind it. 482 // Add something behind it.
481 CreateFullscreenOpaqueQuad(resource_provider_.get(), 483 CreateFullscreenOpaqueQuad(resource_provider_.get(),
482 pass->shared_quad_state_list.back(), pass.get()); 484 pass->shared_quad_state_list.back(), pass.get());
483 485
484 RenderPassList pass_list; 486 RenderPassList pass_list;
485 pass_list.push_back(pass.Pass()); 487 pass_list.push_back(pass.Pass());
486 OverlayCandidateList candidate_list; 488 OverlayCandidateList candidate_list;
487 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 489 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
488 &candidate_list, &damage_rect_); 490 &candidate_list, nullptr,
491 &damage_rect_);
489 492
490 // Both candidates should become overlays. 493 // Both candidates should become overlays.
491 EXPECT_EQ(1u, pass_list.size()); 494 EXPECT_EQ(1u, pass_list.size());
492 EXPECT_EQ(2u, candidate_list.size()); 495 EXPECT_EQ(2u, candidate_list.size());
493 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); 496 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect);
494 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), 497 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect),
495 candidate_list[1].display_rect); 498 candidate_list[1].display_rect);
496 499
497 // The overlay quads should be gone. 500 // The overlay quads should be gone.
498 const QuadList& quad_list = pass_list.back()->quad_list; 501 const QuadList& quad_list = pass_list.back()->quad_list;
(...skipping 13 matching lines...) Expand all
512 kOverlayRect); 515 kOverlayRect);
513 516
514 // Add something behind it. 517 // Add something behind it.
515 CreateFullscreenOpaqueQuad(resource_provider_.get(), 518 CreateFullscreenOpaqueQuad(resource_provider_.get(),
516 pass->shared_quad_state_list.back(), pass.get()); 519 pass->shared_quad_state_list.back(), pass.get());
517 520
518 RenderPassList pass_list; 521 RenderPassList pass_list;
519 pass_list.push_back(pass.Pass()); 522 pass_list.push_back(pass.Pass());
520 OverlayCandidateList candidate_list; 523 OverlayCandidateList candidate_list;
521 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 524 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
522 &candidate_list, &damage_rect_); 525 &candidate_list, nullptr,
526 &damage_rect_);
523 527
524 // Only one of the candidates should become an overlay. 528 // Only one of the candidates should become an overlay.
525 EXPECT_EQ(1u, pass_list.size()); 529 EXPECT_EQ(1u, pass_list.size());
526 EXPECT_EQ(1u, candidate_list.size()); 530 EXPECT_EQ(1u, candidate_list.size());
527 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); 531 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect);
528 532
529 // One of the overlay quads should be gone. 533 // One of the overlay quads should be gone.
530 const QuadList& quad_list = pass_list.back()->quad_list; 534 const QuadList& quad_list = pass_list.back()->quad_list;
531 EXPECT_EQ(2u, quad_list.size()); 535 EXPECT_EQ(2u, quad_list.size());
532 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); 536 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material);
(...skipping 14 matching lines...) Expand all
547 CreateOpaqueQuadAt(resource_provider_.get(), 551 CreateOpaqueQuadAt(resource_provider_.get(),
548 pass->shared_quad_state_list.back(), pass.get(), 552 pass->shared_quad_state_list.back(), pass.get(),
549 gfx::Rect(kDisplaySize)); 553 gfx::Rect(kDisplaySize));
550 554
551 RenderPassList pass_list; 555 RenderPassList pass_list;
552 pass_list.push_back(pass.Pass()); 556 pass_list.push_back(pass.Pass());
553 557
554 // Check for potential candidates. 558 // Check for potential candidates.
555 OverlayCandidateList candidate_list; 559 OverlayCandidateList candidate_list;
556 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 560 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
557 &candidate_list, &damage_rect_); 561 &candidate_list, nullptr,
562 &damage_rect_);
558 ASSERT_EQ(1U, pass_list.size()); 563 ASSERT_EQ(1U, pass_list.size());
559 ASSERT_EQ(2U, candidate_list.size()); 564 ASSERT_EQ(2U, candidate_list.size());
560 565
561 RenderPass* main_pass = pass_list.back(); 566 RenderPass* main_pass = pass_list.back();
562 // Check that the quad is gone. 567 // Check that the quad is gone.
563 EXPECT_EQ(3U, main_pass->quad_list.size()); 568 EXPECT_EQ(3U, main_pass->quad_list.size());
564 const QuadList& quad_list = main_pass->quad_list; 569 const QuadList& quad_list = main_pass->quad_list;
565 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 570 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
566 it != quad_list.BackToFrontEnd(); ++it) { 571 it != quad_list.BackToFrontEnd(); ++it) {
567 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); 572 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 gfx::Rect(kDisplaySize)); 607 gfx::Rect(kDisplaySize));
603 608
604 RenderPassList pass_list; 609 RenderPassList pass_list;
605 pass_list.push_back(pass.Pass()); 610 pass_list.push_back(pass.Pass());
606 611
607 // Run the overlay strategy on that input. 612 // Run the overlay strategy on that input.
608 RenderPass* main_pass = pass_list.back(); 613 RenderPass* main_pass = pass_list.back();
609 OverlayCandidateList candidate_list; 614 OverlayCandidateList candidate_list;
610 EXPECT_EQ(4U, main_pass->quad_list.size()); 615 EXPECT_EQ(4U, main_pass->quad_list.size());
611 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 616 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
612 &candidate_list, &damage_rect_); 617 &candidate_list, nullptr,
618 &damage_rect_);
613 ASSERT_EQ(1U, pass_list.size()); 619 ASSERT_EQ(1U, pass_list.size());
614 ASSERT_EQ(3U, candidate_list.size()); 620 ASSERT_EQ(3U, candidate_list.size());
615 621
616 // Check that the candidate quad is gone and that we now have two transparent 622 // Check that the candidate quad is gone and that we now have two transparent
617 // quads for the same region that was covered on the overlay. 623 // quads for the same region that was covered on the overlay.
618 EXPECT_EQ(5U, main_pass->quad_list.size()); 624 EXPECT_EQ(5U, main_pass->quad_list.size());
619 const QuadList& quad_list = main_pass->quad_list; 625 const QuadList& quad_list = main_pass->quad_list;
620 Region transparent_quad_region; 626 Region transparent_quad_region;
621 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 627 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
622 it != quad_list.BackToFrontEnd(); ++it) { 628 it != quad_list.BackToFrontEnd(); ++it) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 669
664 // Primary plane. 670 // Primary plane.
665 OverlayCandidate output_surface_plane; 671 OverlayCandidate output_surface_plane;
666 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); 672 output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
667 output_surface_plane.quad_rect_in_target_space = kOverlayRect; 673 output_surface_plane.quad_rect_in_target_space = kOverlayRect;
668 output_surface_plane.use_output_surface_for_resource = true; 674 output_surface_plane.use_output_surface_for_resource = true;
669 output_surface_plane.overlay_handled = true; 675 output_surface_plane.overlay_handled = true;
670 candidate_list.push_back(output_surface_plane); 676 candidate_list.push_back(output_surface_plane);
671 677
672 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 678 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
673 &candidate_list, &damage_rect_); 679 &candidate_list, nullptr,
674 DCHECK(!damage_rect_.IsEmpty()); 680 &damage_rect_);
681 EXPECT_EQ(2u, candidate_list.size());
682 EXPECT_TRUE(damage_rect_.IsEmpty());
675 } 683 }
676 684
677 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { 685 TEST_F(SandwichTest, DamageRectNonEmpty) {
686 scoped_ptr<RenderPass> pass = CreateRenderPass();
687 CreateFullscreenOpaqueQuad(resource_provider_.get(),
688 pass->shared_quad_state_list.back(), pass.get());
689 CreateFullscreenCandidateQuad(resource_provider_.get(),
690 pass->shared_quad_state_list.back(),
691 pass.get());
692 CreateFullscreenOpaqueQuad(resource_provider_.get(),
693 pass->shared_quad_state_list.back(), pass.get());
694 damage_rect_ = kOverlayRect;
695
696 RenderPassList pass_list;
697 pass_list.push_back(pass.Pass());
698
699 // Check for potential candidates.
700 OverlayCandidateList candidate_list;
701
702 // Primary plane.
703 OverlayCandidate output_surface_plane;
704 output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
705 output_surface_plane.quad_rect_in_target_space = kOverlayRect;
706 output_surface_plane.use_output_surface_for_resource = true;
707 output_surface_plane.overlay_handled = true;
708 candidate_list.push_back(output_surface_plane);
709
710 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
711 &candidate_list, nullptr,
712 &damage_rect_);
713 EXPECT_EQ(3u, candidate_list.size());
714 EXPECT_EQ(damage_rect_, kOverlayRect);
715 }
716
717 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) {
678 scoped_ptr<RenderPass> pass = CreateRenderPass(); 718 scoped_ptr<RenderPass> pass = CreateRenderPass();
679 TextureDrawQuad* original_quad = 719 TextureDrawQuad* original_quad =
680 CreateFullscreenCandidateQuad(resource_provider_.get(), 720 CreateFullscreenCandidateQuad(resource_provider_.get(),
681 pass->shared_quad_state_list.back(), 721 pass->shared_quad_state_list.back(),
682 pass.get()); 722 pass.get());
683 unsigned original_resource_id = original_quad->resource_id(); 723 unsigned original_resource_id = original_quad->resource_id();
684 724
685 // Add something behind it. 725 // Add something behind it.
686 CreateFullscreenOpaqueQuad(resource_provider_.get(), 726 CreateFullscreenOpaqueQuad(resource_provider_.get(),
687 pass->shared_quad_state_list.back(), pass.get()); 727 pass->shared_quad_state_list.back(), pass.get());
688 CreateFullscreenOpaqueQuad(resource_provider_.get(), 728 CreateFullscreenOpaqueQuad(resource_provider_.get(),
689 pass->shared_quad_state_list.back(), pass.get()); 729 pass->shared_quad_state_list.back(), pass.get());
690 730
691 RenderPassList pass_list; 731 RenderPassList pass_list;
692 pass_list.push_back(pass.Pass()); 732 pass_list.push_back(pass.Pass());
693 733
694 // Check for potential candidates. 734 // Check for potential candidates.
695 OverlayCandidateList candidate_list; 735 OverlayCandidateList candidate_list;
696 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 736 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
697 &candidate_list, &damage_rect_); 737 &candidate_list, nullptr,
738 &damage_rect_);
698 739
699 ASSERT_EQ(1U, pass_list.size()); 740 ASSERT_EQ(1U, pass_list.size());
700 ASSERT_EQ(1U, candidate_list.size()); 741 ASSERT_EQ(1U, candidate_list.size());
701 742
702 RenderPass* main_pass = pass_list.back(); 743 RenderPass* main_pass = pass_list.back();
703 // Check that the quad is gone. 744 // Check that the quad is gone.
704 EXPECT_EQ(2U, main_pass->quad_list.size()); 745 EXPECT_EQ(2U, main_pass->quad_list.size());
705 const QuadList& quad_list = main_pass->quad_list; 746 const QuadList& quad_list = main_pass->quad_list;
706 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 747 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
707 it != quad_list.BackToFrontEnd(); 748 it != quad_list.BackToFrontEnd();
(...skipping 26 matching lines...) Expand all
734 775
735 // Primary plane. 776 // Primary plane.
736 OverlayCandidate output_surface_plane; 777 OverlayCandidate output_surface_plane;
737 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); 778 output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
738 output_surface_plane.quad_rect_in_target_space = kOverlayRect; 779 output_surface_plane.quad_rect_in_target_space = kOverlayRect;
739 output_surface_plane.use_output_surface_for_resource = true; 780 output_surface_plane.use_output_surface_for_resource = true;
740 output_surface_plane.overlay_handled = true; 781 output_surface_plane.overlay_handled = true;
741 candidate_list.push_back(output_surface_plane); 782 candidate_list.push_back(output_surface_plane);
742 783
743 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 784 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
744 &candidate_list, &damage_rect_); 785 &candidate_list, nullptr,
786 &damage_rect_);
745 DCHECK(damage_rect_.IsEmpty()); 787 DCHECK(damage_rect_.IsEmpty());
746 } 788 }
747 789
748 TEST_F(SingleOverlayOnTopTest, NoCandidates) { 790 TEST_F(SingleOverlayOnTopTest, NoCandidates) {
749 scoped_ptr<RenderPass> pass = CreateRenderPass(); 791 scoped_ptr<RenderPass> pass = CreateRenderPass();
750 CreateFullscreenOpaqueQuad(resource_provider_.get(), 792 CreateFullscreenOpaqueQuad(resource_provider_.get(),
751 pass->shared_quad_state_list.back(), pass.get()); 793 pass->shared_quad_state_list.back(), pass.get());
752 CreateFullscreenOpaqueQuad(resource_provider_.get(), 794 CreateFullscreenOpaqueQuad(resource_provider_.get(),
753 pass->shared_quad_state_list.back(), pass.get()); 795 pass->shared_quad_state_list.back(), pass.get());
754 796
755 RenderPassList pass_list; 797 RenderPassList pass_list;
756 pass_list.push_back(pass.Pass()); 798 pass_list.push_back(pass.Pass());
757 799
758 RenderPassList original_pass_list; 800 RenderPassList original_pass_list;
759 RenderPass::CopyAll(pass_list, &original_pass_list); 801 RenderPass::CopyAll(pass_list, &original_pass_list);
760 802
761 OverlayCandidateList candidate_list; 803 OverlayCandidateList candidate_list;
762 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 804 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
763 &candidate_list, &damage_rect_); 805 &candidate_list, nullptr,
806 &damage_rect_);
764 EXPECT_EQ(0U, candidate_list.size()); 807 EXPECT_EQ(0U, candidate_list.size());
765 // There should be nothing new here. 808 // There should be nothing new here.
766 CompareRenderPassLists(pass_list, original_pass_list); 809 CompareRenderPassLists(pass_list, original_pass_list);
767 } 810 }
768 811
769 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { 812 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
770 scoped_ptr<RenderPass> pass = CreateRenderPass(); 813 scoped_ptr<RenderPass> pass = CreateRenderPass();
771 CreateFullscreenOpaqueQuad(resource_provider_.get(), 814 CreateFullscreenOpaqueQuad(resource_provider_.get(),
772 pass->shared_quad_state_list.back(), pass.get()); 815 pass->shared_quad_state_list.back(), pass.get());
773 CreateFullscreenOpaqueQuad(resource_provider_.get(), 816 CreateFullscreenOpaqueQuad(resource_provider_.get(),
774 pass->shared_quad_state_list.back(), pass.get()); 817 pass->shared_quad_state_list.back(), pass.get());
775 818
776 CreateFullscreenCandidateQuad(resource_provider_.get(), 819 CreateFullscreenCandidateQuad(resource_provider_.get(),
777 pass->shared_quad_state_list.back(), 820 pass->shared_quad_state_list.back(),
778 pass.get()); 821 pass.get());
779 822
780 RenderPassList pass_list; 823 RenderPassList pass_list;
781 pass_list.push_back(pass.Pass()); 824 pass_list.push_back(pass.Pass());
782 825
783 RenderPassList original_pass_list; 826 RenderPassList original_pass_list;
784 RenderPass::CopyAll(pass_list, &original_pass_list); 827 RenderPass::CopyAll(pass_list, &original_pass_list);
785 828
786 OverlayCandidateList candidate_list; 829 OverlayCandidateList candidate_list;
787 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 830 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
788 &candidate_list, &damage_rect_); 831 &candidate_list, nullptr,
832 &damage_rect_);
789 EXPECT_EQ(0U, candidate_list.size()); 833 EXPECT_EQ(0U, candidate_list.size());
790 // There should be nothing new here. 834 // There should be nothing new here.
791 CompareRenderPassLists(pass_list, original_pass_list); 835 CompareRenderPassLists(pass_list, original_pass_list);
792 } 836 }
793 837
794 // Test with multiple render passes. 838 // Test with multiple render passes.
795 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { 839 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
796 RenderPassList pass_list; 840 RenderPassList pass_list;
797 pass_list.push_back(CreateRenderPass()); 841 pass_list.push_back(CreateRenderPass());
798 842
799 scoped_ptr<RenderPass> pass = CreateRenderPass(); 843 scoped_ptr<RenderPass> pass = CreateRenderPass();
800 CreateFullscreenCandidateQuad(resource_provider_.get(), 844 CreateFullscreenCandidateQuad(resource_provider_.get(),
801 pass->shared_quad_state_list.back(), 845 pass->shared_quad_state_list.back(),
802 pass.get()); 846 pass.get());
803 847
804 // Add something behind it. 848 // Add something behind it.
805 CreateFullscreenOpaqueQuad(resource_provider_.get(), 849 CreateFullscreenOpaqueQuad(resource_provider_.get(),
806 pass->shared_quad_state_list.back(), pass.get()); 850 pass->shared_quad_state_list.back(), pass.get());
807 CreateFullscreenOpaqueQuad(resource_provider_.get(), 851 CreateFullscreenOpaqueQuad(resource_provider_.get(),
808 pass->shared_quad_state_list.back(), pass.get()); 852 pass->shared_quad_state_list.back(), pass.get());
809 853
810 pass_list.push_back(pass.Pass()); 854 pass_list.push_back(pass.Pass());
811 855
812 RenderPassList original_pass_list; 856 RenderPassList original_pass_list;
813 RenderPass::CopyAll(pass_list, &original_pass_list); 857 RenderPass::CopyAll(pass_list, &original_pass_list);
814 858
815 // Check for potential candidates. 859 // Check for potential candidates.
816 OverlayCandidateList candidate_list; 860 OverlayCandidateList candidate_list;
817 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 861 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
818 &candidate_list, &damage_rect_); 862 &candidate_list, nullptr,
863 &damage_rect_);
819 EXPECT_EQ(1U, candidate_list.size()); 864 EXPECT_EQ(1U, candidate_list.size());
820 865
821 // This should be the same. 866 // This should be the same.
822 ASSERT_EQ(2U, pass_list.size()); 867 ASSERT_EQ(2U, pass_list.size());
823 } 868 }
824 869
825 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { 870 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) {
826 scoped_ptr<RenderPass> pass = CreateRenderPass(); 871 scoped_ptr<RenderPass> pass = CreateRenderPass();
827 TextureDrawQuad* quad = 872 TextureDrawQuad* quad =
828 CreateFullscreenCandidateQuad(resource_provider_.get(), 873 CreateFullscreenCandidateQuad(resource_provider_.get(),
829 pass->shared_quad_state_list.back(), 874 pass->shared_quad_state_list.back(),
830 pass.get()); 875 pass.get());
831 quad->premultiplied_alpha = true; 876 quad->premultiplied_alpha = true;
832 877
833 RenderPassList pass_list; 878 RenderPassList pass_list;
834 pass_list.push_back(pass.Pass()); 879 pass_list.push_back(pass.Pass());
835 OverlayCandidateList candidate_list; 880 OverlayCandidateList candidate_list;
836 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 881 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
837 &candidate_list, &damage_rect_); 882 &candidate_list, nullptr,
883 &damage_rect_);
838 EXPECT_EQ(1U, pass_list.size()); 884 EXPECT_EQ(1U, pass_list.size());
839 EXPECT_EQ(0U, candidate_list.size()); 885 EXPECT_EQ(0U, candidate_list.size());
840 } 886 }
841 887
842 TEST_F(SingleOverlayOnTopTest, RejectBlending) { 888 TEST_F(SingleOverlayOnTopTest, RejectBlending) {
843 scoped_ptr<RenderPass> pass = CreateRenderPass(); 889 scoped_ptr<RenderPass> pass = CreateRenderPass();
844 TextureDrawQuad* quad = 890 TextureDrawQuad* quad =
845 CreateFullscreenCandidateQuad(resource_provider_.get(), 891 CreateFullscreenCandidateQuad(resource_provider_.get(),
846 pass->shared_quad_state_list.back(), 892 pass->shared_quad_state_list.back(),
847 pass.get()); 893 pass.get());
848 quad->needs_blending = true; 894 quad->needs_blending = true;
849 895
850 RenderPassList pass_list; 896 RenderPassList pass_list;
851 pass_list.push_back(pass.Pass()); 897 pass_list.push_back(pass.Pass());
852 OverlayCandidateList candidate_list; 898 OverlayCandidateList candidate_list;
853 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 899 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
854 &candidate_list, &damage_rect_); 900 &candidate_list, nullptr,
901 &damage_rect_);
855 ASSERT_EQ(1U, pass_list.size()); 902 ASSERT_EQ(1U, pass_list.size());
856 EXPECT_EQ(0U, candidate_list.size()); 903 EXPECT_EQ(0U, candidate_list.size());
857 } 904 }
858 905
859 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { 906 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
860 scoped_ptr<RenderPass> pass = CreateRenderPass(); 907 scoped_ptr<RenderPass> pass = CreateRenderPass();
861 TextureDrawQuad* quad = 908 TextureDrawQuad* quad =
862 CreateFullscreenCandidateQuad(resource_provider_.get(), 909 CreateFullscreenCandidateQuad(resource_provider_.get(),
863 pass->shared_quad_state_list.back(), 910 pass->shared_quad_state_list.back(),
864 pass.get()); 911 pass.get());
865 quad->background_color = SK_ColorBLACK; 912 quad->background_color = SK_ColorBLACK;
866 913
867 RenderPassList pass_list; 914 RenderPassList pass_list;
868 pass_list.push_back(pass.Pass()); 915 pass_list.push_back(pass.Pass());
869 OverlayCandidateList candidate_list; 916 OverlayCandidateList candidate_list;
870 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 917 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
871 &candidate_list, &damage_rect_); 918 &candidate_list, nullptr,
919 &damage_rect_);
872 ASSERT_EQ(1U, pass_list.size()); 920 ASSERT_EQ(1U, pass_list.size());
873 EXPECT_EQ(0U, candidate_list.size()); 921 EXPECT_EQ(0U, candidate_list.size());
874 } 922 }
875 923
876 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { 924 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
877 scoped_ptr<RenderPass> pass = CreateRenderPass(); 925 scoped_ptr<RenderPass> pass = CreateRenderPass();
878 CreateFullscreenCandidateQuad(resource_provider_.get(), 926 CreateFullscreenCandidateQuad(resource_provider_.get(),
879 pass->shared_quad_state_list.back(), 927 pass->shared_quad_state_list.back(),
880 pass.get()); 928 pass.get());
881 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; 929 pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode;
882 930
883 RenderPassList pass_list; 931 RenderPassList pass_list;
884 pass_list.push_back(pass.Pass()); 932 pass_list.push_back(pass.Pass());
885 OverlayCandidateList candidate_list; 933 OverlayCandidateList candidate_list;
886 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 934 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
887 &candidate_list, &damage_rect_); 935 &candidate_list, nullptr,
936 &damage_rect_);
888 ASSERT_EQ(1U, pass_list.size()); 937 ASSERT_EQ(1U, pass_list.size());
889 EXPECT_EQ(0U, candidate_list.size()); 938 EXPECT_EQ(0U, candidate_list.size());
890 } 939 }
891 940
892 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { 941 TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
893 scoped_ptr<RenderPass> pass = CreateRenderPass(); 942 scoped_ptr<RenderPass> pass = CreateRenderPass();
894 CreateFullscreenCandidateQuad(resource_provider_.get(), 943 CreateFullscreenCandidateQuad(resource_provider_.get(),
895 pass->shared_quad_state_list.back(), 944 pass->shared_quad_state_list.back(),
896 pass.get()); 945 pass.get());
897 pass->shared_quad_state_list.back()->opacity = 0.5f; 946 pass->shared_quad_state_list.back()->opacity = 0.5f;
898 947
899 RenderPassList pass_list; 948 RenderPassList pass_list;
900 pass_list.push_back(pass.Pass()); 949 pass_list.push_back(pass.Pass());
901 OverlayCandidateList candidate_list; 950 OverlayCandidateList candidate_list;
902 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 951 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
903 &candidate_list, &damage_rect_); 952 &candidate_list, nullptr,
953 &damage_rect_);
904 ASSERT_EQ(1U, pass_list.size()); 954 ASSERT_EQ(1U, pass_list.size());
905 EXPECT_EQ(0U, candidate_list.size()); 955 EXPECT_EQ(0U, candidate_list.size());
906 } 956 }
907 957
908 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { 958 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
909 scoped_ptr<RenderPass> pass = CreateRenderPass(); 959 scoped_ptr<RenderPass> pass = CreateRenderPass();
910 CreateFullscreenCandidateQuad(resource_provider_.get(), 960 CreateFullscreenCandidateQuad(resource_provider_.get(),
911 pass->shared_quad_state_list.back(), 961 pass->shared_quad_state_list.back(),
912 pass.get()); 962 pass.get());
913 pass->shared_quad_state_list.back() 963 pass->shared_quad_state_list.back()
914 ->quad_to_target_transform.RotateAboutXAxis(45.f); 964 ->quad_to_target_transform.RotateAboutXAxis(45.f);
915 965
916 RenderPassList pass_list; 966 RenderPassList pass_list;
917 pass_list.push_back(pass.Pass()); 967 pass_list.push_back(pass.Pass());
918 OverlayCandidateList candidate_list; 968 OverlayCandidateList candidate_list;
919 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 969 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
920 &candidate_list, &damage_rect_); 970 &candidate_list, nullptr,
971 &damage_rect_);
921 ASSERT_EQ(1U, pass_list.size()); 972 ASSERT_EQ(1U, pass_list.size());
922 EXPECT_EQ(0U, candidate_list.size()); 973 EXPECT_EQ(0U, candidate_list.size());
923 } 974 }
924 975
925 TEST_F(SingleOverlayOnTopTest, AllowClipped) { 976 TEST_F(SingleOverlayOnTopTest, AllowClipped) {
926 scoped_ptr<RenderPass> pass = CreateRenderPass(); 977 scoped_ptr<RenderPass> pass = CreateRenderPass();
927 CreateFullscreenCandidateQuad(resource_provider_.get(), 978 CreateFullscreenCandidateQuad(resource_provider_.get(),
928 pass->shared_quad_state_list.back(), 979 pass->shared_quad_state_list.back(),
929 pass.get()); 980 pass.get());
930 pass->shared_quad_state_list.back()->is_clipped = true; 981 pass->shared_quad_state_list.back()->is_clipped = true;
931 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; 982 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect;
932 983
933 RenderPassList pass_list; 984 RenderPassList pass_list;
934 pass_list.push_back(pass.Pass()); 985 pass_list.push_back(pass.Pass());
935 OverlayCandidateList candidate_list; 986 OverlayCandidateList candidate_list;
936 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 987 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
937 &candidate_list, &damage_rect_); 988 &candidate_list, nullptr,
989 &damage_rect_);
938 ASSERT_EQ(1U, pass_list.size()); 990 ASSERT_EQ(1U, pass_list.size());
939 EXPECT_EQ(1U, candidate_list.size()); 991 EXPECT_EQ(1U, candidate_list.size());
940 } 992 }
941 993
942 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { 994 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) {
943 gfx::Rect rect = kOverlayRect; 995 gfx::Rect rect = kOverlayRect;
944 rect.set_width(rect.width() / 2); 996 rect.set_width(rect.width() / 2);
945 rect.Offset(0, -rect.height()); 997 rect.Offset(0, -rect.height());
946 scoped_ptr<RenderPass> pass = CreateRenderPass(); 998 scoped_ptr<RenderPass> pass = CreateRenderPass();
947 CreateCandidateQuadAt(resource_provider_.get(), 999 CreateCandidateQuadAt(resource_provider_.get(),
948 pass->shared_quad_state_list.back(), pass.get(), rect); 1000 pass->shared_quad_state_list.back(), pass.get(), rect);
949 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, 1001 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f,
950 -1.0f); 1002 -1.0f);
951 1003
952 RenderPassList pass_list; 1004 RenderPassList pass_list;
953 pass_list.push_back(pass.Pass()); 1005 pass_list.push_back(pass.Pass());
954 OverlayCandidateList candidate_list; 1006 OverlayCandidateList candidate_list;
955 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1007 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
956 &candidate_list, &damage_rect_); 1008 &candidate_list, nullptr,
1009 &damage_rect_);
957 ASSERT_EQ(1U, pass_list.size()); 1010 ASSERT_EQ(1U, pass_list.size());
958 ASSERT_EQ(1U, candidate_list.size()); 1011 ASSERT_EQ(1U, candidate_list.size());
959 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, 1012 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL,
960 candidate_list.back().transform); 1013 candidate_list.back().transform);
961 } 1014 }
962 1015
963 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { 1016 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) {
964 gfx::Rect rect = kOverlayRect; 1017 gfx::Rect rect = kOverlayRect;
965 rect.set_height(rect.height() / 2); 1018 rect.set_height(rect.height() / 2);
966 rect.Offset(-rect.width(), 0); 1019 rect.Offset(-rect.width(), 0);
967 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1020 scoped_ptr<RenderPass> pass = CreateRenderPass();
968 CreateCandidateQuadAt(resource_provider_.get(), 1021 CreateCandidateQuadAt(resource_provider_.get(),
969 pass->shared_quad_state_list.back(), pass.get(), rect); 1022 pass->shared_quad_state_list.back(), pass.get(), rect);
970 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, 1023 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f,
971 2.0f); 1024 2.0f);
972 1025
973 RenderPassList pass_list; 1026 RenderPassList pass_list;
974 pass_list.push_back(pass.Pass()); 1027 pass_list.push_back(pass.Pass());
975 OverlayCandidateList candidate_list; 1028 OverlayCandidateList candidate_list;
976 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1029 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
977 &candidate_list, &damage_rect_); 1030 &candidate_list, nullptr,
1031 &damage_rect_);
978 ASSERT_EQ(1U, pass_list.size()); 1032 ASSERT_EQ(1U, pass_list.size());
979 ASSERT_EQ(1U, candidate_list.size()); 1033 ASSERT_EQ(1U, candidate_list.size());
980 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, 1034 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL,
981 candidate_list.back().transform); 1035 candidate_list.back().transform);
982 } 1036 }
983 1037
984 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { 1038 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
985 gfx::Rect rect = kOverlayRect; 1039 gfx::Rect rect = kOverlayRect;
986 rect.set_width(rect.width() / 2); 1040 rect.set_width(rect.width() / 2);
987 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1041 scoped_ptr<RenderPass> pass = CreateRenderPass();
988 CreateCandidateQuadAt(resource_provider_.get(), 1042 CreateCandidateQuadAt(resource_provider_.get(),
989 pass->shared_quad_state_list.back(), pass.get(), rect); 1043 pass->shared_quad_state_list.back(), pass.get(), rect);
990 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, 1044 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f,
991 1.0f); 1045 1.0f);
992 1046
993 RenderPassList pass_list; 1047 RenderPassList pass_list;
994 pass_list.push_back(pass.Pass()); 1048 pass_list.push_back(pass.Pass());
995 OverlayCandidateList candidate_list; 1049 OverlayCandidateList candidate_list;
996 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1050 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
997 &candidate_list, &damage_rect_); 1051 &candidate_list, nullptr,
1052 &damage_rect_);
998 ASSERT_EQ(1U, pass_list.size()); 1053 ASSERT_EQ(1U, pass_list.size());
999 EXPECT_EQ(1U, candidate_list.size()); 1054 EXPECT_EQ(1U, candidate_list.size());
1000 } 1055 }
1001 1056
1002 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { 1057 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) {
1003 gfx::Rect rect = kOverlayRect; 1058 gfx::Rect rect = kOverlayRect;
1004 rect.Offset(0, -rect.height()); 1059 rect.Offset(0, -rect.height());
1005 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1060 scoped_ptr<RenderPass> pass = CreateRenderPass();
1006 CreateCandidateQuadAt(resource_provider_.get(), 1061 CreateCandidateQuadAt(resource_provider_.get(),
1007 pass->shared_quad_state_list.back(), pass.get(), rect); 1062 pass->shared_quad_state_list.back(), pass.get(), rect);
1008 pass->shared_quad_state_list.back() 1063 pass->shared_quad_state_list.back()
1009 ->quad_to_target_transform.RotateAboutZAxis(90.f); 1064 ->quad_to_target_transform.RotateAboutZAxis(90.f);
1010 1065
1011 RenderPassList pass_list; 1066 RenderPassList pass_list;
1012 pass_list.push_back(pass.Pass()); 1067 pass_list.push_back(pass.Pass());
1013 OverlayCandidateList candidate_list; 1068 OverlayCandidateList candidate_list;
1014 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1069 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1015 &candidate_list, &damage_rect_); 1070 &candidate_list, nullptr,
1071 &damage_rect_);
1016 ASSERT_EQ(1U, pass_list.size()); 1072 ASSERT_EQ(1U, pass_list.size());
1017 ASSERT_EQ(1U, candidate_list.size()); 1073 ASSERT_EQ(1U, candidate_list.size());
1018 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); 1074 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform);
1019 } 1075 }
1020 1076
1021 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { 1077 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) {
1022 gfx::Rect rect = kOverlayRect; 1078 gfx::Rect rect = kOverlayRect;
1023 rect.Offset(-rect.width(), -rect.height()); 1079 rect.Offset(-rect.width(), -rect.height());
1024 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1080 scoped_ptr<RenderPass> pass = CreateRenderPass();
1025 CreateCandidateQuadAt(resource_provider_.get(), 1081 CreateCandidateQuadAt(resource_provider_.get(),
1026 pass->shared_quad_state_list.back(), pass.get(), rect); 1082 pass->shared_quad_state_list.back(), pass.get(), rect);
1027 pass->shared_quad_state_list.back() 1083 pass->shared_quad_state_list.back()
1028 ->quad_to_target_transform.RotateAboutZAxis(180.f); 1084 ->quad_to_target_transform.RotateAboutZAxis(180.f);
1029 1085
1030 RenderPassList pass_list; 1086 RenderPassList pass_list;
1031 pass_list.push_back(pass.Pass()); 1087 pass_list.push_back(pass.Pass());
1032 OverlayCandidateList candidate_list; 1088 OverlayCandidateList candidate_list;
1033 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1089 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1034 &candidate_list, &damage_rect_); 1090 &candidate_list, nullptr,
1091 &damage_rect_);
1035 ASSERT_EQ(1U, pass_list.size()); 1092 ASSERT_EQ(1U, pass_list.size());
1036 ASSERT_EQ(1U, candidate_list.size()); 1093 ASSERT_EQ(1U, candidate_list.size());
1037 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); 1094 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform);
1038 } 1095 }
1039 1096
1040 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { 1097 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) {
1041 gfx::Rect rect = kOverlayRect; 1098 gfx::Rect rect = kOverlayRect;
1042 rect.Offset(-rect.width(), 0); 1099 rect.Offset(-rect.width(), 0);
1043 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1100 scoped_ptr<RenderPass> pass = CreateRenderPass();
1044 CreateCandidateQuadAt(resource_provider_.get(), 1101 CreateCandidateQuadAt(resource_provider_.get(),
1045 pass->shared_quad_state_list.back(), pass.get(), rect); 1102 pass->shared_quad_state_list.back(), pass.get(), rect);
1046 pass->shared_quad_state_list.back() 1103 pass->shared_quad_state_list.back()
1047 ->quad_to_target_transform.RotateAboutZAxis(270.f); 1104 ->quad_to_target_transform.RotateAboutZAxis(270.f);
1048 1105
1049 RenderPassList pass_list; 1106 RenderPassList pass_list;
1050 pass_list.push_back(pass.Pass()); 1107 pass_list.push_back(pass.Pass());
1051 OverlayCandidateList candidate_list; 1108 OverlayCandidateList candidate_list;
1052 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1109 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1053 &candidate_list, &damage_rect_); 1110 &candidate_list, nullptr,
1111 &damage_rect_);
1054 ASSERT_EQ(1U, pass_list.size()); 1112 ASSERT_EQ(1U, pass_list.size());
1055 ASSERT_EQ(1U, candidate_list.size()); 1113 ASSERT_EQ(1U, candidate_list.size());
1056 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); 1114 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform);
1057 } 1115 }
1058 1116
1059 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { 1117 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
1060 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1118 scoped_ptr<RenderPass> pass = CreateRenderPass();
1061 CreateOpaqueQuadAt(resource_provider_.get(), 1119 CreateOpaqueQuadAt(resource_provider_.get(),
1062 pass->shared_quad_state_list.back(), pass.get(), 1120 pass->shared_quad_state_list.back(), pass.get(),
1063 kOverlayTopLeftRect); 1121 kOverlayTopLeftRect);
1064 CreateCandidateQuadAt(resource_provider_.get(), 1122 CreateCandidateQuadAt(resource_provider_.get(),
1065 pass->shared_quad_state_list.back(), 1123 pass->shared_quad_state_list.back(),
1066 pass.get(), 1124 pass.get(),
1067 kOverlayBottomRightRect); 1125 kOverlayBottomRightRect);
1068 1126
1069 RenderPassList pass_list; 1127 RenderPassList pass_list;
1070 pass_list.push_back(pass.Pass()); 1128 pass_list.push_back(pass.Pass());
1071 1129
1072 RenderPassList original_pass_list; 1130 RenderPassList original_pass_list;
1073 RenderPass::CopyAll(pass_list, &original_pass_list); 1131 RenderPass::CopyAll(pass_list, &original_pass_list);
1074 1132
1075 OverlayCandidateList candidate_list; 1133 OverlayCandidateList candidate_list;
1076 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1134 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1077 &candidate_list, &damage_rect_); 1135 &candidate_list, nullptr,
1136 &damage_rect_);
1078 EXPECT_EQ(1U, pass_list.size()); 1137 EXPECT_EQ(1U, pass_list.size());
1079 EXPECT_EQ(1U, candidate_list.size()); 1138 EXPECT_EQ(1U, candidate_list.size());
1080 } 1139 }
1081 1140
1082 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { 1141 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) {
1083 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1142 scoped_ptr<RenderPass> pass = CreateRenderPass();
1084 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1143 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1085 shared_state->opacity = 0.f; 1144 shared_state->opacity = 0.f;
1086 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), 1145 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
1087 kOverlayBottomRightRect); 1146 kOverlayBottomRightRect);
1088 shared_state = pass->CreateAndAppendSharedQuadState(); 1147 shared_state = pass->CreateAndAppendSharedQuadState();
1089 shared_state->opacity = 1.f; 1148 shared_state->opacity = 1.f;
1090 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1149 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1091 kOverlayBottomRightRect); 1150 kOverlayBottomRightRect);
1092 1151
1093 RenderPassList pass_list; 1152 RenderPassList pass_list;
1094 pass_list.push_back(pass.Pass()); 1153 pass_list.push_back(pass.Pass());
1095 1154
1096 RenderPassList original_pass_list; 1155 RenderPassList original_pass_list;
1097 RenderPass::CopyAll(pass_list, &original_pass_list); 1156 RenderPass::CopyAll(pass_list, &original_pass_list);
1098 1157
1099 OverlayCandidateList candidate_list; 1158 OverlayCandidateList candidate_list;
1100 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1159 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1101 &candidate_list, &damage_rect_); 1160 &candidate_list, nullptr,
1161 &damage_rect_);
1102 EXPECT_EQ(1U, pass_list.size()); 1162 EXPECT_EQ(1U, pass_list.size());
1103 EXPECT_EQ(1U, candidate_list.size()); 1163 EXPECT_EQ(1U, candidate_list.size());
1104 } 1164 }
1105 1165
1106 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { 1166 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) {
1107 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1167 scoped_ptr<RenderPass> pass = CreateRenderPass();
1108 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), 1168 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(),
1109 SK_ColorTRANSPARENT, pass.get(), 1169 SK_ColorTRANSPARENT, pass.get(),
1110 kOverlayBottomRightRect); 1170 kOverlayBottomRightRect);
1111 CreateCandidateQuadAt(resource_provider_.get(), 1171 CreateCandidateQuadAt(resource_provider_.get(),
1112 pass->shared_quad_state_list.back(), pass.get(), 1172 pass->shared_quad_state_list.back(), pass.get(),
1113 kOverlayBottomRightRect); 1173 kOverlayBottomRightRect);
1114 1174
1115 RenderPassList pass_list; 1175 RenderPassList pass_list;
1116 pass_list.push_back(pass.Pass()); 1176 pass_list.push_back(pass.Pass());
1117 1177
1118 RenderPassList original_pass_list; 1178 RenderPassList original_pass_list;
1119 RenderPass::CopyAll(pass_list, &original_pass_list); 1179 RenderPass::CopyAll(pass_list, &original_pass_list);
1120 1180
1121 OverlayCandidateList candidate_list; 1181 OverlayCandidateList candidate_list;
1122 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1182 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1123 &candidate_list, &damage_rect_); 1183 &candidate_list, nullptr,
1184 &damage_rect_);
1124 EXPECT_EQ(1U, pass_list.size()); 1185 EXPECT_EQ(1U, pass_list.size());
1125 EXPECT_EQ(1U, candidate_list.size()); 1186 EXPECT_EQ(1U, candidate_list.size());
1126 } 1187 }
1127 1188
1128 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { 1189 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) {
1129 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1190 scoped_ptr<RenderPass> pass = CreateRenderPass();
1130 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1191 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1131 shared_state->opacity = 0.5f; 1192 shared_state->opacity = 0.5f;
1132 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), 1193 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
1133 kOverlayBottomRightRect); 1194 kOverlayBottomRightRect);
1134 shared_state = pass->CreateAndAppendSharedQuadState(); 1195 shared_state = pass->CreateAndAppendSharedQuadState();
1135 shared_state->opacity = 1.f; 1196 shared_state->opacity = 1.f;
1136 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1197 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1137 kOverlayBottomRightRect); 1198 kOverlayBottomRightRect);
1138 1199
1139 RenderPassList pass_list; 1200 RenderPassList pass_list;
1140 pass_list.push_back(pass.Pass()); 1201 pass_list.push_back(pass.Pass());
1141 1202
1142 RenderPassList original_pass_list; 1203 RenderPassList original_pass_list;
1143 RenderPass::CopyAll(pass_list, &original_pass_list); 1204 RenderPass::CopyAll(pass_list, &original_pass_list);
1144 1205
1145 OverlayCandidateList candidate_list; 1206 OverlayCandidateList candidate_list;
1146 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1207 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1147 &candidate_list, &damage_rect_); 1208 &candidate_list, nullptr,
1209 &damage_rect_);
1148 EXPECT_EQ(1U, pass_list.size()); 1210 EXPECT_EQ(1U, pass_list.size());
1149 EXPECT_EQ(0U, candidate_list.size()); 1211 EXPECT_EQ(0U, candidate_list.size());
1150 } 1212 }
1151 1213
1152 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { 1214 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) {
1153 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1215 scoped_ptr<RenderPass> pass = CreateRenderPass();
1154 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1216 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1155 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), 1217 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(),
1156 kOverlayBottomRightRect)->opaque_rect = 1218 kOverlayBottomRightRect)->opaque_rect =
1157 kOverlayBottomRightRect; 1219 kOverlayBottomRightRect;
1158 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1220 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1159 kOverlayBottomRightRect); 1221 kOverlayBottomRightRect);
1160 1222
1161 RenderPassList pass_list; 1223 RenderPassList pass_list;
1162 pass_list.push_back(pass.Pass()); 1224 pass_list.push_back(pass.Pass());
1163 1225
1164 RenderPassList original_pass_list; 1226 RenderPassList original_pass_list;
1165 RenderPass::CopyAll(pass_list, &original_pass_list); 1227 RenderPass::CopyAll(pass_list, &original_pass_list);
1166 1228
1167 OverlayCandidateList candidate_list; 1229 OverlayCandidateList candidate_list;
1168 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1230 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1169 &candidate_list, &damage_rect_); 1231 &candidate_list, nullptr,
1232 &damage_rect_);
1170 EXPECT_EQ(1U, pass_list.size()); 1233 EXPECT_EQ(1U, pass_list.size());
1171 EXPECT_EQ(0U, candidate_list.size()); 1234 EXPECT_EQ(0U, candidate_list.size());
1172 } 1235 }
1173 1236
1174 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { 1237 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) {
1175 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1238 scoped_ptr<RenderPass> pass = CreateRenderPass();
1176 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1239 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1177 pass->shared_quad_state_list.back(), 1240 pass->shared_quad_state_list.back(),
1178 pass.get(), kSwapTransform); 1241 pass.get(), kSwapTransform);
1179 1242
1180 RenderPassList pass_list; 1243 RenderPassList pass_list;
1181 pass_list.push_back(pass.Pass()); 1244 pass_list.push_back(pass.Pass());
1182 OverlayCandidateList candidate_list; 1245 OverlayCandidateList candidate_list;
1183 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1246 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1184 &candidate_list, &damage_rect_); 1247 &candidate_list, nullptr,
1248 &damage_rect_);
1185 ASSERT_EQ(1U, pass_list.size()); 1249 ASSERT_EQ(1U, pass_list.size());
1186 EXPECT_EQ(0U, candidate_list.size()); 1250 EXPECT_EQ(0U, candidate_list.size());
1187 } 1251 }
1188 1252
1189 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { 1253 TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) {
1190 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1254 scoped_ptr<RenderPass> pass = CreateRenderPass();
1191 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1255 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1192 pass->shared_quad_state_list.back(), 1256 pass->shared_quad_state_list.back(),
1193 pass.get(), kXMirrorTransform); 1257 pass.get(), kXMirrorTransform);
1194 1258
1195 RenderPassList pass_list; 1259 RenderPassList pass_list;
1196 pass_list.push_back(pass.Pass()); 1260 pass_list.push_back(pass.Pass());
1197 OverlayCandidateList candidate_list; 1261 OverlayCandidateList candidate_list;
1198 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1262 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1199 &candidate_list, &damage_rect_); 1263 &candidate_list, nullptr,
1264 &damage_rect_);
1200 ASSERT_EQ(1U, pass_list.size()); 1265 ASSERT_EQ(1U, pass_list.size());
1201 EXPECT_EQ(1U, candidate_list.size()); 1266 EXPECT_EQ(1U, candidate_list.size());
1202 } 1267 }
1203 1268
1204 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { 1269 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) {
1205 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1270 scoped_ptr<RenderPass> pass = CreateRenderPass();
1206 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1271 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1207 pass->shared_quad_state_list.back(), 1272 pass->shared_quad_state_list.back(),
1208 pass.get(), kBothMirrorTransform); 1273 pass.get(), kBothMirrorTransform);
1209 1274
1210 RenderPassList pass_list; 1275 RenderPassList pass_list;
1211 pass_list.push_back(pass.Pass()); 1276 pass_list.push_back(pass.Pass());
1212 OverlayCandidateList candidate_list; 1277 OverlayCandidateList candidate_list;
1213 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1278 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1214 &candidate_list, &damage_rect_); 1279 &candidate_list, nullptr,
1280 &damage_rect_);
1215 ASSERT_EQ(1U, pass_list.size()); 1281 ASSERT_EQ(1U, pass_list.size());
1216 EXPECT_EQ(1U, candidate_list.size()); 1282 EXPECT_EQ(1U, candidate_list.size());
1217 } 1283 }
1218 1284
1219 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { 1285 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) {
1220 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1286 scoped_ptr<RenderPass> pass = CreateRenderPass();
1221 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1287 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1222 pass->shared_quad_state_list.back(), 1288 pass->shared_quad_state_list.back(),
1223 pass.get(), kNormalTransform); 1289 pass.get(), kNormalTransform);
1224 1290
1225 RenderPassList pass_list; 1291 RenderPassList pass_list;
1226 pass_list.push_back(pass.Pass()); 1292 pass_list.push_back(pass.Pass());
1227 OverlayCandidateList candidate_list; 1293 OverlayCandidateList candidate_list;
1228 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1294 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1229 &candidate_list, &damage_rect_); 1295 &candidate_list, nullptr,
1296 &damage_rect_);
1230 ASSERT_EQ(1U, pass_list.size()); 1297 ASSERT_EQ(1U, pass_list.size());
1231 EXPECT_EQ(1U, candidate_list.size()); 1298 EXPECT_EQ(1U, candidate_list.size());
1232 } 1299 }
1233 1300
1234 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { 1301 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) {
1235 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1302 scoped_ptr<RenderPass> pass = CreateRenderPass();
1236 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1303 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1237 pass->shared_quad_state_list.back(), 1304 pass->shared_quad_state_list.back(),
1238 pass.get(), kYMirrorTransform); 1305 pass.get(), kYMirrorTransform);
1239 1306
1240 RenderPassList pass_list; 1307 RenderPassList pass_list;
1241 pass_list.push_back(pass.Pass()); 1308 pass_list.push_back(pass.Pass());
1242 OverlayCandidateList candidate_list; 1309 OverlayCandidateList candidate_list;
1243 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1310 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1244 &candidate_list, &damage_rect_); 1311 &candidate_list, nullptr,
1312 &damage_rect_);
1245 ASSERT_EQ(1U, pass_list.size()); 1313 ASSERT_EQ(1U, pass_list.size());
1246 EXPECT_EQ(1U, candidate_list.size()); 1314 EXPECT_EQ(1U, candidate_list.size());
1247 } 1315 }
1248 1316
1249 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { 1317 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) {
1250 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1318 scoped_ptr<RenderPass> pass = CreateRenderPass();
1251 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1319 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1252 pass->shared_quad_state_list.back(), pass.get()); 1320 pass->shared_quad_state_list.back(), pass.get());
1253 CreateCandidateQuadAt(resource_provider_.get(), 1321 CreateCandidateQuadAt(resource_provider_.get(),
1254 pass->shared_quad_state_list.back(), pass.get(), 1322 pass->shared_quad_state_list.back(), pass.get(),
1255 kOverlayBottomRightRect); 1323 kOverlayBottomRightRect);
1256 1324
1257 RenderPassList pass_list; 1325 RenderPassList pass_list;
1258 pass_list.push_back(pass.Pass()); 1326 pass_list.push_back(pass.Pass());
1259 1327
1260 OverlayCandidateList candidate_list; 1328 OverlayCandidateList candidate_list;
1261 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1329 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1262 &candidate_list, &damage_rect_); 1330 &candidate_list, nullptr,
1331 &damage_rect_);
1263 EXPECT_EQ(1U, pass_list.size()); 1332 EXPECT_EQ(1U, pass_list.size());
1264 ASSERT_EQ(1U, candidate_list.size()); 1333 ASSERT_EQ(1U, candidate_list.size());
1265 EXPECT_EQ(-1, candidate_list[0].plane_z_order); 1334 EXPECT_EQ(-1, candidate_list[0].plane_z_order);
1266 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); 1335 EXPECT_EQ(2U, pass_list[0]->quad_list.size());
1267 // The overlay quad should have changed to a SOLID_COLOR quad. 1336 // The overlay quad should have changed to a SOLID_COLOR quad.
1268 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); 1337 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR);
1269 } 1338 }
1270 1339
1271 TEST_F(UnderlayTest, AllowOnTop) { 1340 TEST_F(UnderlayTest, AllowOnTop) {
1272 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1341 scoped_ptr<RenderPass> pass = CreateRenderPass();
1273 CreateFullscreenCandidateQuad(resource_provider_.get(), 1342 CreateFullscreenCandidateQuad(resource_provider_.get(),
1274 pass->shared_quad_state_list.back(), 1343 pass->shared_quad_state_list.back(),
1275 pass.get()); 1344 pass.get());
1276 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; 1345 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f;
1277 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1346 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1278 pass->shared_quad_state_list.back(), pass.get()); 1347 pass->shared_quad_state_list.back(), pass.get());
1279 1348
1280 RenderPassList pass_list; 1349 RenderPassList pass_list;
1281 pass_list.push_back(pass.Pass()); 1350 pass_list.push_back(pass.Pass());
1282 1351
1283 OverlayCandidateList candidate_list; 1352 OverlayCandidateList candidate_list;
1284 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1353 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1285 &candidate_list, &damage_rect_); 1354 &candidate_list, nullptr,
1355 &damage_rect_);
1286 EXPECT_EQ(1U, pass_list.size()); 1356 EXPECT_EQ(1U, pass_list.size());
1287 ASSERT_EQ(1U, candidate_list.size()); 1357 ASSERT_EQ(1U, candidate_list.size());
1288 EXPECT_EQ(-1, candidate_list[0].plane_z_order); 1358 EXPECT_EQ(-1, candidate_list[0].plane_z_order);
1289 // The overlay quad should have changed to a SOLID_COLOR quad. 1359 // The overlay quad should have changed to a SOLID_COLOR quad.
1290 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); 1360 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR);
1291 } 1361 }
1292 1362
1293 TEST_F(UnderlayTest, DamageRect) { 1363 TEST_F(UnderlayTest, DamageRect) {
1294 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1364 scoped_ptr<RenderPass> pass = CreateRenderPass();
1295 CreateFullscreenCandidateQuad(resource_provider_.get(), 1365 CreateFullscreenCandidateQuad(resource_provider_.get(),
(...skipping 16 matching lines...) Expand all
1312 1382
1313 // Primary plane. 1383 // Primary plane.
1314 OverlayCandidate output_surface_plane; 1384 OverlayCandidate output_surface_plane;
1315 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); 1385 output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
1316 output_surface_plane.quad_rect_in_target_space = kOverlayRect; 1386 output_surface_plane.quad_rect_in_target_space = kOverlayRect;
1317 output_surface_plane.use_output_surface_for_resource = true; 1387 output_surface_plane.use_output_surface_for_resource = true;
1318 output_surface_plane.overlay_handled = true; 1388 output_surface_plane.overlay_handled = true;
1319 candidate_list.push_back(output_surface_plane); 1389 candidate_list.push_back(output_surface_plane);
1320 1390
1321 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list, 1391 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1322 &candidate_list, &damage_rect_); 1392 &candidate_list, nullptr,
1393 &damage_rect_);
1323 DCHECK(!damage_rect_.IsEmpty()); 1394 DCHECK(!damage_rect_.IsEmpty());
1324 } 1395 }
1325 1396
1326 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { 1397 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
1327 OverlayCandidateList list; 1398 OverlayCandidateList list;
1328 OverlayCandidate output_surface_plane; 1399 OverlayCandidate output_surface_plane;
1329 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); 1400 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect);
1330 output_surface_plane.quad_rect_in_target_space = 1401 output_surface_plane.quad_rect_in_target_space =
1331 root_render_pass->output_rect; 1402 root_render_pass->output_rect;
1332 output_surface_plane.use_output_surface_for_resource = true; 1403 output_surface_plane.use_output_surface_for_resource = true;
1333 output_surface_plane.overlay_handled = true; 1404 output_surface_plane.overlay_handled = true;
1334 list.push_back(output_surface_plane); 1405 list.push_back(output_surface_plane);
1335 return list; 1406 return list;
1336 } 1407 }
1337 1408
1338 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { 1409 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) {
1339 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1410 scoped_ptr<RenderPass> pass = CreateRenderPass();
1340 CreateFullscreenCandidateQuad(resource_provider_.get(), 1411 CreateFullscreenCandidateQuad(resource_provider_.get(),
1341 pass->shared_quad_state_list.back(), 1412 pass->shared_quad_state_list.back(),
1342 pass.get()); 1413 pass.get());
1343 pass->shared_quad_state_list.back() 1414 pass->shared_quad_state_list.back()
1344 ->quad_to_target_transform.RotateAboutZAxis(45.f); 1415 ->quad_to_target_transform.RotateAboutZAxis(45.f);
1345 1416
1417 gfx::Rect damage_rect;
1346 RenderPassList pass_list; 1418 RenderPassList pass_list;
1347 pass_list.push_back(pass.Pass()); 1419 pass_list.push_back(pass.Pass());
1348 CALayerOverlayList ca_layer_list; 1420 CALayerOverlayList ca_layer_list;
1349 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1421 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1350 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1422 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1351 &ca_layer_list, &overlay_list); 1423 &overlay_list, &ca_layer_list,
1424 &damage_rect);
1352 ASSERT_EQ(1U, pass_list.size()); 1425 ASSERT_EQ(1U, pass_list.size());
1353 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); 1426 EXPECT_EQ(0U, pass_list.back()->quad_list.size());
1354 EXPECT_EQ(0U, overlay_list.size()); 1427 EXPECT_EQ(0U, overlay_list.size());
1355 EXPECT_EQ(1U, ca_layer_list.size()); 1428 EXPECT_EQ(1U, ca_layer_list.size());
1356 } 1429 }
1357 1430
1358 TEST_F(CALayerOverlayTest, Disallow3DTransform) { 1431 TEST_F(CALayerOverlayTest, Disallow3DTransform) {
1359 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1432 scoped_ptr<RenderPass> pass = CreateRenderPass();
1360 CreateFullscreenCandidateQuad(resource_provider_.get(), 1433 CreateFullscreenCandidateQuad(resource_provider_.get(),
1361 pass->shared_quad_state_list.back(), 1434 pass->shared_quad_state_list.back(),
1362 pass.get()); 1435 pass.get());
1363 pass->shared_quad_state_list.back() 1436 pass->shared_quad_state_list.back()
1364 ->quad_to_target_transform.RotateAboutXAxis(45.f); 1437 ->quad_to_target_transform.RotateAboutXAxis(45.f);
1365 1438
1439 gfx::Rect damage_rect;
1366 RenderPassList pass_list; 1440 RenderPassList pass_list;
1367 pass_list.push_back(pass.Pass()); 1441 pass_list.push_back(pass.Pass());
1368 CALayerOverlayList ca_layer_list; 1442 CALayerOverlayList ca_layer_list;
1369 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1443 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1370 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1444 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1371 &ca_layer_list, &overlay_list); 1445 &overlay_list, &ca_layer_list,
1446 &damage_rect);
1372 ASSERT_EQ(1U, pass_list.size()); 1447 ASSERT_EQ(1U, pass_list.size());
1373 EXPECT_EQ(1U, pass_list.back()->quad_list.size()); 1448 EXPECT_EQ(1U, pass_list.back()->quad_list.size());
1374 EXPECT_EQ(1U, overlay_list.size()); 1449 EXPECT_EQ(1U, overlay_list.size());
1375 EXPECT_EQ(0U, ca_layer_list.size()); 1450 EXPECT_EQ(0U, ca_layer_list.size());
1376 } 1451 }
1377 1452
1378 TEST_F(CALayerOverlayTest, AllowContainingClip) { 1453 TEST_F(CALayerOverlayTest, AllowContainingClip) {
1379 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1454 scoped_ptr<RenderPass> pass = CreateRenderPass();
1380 CreateFullscreenCandidateQuad(resource_provider_.get(), 1455 CreateFullscreenCandidateQuad(resource_provider_.get(),
1381 pass->shared_quad_state_list.back(), 1456 pass->shared_quad_state_list.back(),
1382 pass.get()); 1457 pass.get());
1383 pass->shared_quad_state_list.back()->is_clipped = true; 1458 pass->shared_quad_state_list.back()->is_clipped = true;
1384 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; 1459 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect;
1385 1460
1461 gfx::Rect damage_rect;
1386 RenderPassList pass_list; 1462 RenderPassList pass_list;
1387 pass_list.push_back(pass.Pass()); 1463 pass_list.push_back(pass.Pass());
1388 CALayerOverlayList ca_layer_list; 1464 CALayerOverlayList ca_layer_list;
1389 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1465 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1390 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1466 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1391 &ca_layer_list, &overlay_list); 1467 &overlay_list, &ca_layer_list,
1468 &damage_rect);
1392 ASSERT_EQ(1U, pass_list.size()); 1469 ASSERT_EQ(1U, pass_list.size());
1393 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); 1470 EXPECT_EQ(0U, pass_list.back()->quad_list.size());
1394 EXPECT_EQ(0U, overlay_list.size()); 1471 EXPECT_EQ(0U, overlay_list.size());
1395 EXPECT_EQ(1U, ca_layer_list.size()); 1472 EXPECT_EQ(1U, ca_layer_list.size());
1396 } 1473 }
1397 1474
1398 TEST_F(CALayerOverlayTest, SkipDisjointClip) { 1475 TEST_F(CALayerOverlayTest, SkipDisjointClip) {
1399 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1476 scoped_ptr<RenderPass> pass = CreateRenderPass();
1400 CreateFullscreenCandidateQuad(resource_provider_.get(), 1477 CreateFullscreenCandidateQuad(resource_provider_.get(),
1401 pass->shared_quad_state_list.back(), 1478 pass->shared_quad_state_list.back(),
1402 pass.get()); 1479 pass.get());
1403 pass->shared_quad_state_list.back()->is_clipped = true; 1480 pass->shared_quad_state_list.back()->is_clipped = true;
1404 pass->shared_quad_state_list.back()->clip_rect = 1481 pass->shared_quad_state_list.back()->clip_rect =
1405 gfx::Rect(128, 128, 128, 128); 1482 gfx::Rect(128, 128, 128, 128);
1406 1483
1484 gfx::Rect damage_rect;
1407 RenderPassList pass_list; 1485 RenderPassList pass_list;
1408 pass_list.push_back(pass.Pass()); 1486 pass_list.push_back(pass.Pass());
1409 CALayerOverlayList ca_layer_list; 1487 CALayerOverlayList ca_layer_list;
1410 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1488 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1411 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1489 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1412 &ca_layer_list, &overlay_list); 1490 &overlay_list, &ca_layer_list,
1491 &damage_rect);
1413 ASSERT_EQ(1U, pass_list.size()); 1492 ASSERT_EQ(1U, pass_list.size());
1414 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); 1493 EXPECT_EQ(0U, pass_list.back()->quad_list.size());
1415 EXPECT_EQ(0U, overlay_list.size()); 1494 EXPECT_EQ(0U, overlay_list.size());
1416 EXPECT_EQ(0U, ca_layer_list.size()); 1495 EXPECT_EQ(0U, ca_layer_list.size());
1417 } 1496 }
1418 1497
1419 TEST_F(CALayerOverlayTest, DisallowNontrivialClip) { 1498 TEST_F(CALayerOverlayTest, DisallowNontrivialClip) {
1420 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1499 scoped_ptr<RenderPass> pass = CreateRenderPass();
1421 CreateFullscreenCandidateQuad(resource_provider_.get(), 1500 CreateFullscreenCandidateQuad(resource_provider_.get(),
1422 pass->shared_quad_state_list.back(), 1501 pass->shared_quad_state_list.back(),
1423 pass.get()); 1502 pass.get());
1424 pass->shared_quad_state_list.back()->is_clipped = true; 1503 pass->shared_quad_state_list.back()->is_clipped = true;
1425 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); 1504 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128);
1426 1505
1506 gfx::Rect damage_rect;
1427 RenderPassList pass_list; 1507 RenderPassList pass_list;
1428 pass_list.push_back(pass.Pass()); 1508 pass_list.push_back(pass.Pass());
1429 CALayerOverlayList ca_layer_list; 1509 CALayerOverlayList ca_layer_list;
1430 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1510 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1431 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1511 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1432 &ca_layer_list, &overlay_list); 1512 &overlay_list, &ca_layer_list,
1513 &damage_rect);
1433 1514
1434 ASSERT_EQ(1U, pass_list.size()); 1515 ASSERT_EQ(1U, pass_list.size());
1435 EXPECT_EQ(1U, pass_list.back()->quad_list.size()); 1516 EXPECT_EQ(1U, pass_list.back()->quad_list.size());
1436 EXPECT_EQ(1U, overlay_list.size()); 1517 EXPECT_EQ(1U, overlay_list.size());
1437 EXPECT_EQ(0U, ca_layer_list.size()); 1518 EXPECT_EQ(0U, ca_layer_list.size());
1438 } 1519 }
1439 1520
1440 TEST_F(CALayerOverlayTest, SkipTransparent) { 1521 TEST_F(CALayerOverlayTest, SkipTransparent) {
1441 scoped_ptr<RenderPass> pass = CreateRenderPass(); 1522 scoped_ptr<RenderPass> pass = CreateRenderPass();
1442 CreateFullscreenCandidateQuad(resource_provider_.get(), 1523 CreateFullscreenCandidateQuad(resource_provider_.get(),
1443 pass->shared_quad_state_list.back(), 1524 pass->shared_quad_state_list.back(),
1444 pass.get()); 1525 pass.get());
1445 pass->shared_quad_state_list.back()->opacity = 0; 1526 pass->shared_quad_state_list.back()->opacity = 0;
1446 1527
1528 gfx::Rect damage_rect;
1447 RenderPassList pass_list; 1529 RenderPassList pass_list;
1448 pass_list.push_back(pass.Pass()); 1530 pass_list.push_back(pass.Pass());
1449 CALayerOverlayList ca_layer_list; 1531 CALayerOverlayList ca_layer_list;
1450 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back())); 1532 OverlayCandidateList overlay_list(BackbufferOverlayList(pass_list.back()));
1451 overlay_processor_->ProcessForCALayers(resource_provider_.get(), &pass_list, 1533 overlay_processor_->ProcessForOverlays(resource_provider_.get(), &pass_list,
1452 &ca_layer_list, &overlay_list); 1534 &overlay_list, &ca_layer_list,
1535 &damage_rect);
1453 ASSERT_EQ(1U, pass_list.size()); 1536 ASSERT_EQ(1U, pass_list.size());
1454 EXPECT_EQ(0U, pass_list.back()->quad_list.size()); 1537 EXPECT_EQ(0U, pass_list.back()->quad_list.size());
1455 EXPECT_EQ(0U, overlay_list.size()); 1538 EXPECT_EQ(0U, overlay_list.size());
1456 EXPECT_EQ(0U, ca_layer_list.size()); 1539 EXPECT_EQ(0U, ca_layer_list.size());
1457 } 1540 }
1458 1541
1459 class OverlayInfoRendererGL : public GLRenderer { 1542 class OverlayInfoRendererGL : public GLRenderer {
1460 public: 1543 public:
1461 OverlayInfoRendererGL(RendererClient* client, 1544 OverlayInfoRendererGL(RendererClient* client,
1462 const RendererSettings* settings, 1545 const RendererSettings* settings,
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 renderer_->BeginDrawingFrame(&frame_no_overlays); 1885 renderer_->BeginDrawingFrame(&frame_no_overlays);
1803 renderer_->FinishDrawingFrame(&frame_no_overlays); 1886 renderer_->FinishDrawingFrame(&frame_no_overlays);
1804 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 1887 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
1805 SwapBuffers(); 1888 SwapBuffers();
1806 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 1889 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
1807 Mock::VerifyAndClearExpectations(&scheduler_); 1890 Mock::VerifyAndClearExpectations(&scheduler_);
1808 } 1891 }
1809 1892
1810 } // namespace 1893 } // namespace
1811 } // namespace cc 1894 } // namespace cc
OLDNEW
« cc/output/overlay_processor.cc ('K') | « cc/output/overlay_strategy_underlay.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698