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