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/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 Loading... | |
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 Loading... | |
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 Loading... | |
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 // The overlay quad should have changed to a transparent SOLID_COLOR quad. | |
785 ASSERT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); | |
danakj
2015/03/24 17:55:15
EXPECT is nicer than ASSERT unless you're guarding
danakj
2015/03/24 17:55:15
Can you verify the pass_list[0]->quad_list size?
achaulk
2015/03/27 17:17:47
Ah, I initially did, and changed it to an assert b
| |
786 } | |
787 | |
788 TEST_F(UnderlayTest, AllowOnTop) { | |
789 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
790 CreateFullscreenCandidateQuad(resource_provider_.get(), | |
791 pass->shared_quad_state_list.back(), | |
792 pass.get()); | |
793 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | |
794 CreateFullscreenCheckeredQuad(resource_provider_.get(), | |
795 pass->shared_quad_state_list.back(), | |
796 pass.get()); | |
797 | |
798 RenderPassList pass_list; | |
799 pass_list.push_back(pass.Pass()); | |
800 | |
801 OverlayCandidateList candidate_list; | |
802 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
803 EXPECT_EQ(1U, pass_list.size()); | |
804 ASSERT_EQ(2U, candidate_list.size()); | |
805 EXPECT_EQ(0, candidate_list[0].plane_z_order); | |
806 EXPECT_EQ(-1, candidate_list[1].plane_z_order); | |
807 // The overlay quad should have changed to a SOLID_COLOR quad. | |
808 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); | |
809 } | |
810 | |
765 class OverlayInfoRendererGL : public GLRenderer { | 811 class OverlayInfoRendererGL : public GLRenderer { |
766 public: | 812 public: |
767 OverlayInfoRendererGL(RendererClient* client, | 813 OverlayInfoRendererGL(RendererClient* client, |
768 const RendererSettings* settings, | 814 const RendererSettings* settings, |
769 OutputSurface* output_surface, | 815 OutputSurface* output_surface, |
770 ResourceProvider* resource_provider) | 816 ResourceProvider* resource_provider) |
771 : GLRenderer(client, | 817 : GLRenderer(client, |
772 settings, | 818 settings, |
773 output_surface, | 819 output_surface, |
774 resource_provider, | 820 resource_provider, |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1049 renderer_->BeginDrawingFrame(&frame3); | 1095 renderer_->BeginDrawingFrame(&frame3); |
1050 renderer_->FinishDrawingFrame(&frame3); | 1096 renderer_->FinishDrawingFrame(&frame3); |
1051 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1097 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1052 SwapBuffers(); | 1098 SwapBuffers(); |
1053 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1099 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1054 Mock::VerifyAndClearExpectations(&scheduler_); | 1100 Mock::VerifyAndClearExpectations(&scheduler_); |
1055 } | 1101 } |
1056 | 1102 |
1057 } // namespace | 1103 } // namespace |
1058 } // namespace cc | 1104 } // namespace cc |
OLD | NEW |