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

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

Powered by Google App Engine
This is Rietveld 408576698