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

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

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

Powered by Google App Engine
This is Rietveld 408576698