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

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

Issue 979693005: Add underlays and split off common overlay functionality (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: overlay test changes Created 5 years, 9 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_underlay.cc ('k') | cc/quads/list_container.h » ('j') | 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/compositor_frame_metadata.h" 6 #include "cc/output/compositor_frame_metadata.h"
7 #include "cc/output/gl_renderer.h" 7 #include "cc/output/gl_renderer.h"
8 #include "cc/output/output_surface.h" 8 #include "cc/output/output_surface.h"
9 #include "cc/output/output_surface_client.h" 9 #include "cc/output/output_surface_client.h"
10 #include "cc/output/overlay_candidate_validator.h" 10 #include "cc/output/overlay_candidate_validator.h"
11 #include "cc/output/overlay_processor.h" 11 #include "cc/output/overlay_processor.h"
12 #include "cc/output/overlay_strategy_single_on_top.h" 12 #include "cc/output/overlay_strategy_single_on_top.h"
13 #include "cc/output/overlay_strategy_underlay.h"
13 #include "cc/quads/checkerboard_draw_quad.h" 14 #include "cc/quads/checkerboard_draw_quad.h"
14 #include "cc/quads/render_pass.h" 15 #include "cc/quads/render_pass.h"
15 #include "cc/quads/stream_video_draw_quad.h" 16 #include "cc/quads/stream_video_draw_quad.h"
16 #include "cc/quads/texture_draw_quad.h" 17 #include "cc/quads/texture_draw_quad.h"
17 #include "cc/resources/resource_provider.h" 18 #include "cc/resources/resource_provider.h"
18 #include "cc/resources/texture_mailbox.h" 19 #include "cc/resources/texture_mailbox.h"
19 #include "cc/test/fake_output_surface_client.h" 20 #include "cc/test/fake_output_surface_client.h"
20 #include "cc/test/geometry_test_utils.h" 21 #include "cc/test/geometry_test_utils.h"
21 #include "cc/test/test_context_provider.h" 22 #include "cc/test/test_context_provider.h"
22 #include "cc/test/test_shared_bitmap_manager.h" 23 #include "cc/test/test_shared_bitmap_manager.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 OverlayCandidate& candidate = surfaces->back(); 63 OverlayCandidate& candidate = surfaces->back();
63 if (candidate.display_rect.width() == 64) 64 if (candidate.display_rect.width() == 64)
64 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect); 65 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect);
65 else 66 else
66 EXPECT_EQ(kOverlayRect, candidate.display_rect); 67 EXPECT_EQ(kOverlayRect, candidate.display_rect);
67 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), 68 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(),
68 candidate.uv_rect.ToString()); 69 candidate.uv_rect.ToString());
69 candidate.overlay_handled = true; 70 candidate.overlay_handled = true;
70 } 71 }
71 72
73 template <typename OverlayStrategyType>
72 class SingleOverlayProcessor : public OverlayProcessor { 74 class SingleOverlayProcessor : public OverlayProcessor {
73 public: 75 public:
74 SingleOverlayProcessor(OutputSurface* surface, 76 SingleOverlayProcessor(OutputSurface* surface,
75 ResourceProvider* resource_provider); 77 ResourceProvider* resource_provider)
78 : OverlayProcessor(surface, resource_provider) {
79 EXPECT_EQ(surface, surface_);
80 EXPECT_EQ(resource_provider, resource_provider_);
81 }
82
76 // Virtual to allow testing different strategies. 83 // Virtual to allow testing different strategies.
77 void Initialize() override; 84 void Initialize() override {
85 OverlayCandidateValidator* candidates =
86 surface_->overlay_candidate_validator();
87 ASSERT_TRUE(candidates != NULL);
88 strategies_.push_back(scoped_ptr<Strategy>(
89 new OverlayStrategyType(candidates, resource_provider_)));
90 }
78 }; 91 };
79 92
80 SingleOverlayProcessor::SingleOverlayProcessor(
81 OutputSurface* surface,
82 ResourceProvider* resource_provider)
83 : OverlayProcessor(surface, resource_provider) {
84 EXPECT_EQ(surface, surface_);
85 EXPECT_EQ(resource_provider, resource_provider_);
86 }
87
88 void SingleOverlayProcessor::Initialize() {
89 OverlayCandidateValidator* candidates =
90 surface_->overlay_candidate_validator();
91 ASSERT_TRUE(candidates != NULL);
92 strategies_.push_back(scoped_ptr<Strategy>(
93 new OverlayStrategySingleOnTop(candidates, resource_provider_)));
94 }
95
96 class DefaultOverlayProcessor : public OverlayProcessor { 93 class DefaultOverlayProcessor : public OverlayProcessor {
97 public: 94 public:
98 DefaultOverlayProcessor(OutputSurface* surface, 95 DefaultOverlayProcessor(OutputSurface* surface,
99 ResourceProvider* resource_provider); 96 ResourceProvider* resource_provider);
100 size_t GetStrategyCount(); 97 size_t GetStrategyCount();
101 }; 98 };
102 99
103 DefaultOverlayProcessor::DefaultOverlayProcessor( 100 DefaultOverlayProcessor::DefaultOverlayProcessor(
104 OutputSurface* surface, 101 OutputSurface* surface,
105 ResourceProvider* resource_provider) 102 ResourceProvider* resource_provider)
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 new TestSharedBitmapManager()); 293 new TestSharedBitmapManager());
297 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( 294 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
298 &output_surface, shared_bitmap_manager.get(), NULL, NULL, 0, false, 1)); 295 &output_surface, shared_bitmap_manager.get(), NULL, NULL, 0, false, 1));
299 296
300 scoped_ptr<DefaultOverlayProcessor> overlay_processor( 297 scoped_ptr<DefaultOverlayProcessor> overlay_processor(
301 new DefaultOverlayProcessor(&output_surface, resource_provider.get())); 298 new DefaultOverlayProcessor(&output_surface, resource_provider.get()));
302 overlay_processor->Initialize(); 299 overlay_processor->Initialize();
303 EXPECT_GE(1U, overlay_processor->GetStrategyCount()); 300 EXPECT_GE(1U, overlay_processor->GetStrategyCount());
304 } 301 }
305 302
306 class SingleOverlayOnTopTest : public testing::Test { 303 template <typename OverlayStrategyType>
304 class OverlayTest : public testing::Test {
307 protected: 305 protected:
308 void SetUp() override { 306 void SetUp() override {
309 provider_ = TestContextProvider::Create(); 307 provider_ = TestContextProvider::Create();
310 output_surface_.reset(new OverlayOutputSurface(provider_)); 308 output_surface_.reset(new OverlayOutputSurface(provider_));
311 EXPECT_TRUE(output_surface_->BindToClient(&client_)); 309 EXPECT_TRUE(output_surface_->BindToClient(&client_));
312 output_surface_->InitWithSingleOverlayValidator(); 310 output_surface_->InitWithSingleOverlayValidator();
313 EXPECT_TRUE(output_surface_->overlay_candidate_validator() != NULL); 311 EXPECT_TRUE(output_surface_->overlay_candidate_validator() != NULL);
314 312
315 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); 313 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
316 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 314 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
317 shared_bitmap_manager_.get(), 315 shared_bitmap_manager_.get(),
318 NULL, 316 NULL,
319 NULL, 317 NULL,
320 0, 318 0,
321 false, 319 false,
322 1); 320 1);
323 321
324 overlay_processor_.reset(new SingleOverlayProcessor( 322 overlay_processor_.reset(new SingleOverlayProcessor<OverlayStrategyType>(
325 output_surface_.get(), resource_provider_.get())); 323 output_surface_.get(), resource_provider_.get()));
326 overlay_processor_->Initialize(); 324 overlay_processor_->Initialize();
327 } 325 }
328 326
329 scoped_refptr<TestContextProvider> provider_; 327 scoped_refptr<TestContextProvider> provider_;
330 scoped_ptr<OverlayOutputSurface> output_surface_; 328 scoped_ptr<OverlayOutputSurface> output_surface_;
331 FakeOutputSurfaceClient client_; 329 FakeOutputSurfaceClient client_;
332 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 330 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
333 scoped_ptr<ResourceProvider> resource_provider_; 331 scoped_ptr<ResourceProvider> resource_provider_;
334 scoped_ptr<SingleOverlayProcessor> overlay_processor_; 332 scoped_ptr<SingleOverlayProcessor<OverlayStrategyType>> overlay_processor_;
335 }; 333 };
336 334
335 typedef OverlayTest<OverlayStrategySingleOnTop> SingleOverlayOnTopTest;
336 typedef OverlayTest<OverlayStrategyUnderlay> UnderlayTest;
337
337 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { 338 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) {
338 scoped_ptr<RenderPass> pass = CreateRenderPass(); 339 scoped_ptr<RenderPass> pass = CreateRenderPass();
339 TextureDrawQuad* original_quad = 340 TextureDrawQuad* original_quad =
340 CreateFullscreenCandidateQuad(resource_provider_.get(), 341 CreateFullscreenCandidateQuad(resource_provider_.get(),
341 pass->shared_quad_state_list.back(), 342 pass->shared_quad_state_list.back(),
342 pass.get()); 343 pass.get());
343 unsigned original_resource_id = original_quad->resource_id; 344 unsigned original_resource_id = original_quad->resource_id;
344 345
345 // Add something behind it. 346 // Add something behind it.
346 CreateFullscreenCheckeredQuad(resource_provider_.get(), 347 CreateFullscreenCheckeredQuad(resource_provider_.get(),
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 pass.get(), kYMirrorTransform); 756 pass.get(), kYMirrorTransform);
756 757
757 RenderPassList pass_list; 758 RenderPassList pass_list;
758 pass_list.push_back(pass.Pass()); 759 pass_list.push_back(pass.Pass());
759 OverlayCandidateList candidate_list; 760 OverlayCandidateList candidate_list;
760 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); 761 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
761 ASSERT_EQ(1U, pass_list.size()); 762 ASSERT_EQ(1U, pass_list.size());
762 EXPECT_EQ(2U, candidate_list.size()); 763 EXPECT_EQ(2U, candidate_list.size());
763 } 764 }
764 765
766 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) {
767 scoped_ptr<RenderPass> pass = CreateRenderPass();
768 CreateFullscreenCheckeredQuad(resource_provider_.get(),
769 pass->shared_quad_state_list.back(),
770 pass.get());
771 CreateCandidateQuadAt(resource_provider_.get(),
772 pass->shared_quad_state_list.back(), pass.get(),
773 kOverlayBottomRightRect);
774
775 RenderPassList pass_list;
776 pass_list.push_back(pass.Pass());
777
778 OverlayCandidateList candidate_list;
779 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
780 EXPECT_EQ(1U, pass_list.size());
781 ASSERT_EQ(2U, candidate_list.size());
782 EXPECT_EQ(0, candidate_list[0].plane_z_order);
783 EXPECT_EQ(-1, candidate_list[1].plane_z_order);
784 EXPECT_EQ(2U, pass_list[0]->quad_list.size());
785 // The overlay quad should have changed to a SOLID_COLOR quad.
786 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR);
787 }
788
789 TEST_F(UnderlayTest, AllowOnTop) {
790 scoped_ptr<RenderPass> pass = CreateRenderPass();
791 CreateFullscreenCandidateQuad(resource_provider_.get(),
792 pass->shared_quad_state_list.back(),
793 pass.get());
794 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f;
795 CreateFullscreenCheckeredQuad(resource_provider_.get(),
796 pass->shared_quad_state_list.back(),
797 pass.get());
798
799 RenderPassList pass_list;
800 pass_list.push_back(pass.Pass());
801
802 OverlayCandidateList candidate_list;
803 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
804 EXPECT_EQ(1U, pass_list.size());
805 ASSERT_EQ(2U, candidate_list.size());
806 EXPECT_EQ(0, candidate_list[0].plane_z_order);
807 EXPECT_EQ(-1, candidate_list[1].plane_z_order);
808 // The overlay quad should have changed to a SOLID_COLOR quad.
809 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR);
810 }
811
765 class OverlayInfoRendererGL : public GLRenderer { 812 class OverlayInfoRendererGL : public GLRenderer {
766 public: 813 public:
767 OverlayInfoRendererGL(RendererClient* client, 814 OverlayInfoRendererGL(RendererClient* client,
768 const RendererSettings* settings, 815 const RendererSettings* settings,
769 OutputSurface* output_surface, 816 OutputSurface* output_surface,
770 ResourceProvider* resource_provider) 817 ResourceProvider* resource_provider)
771 : GLRenderer(client, 818 : GLRenderer(client,
772 settings, 819 settings,
773 output_surface, 820 output_surface,
774 resource_provider, 821 resource_provider,
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 renderer_->BeginDrawingFrame(&frame3); 1096 renderer_->BeginDrawingFrame(&frame3);
1050 renderer_->FinishDrawingFrame(&frame3); 1097 renderer_->FinishDrawingFrame(&frame3);
1051 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); 1098 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1));
1052 SwapBuffers(); 1099 SwapBuffers();
1053 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); 1100 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1));
1054 Mock::VerifyAndClearExpectations(&scheduler_); 1101 Mock::VerifyAndClearExpectations(&scheduler_);
1055 } 1102 }
1056 1103
1057 } // namespace 1104 } // namespace
1058 } // namespace cc 1105 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_underlay.cc ('k') | cc/quads/list_container.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698