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" |
11 #include "cc/output/overlay_strategy_single_on_top.h" | 11 #include "cc/output/overlay_strategy_single_on_top.h" |
12 #include "cc/quads/checkerboard_draw_quad.h" | 12 #include "cc/quads/checkerboard_draw_quad.h" |
13 #include "cc/quads/render_pass.h" | 13 #include "cc/quads/render_pass.h" |
14 #include "cc/quads/stream_video_draw_quad.h" | |
14 #include "cc/quads/texture_draw_quad.h" | 15 #include "cc/quads/texture_draw_quad.h" |
15 #include "cc/resources/resource_provider.h" | 16 #include "cc/resources/resource_provider.h" |
16 #include "cc/resources/texture_mailbox.h" | 17 #include "cc/resources/texture_mailbox.h" |
17 #include "cc/test/fake_output_surface_client.h" | 18 #include "cc/test/fake_output_surface_client.h" |
18 #include "cc/test/geometry_test_utils.h" | 19 #include "cc/test/geometry_test_utils.h" |
19 #include "cc/test/test_context_provider.h" | 20 #include "cc/test/test_context_provider.h" |
20 #include "cc/test/test_shared_bitmap_manager.h" | 21 #include "cc/test/test_shared_bitmap_manager.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
23 | 24 |
24 using testing::_; | 25 using testing::_; |
25 using testing::Mock; | 26 using testing::Mock; |
26 | 27 |
27 namespace cc { | 28 namespace cc { |
28 namespace { | 29 namespace { |
29 | 30 |
30 const gfx::Rect kOverlayRect(0, 0, 128, 128); | 31 const gfx::Rect kOverlayRect(0, 0, 128, 128); |
31 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); | 32 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); |
32 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); | 33 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); |
33 const gfx::PointF kUVTopLeft(0.1f, 0.2f); | 34 const gfx::PointF kUVTopLeft(0.1f, 0.2f); |
34 const gfx::PointF kUVBottomRight(1.0f, 1.0f); | 35 const gfx::PointF kUVBottomRight(1.0f, 1.0f); |
36 const gfx::Transform kNormalTransform = | |
37 gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. | |
38 const gfx::Transform kXMirrorTransform = | |
39 gfx::Transform(-0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> 1-x,y. | |
40 const gfx::Transform kYMirrorTransform = | |
41 gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. | |
42 const gfx::Transform kBothMirrorTransform = | |
43 gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. | |
44 const gfx::Transform kSwapTransform = | |
45 gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x. | |
35 | 46 |
36 void MailboxReleased(unsigned sync_point, | 47 void MailboxReleased(unsigned sync_point, |
37 bool lost_resource, | 48 bool lost_resource, |
38 BlockingTaskRunner* main_thread_task_runner) { | 49 BlockingTaskRunner* main_thread_task_runner) { |
39 } | 50 } |
40 | 51 |
41 class SingleOverlayValidator : public OverlayCandidateValidator { | 52 class SingleOverlayValidator : public OverlayCandidateValidator { |
42 public: | 53 public: |
43 void CheckOverlaySupport(OverlayCandidateList* surfaces) override; | 54 void CheckOverlaySupport(OverlayCandidateList* surfaces) override; |
44 }; | 55 }; |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
166 kUVTopLeft, | 177 kUVTopLeft, |
167 kUVBottomRight, | 178 kUVBottomRight, |
168 SK_ColorTRANSPARENT, | 179 SK_ColorTRANSPARENT, |
169 vertex_opacity, | 180 vertex_opacity, |
170 flipped, | 181 flipped, |
171 nearest_neighbor); | 182 nearest_neighbor); |
172 | 183 |
173 return overlay_quad; | 184 return overlay_quad; |
174 } | 185 } |
175 | 186 |
187 StreamVideoDrawQuad* CreateCandidateVideoQuadAt( | |
188 ResourceProvider* resource_provider, | |
189 const SharedQuadState* shared_quad_state, | |
190 RenderPass* render_pass, | |
191 const gfx::Rect& rect, | |
192 const gfx::Transform& transform) { | |
193 ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); | |
194 | |
195 StreamVideoDrawQuad* overlay_quad = | |
196 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); | |
197 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id, | |
198 transform); | |
199 | |
200 return overlay_quad; | |
201 } | |
202 | |
176 TextureDrawQuad* CreateFullscreenCandidateQuad( | 203 TextureDrawQuad* CreateFullscreenCandidateQuad( |
177 ResourceProvider* resource_provider, | 204 ResourceProvider* resource_provider, |
178 const SharedQuadState* shared_quad_state, | 205 const SharedQuadState* shared_quad_state, |
179 RenderPass* render_pass) { | 206 RenderPass* render_pass) { |
180 return CreateCandidateQuadAt( | 207 return CreateCandidateQuadAt( |
181 resource_provider, shared_quad_state, render_pass, kOverlayRect); | 208 resource_provider, shared_quad_state, render_pass, kOverlayRect); |
182 } | 209 } |
183 | 210 |
211 StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( | |
212 ResourceProvider* resource_provider, | |
213 const SharedQuadState* shared_quad_state, | |
214 RenderPass* render_pass, | |
215 const gfx::Transform& transform) { | |
216 return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state, | |
217 render_pass, kOverlayRect, transform); | |
218 } | |
219 | |
184 void CreateCheckeredQuadAt(ResourceProvider* resource_provider, | 220 void CreateCheckeredQuadAt(ResourceProvider* resource_provider, |
185 const SharedQuadState* shared_quad_state, | 221 const SharedQuadState* shared_quad_state, |
186 RenderPass* render_pass, | 222 RenderPass* render_pass, |
187 const gfx::Rect& rect) { | 223 const gfx::Rect& rect) { |
188 CheckerboardDrawQuad* checkerboard_quad = | 224 CheckerboardDrawQuad* checkerboard_quad = |
189 render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); | 225 render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); |
190 checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor()); | 226 checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor()); |
191 } | 227 } |
192 | 228 |
193 void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider, | 229 void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider, |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
482 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 518 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
483 ASSERT_EQ(1U, pass_list.size()); | 519 ASSERT_EQ(1U, pass_list.size()); |
484 EXPECT_EQ(0U, candidate_list.size()); | 520 EXPECT_EQ(0U, candidate_list.size()); |
485 } | 521 } |
486 | 522 |
487 TEST_F(SingleOverlayOnTopTest, RejectTransform) { | 523 TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
488 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 524 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
489 CreateFullscreenCandidateQuad(resource_provider_.get(), | 525 CreateFullscreenCandidateQuad(resource_provider_.get(), |
490 pass->shared_quad_state_list.back(), | 526 pass->shared_quad_state_list.back(), |
491 pass.get()); | 527 pass.get()); |
492 pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f, | 528 pass->shared_quad_state_list.back() |
danakj
2015/01/21 23:30:33
Seems like there's some new corner cases here, sho
achaulk
2015/01/23 20:10:55
Done.
| |
493 2.f); | 529 ->content_to_target_transform.RotateAboutXAxis(45.f); |
494 | 530 |
495 RenderPassList pass_list; | 531 RenderPassList pass_list; |
496 pass_list.push_back(pass.Pass()); | 532 pass_list.push_back(pass.Pass()); |
497 OverlayCandidateList candidate_list; | 533 OverlayCandidateList candidate_list; |
498 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 534 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
499 ASSERT_EQ(1U, pass_list.size()); | 535 ASSERT_EQ(1U, pass_list.size()); |
500 EXPECT_EQ(0U, candidate_list.size()); | 536 EXPECT_EQ(0U, candidate_list.size()); |
501 } | 537 } |
502 | 538 |
503 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 539 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
(...skipping 12 matching lines...) Expand all Loading... | |
516 | 552 |
517 RenderPassList original_pass_list; | 553 RenderPassList original_pass_list; |
518 RenderPass::CopyAll(pass_list, &original_pass_list); | 554 RenderPass::CopyAll(pass_list, &original_pass_list); |
519 | 555 |
520 OverlayCandidateList candidate_list; | 556 OverlayCandidateList candidate_list; |
521 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 557 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
522 EXPECT_EQ(1U, pass_list.size()); | 558 EXPECT_EQ(1U, pass_list.size()); |
523 EXPECT_EQ(2U, candidate_list.size()); | 559 EXPECT_EQ(2U, candidate_list.size()); |
524 } | 560 } |
525 | 561 |
562 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | |
563 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
564 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | |
565 pass->shared_quad_state_list.back(), | |
566 pass.get(), kSwapTransform); | |
567 | |
568 RenderPassList pass_list; | |
569 pass_list.push_back(pass.Pass()); | |
570 OverlayCandidateList candidate_list; | |
571 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
572 ASSERT_EQ(1U, pass_list.size()); | |
573 EXPECT_EQ(0U, candidate_list.size()); | |
574 } | |
575 | |
576 TEST_F(SingleOverlayOnTopTest, RejectVideoXMirrorTransform) { | |
577 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
578 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | |
579 pass->shared_quad_state_list.back(), | |
580 pass.get(), kXMirrorTransform); | |
581 | |
582 RenderPassList pass_list; | |
583 pass_list.push_back(pass.Pass()); | |
584 OverlayCandidateList candidate_list; | |
585 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
586 ASSERT_EQ(1U, pass_list.size()); | |
587 EXPECT_EQ(0U, candidate_list.size()); | |
588 } | |
589 | |
590 TEST_F(SingleOverlayOnTopTest, AllowBothMirrorTransform) { | |
591 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
592 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | |
593 pass->shared_quad_state_list.back(), | |
594 pass.get(), kBothMirrorTransform); | |
595 | |
596 RenderPassList pass_list; | |
597 pass_list.push_back(pass.Pass()); | |
598 OverlayCandidateList candidate_list; | |
599 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
600 ASSERT_EQ(1U, pass_list.size()); | |
601 EXPECT_EQ(2U, candidate_list.size()); | |
602 } | |
603 | |
604 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { | |
605 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
606 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | |
607 pass->shared_quad_state_list.back(), | |
608 pass.get(), kNormalTransform); | |
609 | |
610 RenderPassList pass_list; | |
611 pass_list.push_back(pass.Pass()); | |
612 OverlayCandidateList candidate_list; | |
613 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
614 ASSERT_EQ(1U, pass_list.size()); | |
615 EXPECT_EQ(2U, candidate_list.size()); | |
616 } | |
617 | |
618 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | |
619 scoped_ptr<RenderPass> pass = CreateRenderPass(); | |
620 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | |
621 pass->shared_quad_state_list.back(), | |
622 pass.get(), kYMirrorTransform); | |
623 | |
624 RenderPassList pass_list; | |
625 pass_list.push_back(pass.Pass()); | |
626 OverlayCandidateList candidate_list; | |
627 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | |
628 ASSERT_EQ(1U, pass_list.size()); | |
629 EXPECT_EQ(2U, candidate_list.size()); | |
630 } | |
631 | |
526 class OverlayInfoRendererGL : public GLRenderer { | 632 class OverlayInfoRendererGL : public GLRenderer { |
527 public: | 633 public: |
528 OverlayInfoRendererGL(RendererClient* client, | 634 OverlayInfoRendererGL(RendererClient* client, |
529 const RendererSettings* settings, | 635 const RendererSettings* settings, |
530 OutputSurface* output_surface, | 636 OutputSurface* output_surface, |
531 ResourceProvider* resource_provider) | 637 ResourceProvider* resource_provider) |
532 : GLRenderer(client, | 638 : GLRenderer(client, |
533 settings, | 639 settings, |
534 output_surface, | 640 output_surface, |
535 resource_provider, | 641 resource_provider, |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
807 renderer_->BeginDrawingFrame(&frame3); | 913 renderer_->BeginDrawingFrame(&frame3); |
808 renderer_->FinishDrawingFrame(&frame3); | 914 renderer_->FinishDrawingFrame(&frame3); |
809 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 915 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
810 SwapBuffers(); | 916 SwapBuffers(); |
811 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 917 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
812 Mock::VerifyAndClearExpectations(&scheduler_); | 918 Mock::VerifyAndClearExpectations(&scheduler_); |
813 } | 919 } |
814 | 920 |
815 } // namespace | 921 } // namespace |
816 } // namespace cc | 922 } // namespace cc |
OLD | NEW |