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

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

Issue 880023005: cc: Ignore certain quads that would otherwise block overlays (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/base/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
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
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
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
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698