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

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

Issue 855403002: cc: Change the restrictions on overlays for video (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove DEBUG_BORDER skip Created 5 years, 11 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
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"
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
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
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
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
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
OLDNEW
« cc/output/overlay_strategy_single_on_top.cc ('K') | « 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