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/region.h" | 5 #include "cc/base/region.h" |
6 #include "cc/base/scoped_ptr_vector.h" | 6 #include "cc/base/scoped_ptr_vector.h" |
7 #include "cc/output/compositor_frame_metadata.h" | 7 #include "cc/output/compositor_frame_metadata.h" |
8 #include "cc/output/gl_renderer.h" | 8 #include "cc/output/gl_renderer.h" |
9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 using testing::_; | 31 using testing::_; |
32 using testing::Mock; | 32 using testing::Mock; |
33 | 33 |
34 namespace cc { | 34 namespace cc { |
35 namespace { | 35 namespace { |
36 | 36 |
37 const gfx::Size kDisplaySize(256, 256); | 37 const gfx::Size kDisplaySize(256, 256); |
38 const gfx::Rect kOverlayRect(0, 0, 128, 128); | 38 const gfx::Rect kOverlayRect(0, 0, 128, 128); |
39 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); | 39 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); |
40 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); | 40 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); |
| 41 const gfx::Rect kOverlayClipRect(0, 0, 128, 128); |
41 const gfx::PointF kUVTopLeft(0.1f, 0.2f); | 42 const gfx::PointF kUVTopLeft(0.1f, 0.2f); |
42 const gfx::PointF kUVBottomRight(1.0f, 1.0f); | 43 const gfx::PointF kUVBottomRight(1.0f, 1.0f); |
43 const gfx::Transform kNormalTransform = | 44 const gfx::Transform kNormalTransform = |
44 gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. | 45 gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. |
45 const gfx::Transform kXMirrorTransform = | 46 const gfx::Transform kXMirrorTransform = |
46 gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. | 47 gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. |
47 const gfx::Transform kYMirrorTransform = | 48 const gfx::Transform kYMirrorTransform = |
48 gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. | 49 gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. |
49 const gfx::Transform kBothMirrorTransform = | 50 const gfx::Transform kBothMirrorTransform = |
50 gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. | 51 gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. |
(...skipping 21 matching lines...) Expand all Loading... |
72 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); | 73 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); |
73 } else { | 74 } else { |
74 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 75 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); |
75 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 76 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); |
76 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 77 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); |
77 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | 78 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), |
78 0.01f); | 79 0.01f); |
79 } | 80 } |
80 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 81 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
81 candidate.uv_rect); | 82 candidate.uv_rect); |
| 83 if (!candidate.clip_rect.IsEmpty()) { |
| 84 EXPECT_EQ(true, candidate.is_clipped); |
| 85 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); |
| 86 } |
82 candidate.overlay_handled = true; | 87 candidate.overlay_handled = true; |
83 } | 88 } |
84 }; | 89 }; |
85 | 90 |
86 class SandwichOverlayValidator : public OverlayCandidateValidator { | 91 class SandwichOverlayValidator : public OverlayCandidateValidator { |
87 public: | 92 public: |
88 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 93 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
89 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 94 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
90 new OverlayStrategyCommon(this, new OverlayStrategySandwich))); | 95 new OverlayStrategyCommon(this, new OverlayStrategySandwich))); |
91 } | 96 } |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 878 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
874 | 879 |
875 RenderPassList pass_list; | 880 RenderPassList pass_list; |
876 pass_list.push_back(pass.Pass()); | 881 pass_list.push_back(pass.Pass()); |
877 OverlayCandidateList candidate_list; | 882 OverlayCandidateList candidate_list; |
878 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 883 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
879 ASSERT_EQ(1U, pass_list.size()); | 884 ASSERT_EQ(1U, pass_list.size()); |
880 EXPECT_EQ(0U, candidate_list.size()); | 885 EXPECT_EQ(0U, candidate_list.size()); |
881 } | 886 } |
882 | 887 |
| 888 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 889 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 890 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 891 pass->shared_quad_state_list.back(), |
| 892 pass.get()); |
| 893 pass->shared_quad_state_list.back()->is_clipped = true; |
| 894 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 895 |
| 896 RenderPassList pass_list; |
| 897 pass_list.push_back(pass.Pass()); |
| 898 OverlayCandidateList candidate_list; |
| 899 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 900 ASSERT_EQ(1U, pass_list.size()); |
| 901 EXPECT_EQ(2U, candidate_list.size()); |
| 902 } |
| 903 |
883 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 904 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
884 gfx::Rect rect = kOverlayRect; | 905 gfx::Rect rect = kOverlayRect; |
885 rect.set_width(rect.width() / 2); | 906 rect.set_width(rect.width() / 2); |
886 rect.Offset(0, -rect.height()); | 907 rect.Offset(0, -rect.height()); |
887 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 908 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
888 CreateCandidateQuadAt(resource_provider_.get(), | 909 CreateCandidateQuadAt(resource_provider_.get(), |
889 pass->shared_quad_state_list.back(), pass.get(), rect); | 910 pass->shared_quad_state_list.back(), pass.get(), rect); |
890 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 911 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
891 -1.0f); | 912 -1.0f); |
892 | 913 |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1614 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1635 renderer_->BeginDrawingFrame(&frame_no_overlays); |
1615 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1636 renderer_->FinishDrawingFrame(&frame_no_overlays); |
1616 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1637 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1617 SwapBuffers(); | 1638 SwapBuffers(); |
1618 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1639 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1619 Mock::VerifyAndClearExpectations(&scheduler_); | 1640 Mock::VerifyAndClearExpectations(&scheduler_); |
1620 } | 1641 } |
1621 | 1642 |
1622 } // namespace | 1643 } // namespace |
1623 } // namespace cc | 1644 } // namespace cc |
OLD | NEW |