Chromium Code Reviews| 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 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 564 RenderPassList pass_list; | 575 RenderPassList pass_list; |
| 565 pass_list.push_back(pass.Pass()); | 576 pass_list.push_back(pass.Pass()); |
| 566 OverlayCandidateList candidate_list; | 577 OverlayCandidateList candidate_list; |
| 567 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 578 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 568 ASSERT_EQ(1U, pass_list.size()); | 579 ASSERT_EQ(1U, pass_list.size()); |
| 569 EXPECT_EQ(2U, candidate_list.size()); | 580 EXPECT_EQ(2U, candidate_list.size()); |
| 570 } | 581 } |
| 571 | 582 |
| 572 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 583 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 573 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 584 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 585 CreateCandidateQuadAt(resource_provider_.get(), | |
|
danakj
2015/02/05 17:27:02
you moved the candidate on top? thats not what the
achaulk
2015/02/05 18:12:19
Oh oops, this one wasn't supposed to move
| |
| 586 pass->shared_quad_state_list.back(), pass.get(), | |
| 587 kOverlayBottomRightRect); | |
| 574 CreateCheckeredQuadAt(resource_provider_.get(), | 588 CreateCheckeredQuadAt(resource_provider_.get(), |
| 575 pass->shared_quad_state_list.back(), | 589 pass->shared_quad_state_list.back(), |
| 576 pass.get(), | 590 pass.get(), |
| 577 kOverlayTopLeftRect); | 591 kOverlayTopLeftRect); |
| 592 | |
| 593 RenderPassList pass_list; | |
| 594 pass_list.push_back(pass.Pass()); | |
| 595 | |
| 596 RenderPassList original_pass_list; | |
| 597 RenderPass::CopyAll(pass_list, &original_pass_list); | |
| 598 | |
| 599 OverlayCandidateList candidate_list; | |
| 600 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
| 601 EXPECT_EQ(1U, pass_list.size()); | |
| 602 EXPECT_EQ(2U, candidate_list.size()); | |
| 603 } | |
| 604 | |
| 605 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | |
| 606 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 607 SharedQuadState* current = pass->shared_quad_state_list.back(); | |
| 608 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | |
| 609 shared_state->opacity = 0.f; | |
| 610 CreateCandidateQuadAt(resource_provider_.get(), current, pass.get(), | |
| 611 kOverlayBottomRightRect); | |
| 612 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | |
|
danakj
2015/02/05 17:27:02
now the transparent is below?
achaulk
2015/02/05 18:12:19
It was always below, that's what this was supposed
| |
| 613 kOverlayBottomRightRect); | |
| 614 | |
| 615 RenderPassList pass_list; | |
| 616 pass_list.push_back(pass.Pass()); | |
| 617 | |
| 618 RenderPassList original_pass_list; | |
| 619 RenderPass::CopyAll(pass_list, &original_pass_list); | |
| 620 | |
| 621 OverlayCandidateList candidate_list; | |
| 622 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
| 623 EXPECT_EQ(1U, pass_list.size()); | |
| 624 EXPECT_EQ(2U, candidate_list.size()); | |
| 625 } | |
| 626 | |
| 627 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | |
| 628 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 629 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | |
| 630 SK_ColorTRANSPARENT, pass.get(), | |
| 631 kOverlayBottomRightRect); | |
| 578 CreateCandidateQuadAt(resource_provider_.get(), | 632 CreateCandidateQuadAt(resource_provider_.get(), |
| 579 pass->shared_quad_state_list.back(), | 633 pass->shared_quad_state_list.back(), pass.get(), |
| 580 pass.get(), | |
| 581 kOverlayBottomRightRect); | 634 kOverlayBottomRightRect); |
| 582 | 635 |
| 583 RenderPassList pass_list; | 636 RenderPassList pass_list; |
| 584 pass_list.push_back(pass.Pass()); | 637 pass_list.push_back(pass.Pass()); |
| 585 | 638 |
| 586 RenderPassList original_pass_list; | 639 RenderPassList original_pass_list; |
| 587 RenderPass::CopyAll(pass_list, &original_pass_list); | 640 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 588 | 641 |
| 589 OverlayCandidateList candidate_list; | 642 OverlayCandidateList candidate_list; |
| 590 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 643 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 591 EXPECT_EQ(1U, pass_list.size()); | 644 EXPECT_EQ(1U, pass_list.size()); |
| 592 EXPECT_EQ(2U, candidate_list.size()); | 645 EXPECT_EQ(2U, candidate_list.size()); |
| 593 } | 646 } |
| 594 | 647 |
| 648 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | |
|
danakj
2015/02/05 17:28:25
this new test is good for testing the color checks
achaulk
2015/02/05 18:12:19
I'm not sure what you mean. You want a transparent
danakj
2015/02/05 18:18:37
yes. that's the reason the needsblending check is
achaulk
2015/02/05 19:32:58
Done.
| |
| 649 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
| 650 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), SK_ColorBLACK, | |
| 651 pass.get(), kOverlayBottomRightRect); | |
| 652 CreateCandidateQuadAt(resource_provider_.get(), | |
| 653 pass->shared_quad_state_list.back(), pass.get(), | |
| 654 kOverlayBottomRightRect); | |
| 655 | |
| 656 RenderPassList pass_list; | |
| 657 pass_list.push_back(pass.Pass()); | |
| 658 | |
| 659 RenderPassList original_pass_list; | |
| 660 RenderPass::CopyAll(pass_list, &original_pass_list); | |
| 661 | |
| 662 OverlayCandidateList candidate_list; | |
| 663 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
| 664 EXPECT_EQ(1U, pass_list.size()); | |
| 665 EXPECT_EQ(0U, candidate_list.size()); | |
| 666 } | |
| 667 | |
| 595 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 668 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
| 596 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 669 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 597 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 670 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 598 pass->shared_quad_state_list.back(), | 671 pass->shared_quad_state_list.back(), |
| 599 pass.get(), kSwapTransform); | 672 pass.get(), kSwapTransform); |
| 600 | 673 |
| 601 RenderPassList pass_list; | 674 RenderPassList pass_list; |
| 602 pass_list.push_back(pass.Pass()); | 675 pass_list.push_back(pass.Pass()); |
| 603 OverlayCandidateList candidate_list; | 676 OverlayCandidateList candidate_list; |
| 604 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 677 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 946 renderer_->BeginDrawingFrame(&frame3); | 1019 renderer_->BeginDrawingFrame(&frame3); |
| 947 renderer_->FinishDrawingFrame(&frame3); | 1020 renderer_->FinishDrawingFrame(&frame3); |
| 948 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1021 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 949 SwapBuffers(); | 1022 SwapBuffers(); |
| 950 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1023 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 951 Mock::VerifyAndClearExpectations(&scheduler_); | 1024 Mock::VerifyAndClearExpectations(&scheduler_); |
| 952 } | 1025 } |
| 953 | 1026 |
| 954 } // namespace | 1027 } // namespace |
| 955 } // namespace cc | 1028 } // namespace cc |
| OLD | NEW |