OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
11 #include "base/thread_task_runner_handle.h" | 11 #include "base/thread_task_runner_handle.h" |
12 #include "cc/base/math_util.h" | 12 #include "cc/base/math_util.h" |
13 #include "cc/output/compositor_frame_metadata.h" | 13 #include "cc/output/compositor_frame_metadata.h" |
14 #include "cc/output/copy_output_request.h" | 14 #include "cc/output/copy_output_request.h" |
15 #include "cc/output/copy_output_result.h" | 15 #include "cc/output/copy_output_result.h" |
16 #include "cc/output/overlay_strategy_single_on_top.h" | 16 #include "cc/output/overlay_strategy_single_on_top.h" |
| 17 #include "cc/output/overlay_strategy_underlay.h" |
17 #include "cc/output/texture_mailbox_deleter.h" | 18 #include "cc/output/texture_mailbox_deleter.h" |
18 #include "cc/quads/texture_draw_quad.h" | 19 #include "cc/quads/texture_draw_quad.h" |
19 #include "cc/resources/resource_provider.h" | 20 #include "cc/resources/resource_provider.h" |
20 #include "cc/test/fake_impl_proxy.h" | 21 #include "cc/test/fake_impl_proxy.h" |
21 #include "cc/test/fake_layer_tree_host_impl.h" | 22 #include "cc/test/fake_layer_tree_host_impl.h" |
22 #include "cc/test/fake_output_surface.h" | 23 #include "cc/test/fake_output_surface.h" |
23 #include "cc/test/fake_output_surface_client.h" | 24 #include "cc/test/fake_output_surface_client.h" |
24 #include "cc/test/fake_renderer_client.h" | 25 #include "cc/test/fake_renderer_client.h" |
25 #include "cc/test/fake_resource_provider.h" | 26 #include "cc/test/fake_resource_provider.h" |
26 #include "cc/test/pixel_test.h" | 27 #include "cc/test/pixel_test.h" |
(...skipping 1971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 EXPECT_EQ(1, other_callback_count); | 1999 EXPECT_EQ(1, other_callback_count); |
1999 } | 2000 } |
2000 #endif // OS_ANDROID | 2001 #endif // OS_ANDROID |
2001 | 2002 |
2002 class TestOverlayProcessor : public OverlayProcessor { | 2003 class TestOverlayProcessor : public OverlayProcessor { |
2003 public: | 2004 public: |
2004 class Strategy : public OverlayProcessor::Strategy { | 2005 class Strategy : public OverlayProcessor::Strategy { |
2005 public: | 2006 public: |
2006 Strategy() {} | 2007 Strategy() {} |
2007 ~Strategy() override {} | 2008 ~Strategy() override {} |
2008 MOCK_METHOD2(Attempt, | 2009 MOCK_METHOD3(Attempt, |
2009 bool(RenderPassList* render_passes_in_draw_order, | 2010 bool(RenderPassList* render_passes_in_draw_order, |
2010 OverlayCandidateList* candidates)); | 2011 OverlayCandidateList* candidates, |
| 2012 float device_scale_factor)); |
2011 }; | 2013 }; |
2012 | 2014 |
2013 explicit TestOverlayProcessor(OutputSurface* surface) | 2015 explicit TestOverlayProcessor(OutputSurface* surface) |
2014 : OverlayProcessor(surface) {} | 2016 : OverlayProcessor(surface) {} |
2015 ~TestOverlayProcessor() override {} | 2017 ~TestOverlayProcessor() override {} |
2016 void Initialize() override { | 2018 void Initialize() override { |
2017 strategy_ = new Strategy(); | 2019 strategy_ = new Strategy(); |
2018 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_)); | 2020 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_)); |
2019 } | 2021 } |
2020 | 2022 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2080 premultiplied_alpha, gfx::PointF(0, 0), | 2082 premultiplied_alpha, gfx::PointF(0, 0), |
2081 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 2083 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
2082 flipped, nearest_neighbor); | 2084 flipped, nearest_neighbor); |
2083 overlay_quad->set_allow_overlay(true); | 2085 overlay_quad->set_allow_overlay(true); |
2084 | 2086 |
2085 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. | 2087 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. |
2086 // Attempt will be called for each strategy in OverlayProcessor. We have | 2088 // Attempt will be called for each strategy in OverlayProcessor. We have |
2087 // added a fake strategy, so checking for Attempt calls checks if there was | 2089 // added a fake strategy, so checking for Attempt calls checks if there was |
2088 // any attempt to overlay, which there shouldn't be. We can't use the quad | 2090 // any attempt to overlay, which there shouldn't be. We can't use the quad |
2089 // list because the render pass is cleaned up by DrawFrame. | 2091 // list because the render pass is cleaned up by DrawFrame. |
2090 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0); | 2092 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); |
2091 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2093 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
2092 viewport_rect, false); | 2094 viewport_rect, false); |
2093 Mock::VerifyAndClearExpectations(processor->strategy_); | 2095 Mock::VerifyAndClearExpectations(processor->strategy_); |
2094 | 2096 |
2095 // Without a copy request Attempt() should be called once. | 2097 // Without a copy request Attempt() should be called once. |
2096 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 2098 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
2097 viewport_rect, gfx::Transform()); | 2099 viewport_rect, gfx::Transform()); |
2098 root_pass->has_transparent_background = false; | 2100 root_pass->has_transparent_background = false; |
2099 | 2101 |
2100 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2102 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
2101 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), | 2103 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), |
2102 viewport_rect, viewport_rect, viewport_rect, resource_id, | 2104 viewport_rect, viewport_rect, viewport_rect, resource_id, |
2103 premultiplied_alpha, gfx::PointF(0, 0), | 2105 premultiplied_alpha, gfx::PointF(0, 0), |
2104 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 2106 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
2105 flipped, nearest_neighbor); | 2107 flipped, nearest_neighbor); |
2106 | 2108 |
2107 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(1); | 2109 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); |
2108 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2110 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
2109 viewport_rect, false); | 2111 viewport_rect, false); |
2110 } | 2112 } |
2111 | 2113 |
2112 class SingleOverlayOnTopProcessor : public OverlayProcessor { | 2114 class SingleOverlayOnTopProcessor : public OverlayProcessor { |
2113 public: | 2115 public: |
2114 class SingleOverlayValidator : public OverlayCandidateValidator { | 2116 class SingleOverlayValidator : public OverlayCandidateValidator { |
2115 public: | 2117 public: |
| 2118 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 2119 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
| 2120 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); |
| 2121 strategies->push_back(scoped_ptr<OverlayProcessor::Strategy>( |
| 2122 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); |
| 2123 } |
| 2124 |
2116 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 2125 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
2117 ASSERT_EQ(2U, surfaces->size()); | 2126 ASSERT_EQ(2U, surfaces->size()); |
2118 OverlayCandidate& candidate = surfaces->back(); | 2127 OverlayCandidate& candidate = surfaces->back(); |
2119 candidate.overlay_handled = true; | 2128 candidate.overlay_handled = true; |
2120 } | 2129 } |
2121 }; | 2130 }; |
2122 | 2131 |
2123 explicit SingleOverlayOnTopProcessor(OutputSurface* surface) | 2132 explicit SingleOverlayOnTopProcessor(OutputSurface* surface) |
2124 : OverlayProcessor(surface) {} | 2133 : OverlayProcessor(surface) {} |
2125 | 2134 |
2126 void Initialize() override { | 2135 void Initialize() override { |
2127 strategies_.push_back( | 2136 strategies_.push_back(scoped_ptr<Strategy>(new OverlayStrategyCommon( |
2128 scoped_ptr<Strategy>(new OverlayStrategySingleOnTop(&validator_))); | 2137 &validator_, new OverlayStrategySingleOnTop))); |
2129 } | 2138 } |
2130 | 2139 |
2131 SingleOverlayValidator validator_; | 2140 SingleOverlayValidator validator_; |
2132 }; | 2141 }; |
2133 | 2142 |
2134 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D { | 2143 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D { |
2135 public: | 2144 public: |
2136 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point)); | 2145 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point)); |
2137 }; | 2146 }; |
2138 | 2147 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2216 EXPECT_CALL(overlay_scheduler, | 2225 EXPECT_CALL(overlay_scheduler, |
2217 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, | 2226 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, |
2218 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); | 2227 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); |
2219 | 2228 |
2220 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2229 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
2221 viewport_rect, false); | 2230 viewport_rect, false); |
2222 } | 2231 } |
2223 | 2232 |
2224 } // namespace | 2233 } // namespace |
2225 } // namespace cc | 2234 } // namespace cc |
OLD | NEW |