| 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" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 using testing::_; | 29 using testing::_; |
| 30 using testing::Mock; | 30 using testing::Mock; |
| 31 | 31 |
| 32 namespace cc { | 32 namespace cc { |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 const gfx::Size kDisplaySize(256, 256); | 35 const gfx::Size kDisplaySize(256, 256); |
| 36 const gfx::Rect kOverlayRect(0, 0, 128, 128); | 36 const gfx::Rect kOverlayRect(0, 0, 128, 128); |
| 37 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); | 37 const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); |
| 38 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); | 38 const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); |
| 39 const gfx::Rect kOverlayClipRect(0, 0, 128, 128); |
| 39 const gfx::PointF kUVTopLeft(0.1f, 0.2f); | 40 const gfx::PointF kUVTopLeft(0.1f, 0.2f); |
| 40 const gfx::PointF kUVBottomRight(1.0f, 1.0f); | 41 const gfx::PointF kUVBottomRight(1.0f, 1.0f); |
| 41 const gfx::Transform kNormalTransform = | 42 const gfx::Transform kNormalTransform = |
| 42 gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. | 43 gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. |
| 43 const gfx::Transform kXMirrorTransform = | 44 const gfx::Transform kXMirrorTransform = |
| 44 gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. | 45 gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. |
| 45 const gfx::Transform kYMirrorTransform = | 46 const gfx::Transform kYMirrorTransform = |
| 46 gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. | 47 gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. |
| 47 const gfx::Transform kBothMirrorTransform = | 48 const gfx::Transform kBothMirrorTransform = |
| 48 gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. | 49 gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 59 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 60 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 60 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 61 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
| 61 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); | 62 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); |
| 62 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( | 63 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
| 63 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); | 64 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); |
| 64 } | 65 } |
| 65 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 66 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 66 ASSERT_EQ(2U, surfaces->size()); | 67 ASSERT_EQ(2U, surfaces->size()); |
| 67 | 68 |
| 68 OverlayCandidate& candidate = surfaces->back(); | 69 OverlayCandidate& candidate = surfaces->back(); |
| 70 if (candidate.is_clipped && |
| 71 !candidate.clip_rect.Contains(candidate.quad_rect_in_target_space)) |
| 72 return; |
| 69 if (candidate.display_rect.width() == 64) { | 73 if (candidate.display_rect.width() == 64) { |
| 70 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect); | 74 EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect); |
| 71 } else { | 75 } else { |
| 72 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 76 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); |
| 73 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 77 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); |
| 74 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 78 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); |
| 75 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | 79 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), |
| 76 0.01f); | 80 0.01f); |
| 77 } | 81 } |
| 78 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), | 82 EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), |
| (...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 745 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
| 742 | 746 |
| 743 RenderPassList pass_list; | 747 RenderPassList pass_list; |
| 744 pass_list.push_back(pass.Pass()); | 748 pass_list.push_back(pass.Pass()); |
| 745 OverlayCandidateList candidate_list; | 749 OverlayCandidateList candidate_list; |
| 746 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 750 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 747 ASSERT_EQ(1U, pass_list.size()); | 751 ASSERT_EQ(1U, pass_list.size()); |
| 748 EXPECT_EQ(0U, candidate_list.size()); | 752 EXPECT_EQ(0U, candidate_list.size()); |
| 749 } | 753 } |
| 750 | 754 |
| 755 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
| 756 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 757 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 758 pass->shared_quad_state_list.back(), |
| 759 pass.get()); |
| 760 pass->shared_quad_state_list.back()->is_clipped = true; |
| 761 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 762 |
| 763 RenderPassList pass_list; |
| 764 pass_list.push_back(pass.Pass()); |
| 765 OverlayCandidateList candidate_list; |
| 766 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 767 ASSERT_EQ(1U, pass_list.size()); |
| 768 EXPECT_EQ(2U, candidate_list.size()); |
| 769 } |
| 770 |
| 751 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 771 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
| 752 gfx::Rect rect = kOverlayRect; | 772 gfx::Rect rect = kOverlayRect; |
| 753 rect.set_width(rect.width() / 2); | 773 rect.set_width(rect.width() / 2); |
| 754 rect.Offset(0, -rect.height()); | 774 rect.Offset(0, -rect.height()); |
| 755 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 775 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 756 CreateCandidateQuadAt(resource_provider_.get(), | 776 CreateCandidateQuadAt(resource_provider_.get(), |
| 757 pass->shared_quad_state_list.back(), pass.get(), rect); | 777 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 758 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 778 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 759 -1.0f); | 779 -1.0f); |
| 760 | 780 |
| (...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1482 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1502 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1483 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1503 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1484 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1504 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1485 SwapBuffers(); | 1505 SwapBuffers(); |
| 1486 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1506 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1487 Mock::VerifyAndClearExpectations(&scheduler_); | 1507 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1488 } | 1508 } |
| 1489 | 1509 |
| 1490 } // namespace | 1510 } // namespace |
| 1491 } // namespace cc | 1511 } // namespace cc |
| OLD | NEW |