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/scoped_ptr_vector.h" | 5 #include "cc/base/scoped_ptr_vector.h" |
6 #include "cc/output/gl_renderer.h" | 6 #include "cc/output/gl_renderer.h" |
7 #include "cc/output/output_surface.h" | 7 #include "cc/output/output_surface.h" |
8 #include "cc/output/output_surface_client.h" | 8 #include "cc/output/output_surface_client.h" |
9 #include "cc/output/overlay_candidate_validator.h" | 9 #include "cc/output/overlay_candidate_validator.h" |
10 #include "cc/output/overlay_processor.h" | 10 #include "cc/output/overlay_processor.h" |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 TextureMailbox mailbox = | 149 TextureMailbox mailbox = |
150 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); | 150 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); |
151 mailbox.set_allow_overlay(true); | 151 mailbox.set_allow_overlay(true); |
152 scoped_ptr<SingleReleaseCallbackImpl> release_callback = | 152 scoped_ptr<SingleReleaseCallbackImpl> release_callback = |
153 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 153 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
154 | 154 |
155 return resource_provider->CreateResourceFromTextureMailbox( | 155 return resource_provider->CreateResourceFromTextureMailbox( |
156 mailbox, release_callback.Pass()); | 156 mailbox, release_callback.Pass()); |
157 } | 157 } |
158 | 158 |
| 159 SolidColorDrawQuad* CreateSolidColorQuadAt( |
| 160 const SharedQuadState* shared_quad_state, |
| 161 SkColor color, |
| 162 RenderPass* render_pass, |
| 163 const gfx::Rect& rect) { |
| 164 SolidColorDrawQuad* quad = |
| 165 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 166 quad->SetNew(shared_quad_state, rect, rect, color, false); |
| 167 return quad; |
| 168 } |
| 169 |
159 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, | 170 TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, |
160 const SharedQuadState* shared_quad_state, | 171 const SharedQuadState* shared_quad_state, |
161 RenderPass* render_pass, | 172 RenderPass* render_pass, |
162 const gfx::Rect& rect) { | 173 const gfx::Rect& rect) { |
163 ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); | 174 ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); |
164 bool premultiplied_alpha = false; | 175 bool premultiplied_alpha = false; |
165 bool flipped = false; | 176 bool flipped = false; |
166 bool nearest_neighbor = false; | 177 bool nearest_neighbor = false; |
167 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 178 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
168 | 179 |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 | 596 |
586 RenderPassList original_pass_list; | 597 RenderPassList original_pass_list; |
587 RenderPass::CopyAll(pass_list, &original_pass_list); | 598 RenderPass::CopyAll(pass_list, &original_pass_list); |
588 | 599 |
589 OverlayCandidateList candidate_list; | 600 OverlayCandidateList candidate_list; |
590 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 601 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
591 EXPECT_EQ(1U, pass_list.size()); | 602 EXPECT_EQ(1U, pass_list.size()); |
592 EXPECT_EQ(2U, candidate_list.size()); | 603 EXPECT_EQ(2U, candidate_list.size()); |
593 } | 604 } |
594 | 605 |
| 606 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 607 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 608 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 609 shared_state->opacity = 0.f; |
| 610 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 611 kOverlayBottomRightRect); |
| 612 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 613 shared_state->opacity = 1.f; |
| 614 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 615 kOverlayBottomRightRect); |
| 616 |
| 617 RenderPassList pass_list; |
| 618 pass_list.push_back(pass.Pass()); |
| 619 |
| 620 RenderPassList original_pass_list; |
| 621 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 622 |
| 623 OverlayCandidateList candidate_list; |
| 624 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 625 EXPECT_EQ(1U, pass_list.size()); |
| 626 EXPECT_EQ(2U, candidate_list.size()); |
| 627 } |
| 628 |
| 629 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 630 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 631 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 632 SK_ColorTRANSPARENT, pass.get(), |
| 633 kOverlayBottomRightRect); |
| 634 CreateCandidateQuadAt(resource_provider_.get(), |
| 635 pass->shared_quad_state_list.back(), pass.get(), |
| 636 kOverlayBottomRightRect); |
| 637 |
| 638 RenderPassList pass_list; |
| 639 pass_list.push_back(pass.Pass()); |
| 640 |
| 641 RenderPassList original_pass_list; |
| 642 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 643 |
| 644 OverlayCandidateList candidate_list; |
| 645 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 646 EXPECT_EQ(1U, pass_list.size()); |
| 647 EXPECT_EQ(2U, candidate_list.size()); |
| 648 } |
| 649 |
| 650 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 651 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 652 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 653 shared_state->opacity = 0.5f; |
| 654 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 655 kOverlayBottomRightRect); |
| 656 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 657 shared_state->opacity = 1.f; |
| 658 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 659 kOverlayBottomRightRect); |
| 660 |
| 661 RenderPassList pass_list; |
| 662 pass_list.push_back(pass.Pass()); |
| 663 |
| 664 RenderPassList original_pass_list; |
| 665 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 666 |
| 667 OverlayCandidateList candidate_list; |
| 668 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 669 EXPECT_EQ(1U, pass_list.size()); |
| 670 EXPECT_EQ(0U, candidate_list.size()); |
| 671 } |
| 672 |
| 673 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
| 674 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 675 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 676 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
| 677 kOverlayBottomRightRect)->opaque_rect = |
| 678 kOverlayBottomRightRect; |
| 679 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 680 kOverlayBottomRightRect); |
| 681 |
| 682 RenderPassList pass_list; |
| 683 pass_list.push_back(pass.Pass()); |
| 684 |
| 685 RenderPassList original_pass_list; |
| 686 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 687 |
| 688 OverlayCandidateList candidate_list; |
| 689 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 690 EXPECT_EQ(1U, pass_list.size()); |
| 691 EXPECT_EQ(0U, candidate_list.size()); |
| 692 } |
| 693 |
595 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 694 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
596 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 695 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
597 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 696 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
598 pass->shared_quad_state_list.back(), | 697 pass->shared_quad_state_list.back(), |
599 pass.get(), kSwapTransform); | 698 pass.get(), kSwapTransform); |
600 | 699 |
601 RenderPassList pass_list; | 700 RenderPassList pass_list; |
602 pass_list.push_back(pass.Pass()); | 701 pass_list.push_back(pass.Pass()); |
603 OverlayCandidateList candidate_list; | 702 OverlayCandidateList candidate_list; |
604 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 703 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
946 renderer_->BeginDrawingFrame(&frame3); | 1045 renderer_->BeginDrawingFrame(&frame3); |
947 renderer_->FinishDrawingFrame(&frame3); | 1046 renderer_->FinishDrawingFrame(&frame3); |
948 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1047 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
949 SwapBuffers(); | 1048 SwapBuffers(); |
950 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1049 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
951 Mock::VerifyAndClearExpectations(&scheduler_); | 1050 Mock::VerifyAndClearExpectations(&scheduler_); |
952 } | 1051 } |
953 | 1052 |
954 } // namespace | 1053 } // namespace |
955 } // namespace cc | 1054 } // namespace cc |
OLD | NEW |