| 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" |
| (...skipping 1989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2000 EXPECT_EQ(1, other_callback_count); | 2000 EXPECT_EQ(1, other_callback_count); |
| 2001 } | 2001 } |
| 2002 #endif // OS_ANDROID | 2002 #endif // OS_ANDROID |
| 2003 | 2003 |
| 2004 class TestOverlayProcessor : public OverlayProcessor { | 2004 class TestOverlayProcessor : public OverlayProcessor { |
| 2005 public: | 2005 public: |
| 2006 class Strategy : public OverlayProcessor::Strategy { | 2006 class Strategy : public OverlayProcessor::Strategy { |
| 2007 public: | 2007 public: |
| 2008 Strategy() {} | 2008 Strategy() {} |
| 2009 ~Strategy() override {} | 2009 ~Strategy() override {} |
| 2010 MOCK_METHOD2(Attempt, | 2010 MOCK_METHOD3(Attempt, |
| 2011 bool(RenderPassList* render_passes, | 2011 bool(ResourceProvider* resource_provider, |
| 2012 RenderPassList* render_passes, |
| 2012 OverlayCandidateList* candidates)); | 2013 OverlayCandidateList* candidates)); |
| 2013 }; | 2014 }; |
| 2014 | 2015 |
| 2015 explicit TestOverlayProcessor(OutputSurface* surface) | 2016 explicit TestOverlayProcessor(OutputSurface* surface) |
| 2016 : OverlayProcessor(surface) {} | 2017 : OverlayProcessor(surface) {} |
| 2017 ~TestOverlayProcessor() override {} | 2018 ~TestOverlayProcessor() override {} |
| 2018 void Initialize() override { | 2019 void Initialize() override { |
| 2019 strategy_ = new Strategy(); | 2020 strategy_ = new Strategy(); |
| 2020 strategies_.push_back(make_scoped_ptr(strategy_)); | 2021 strategies_.push_back(make_scoped_ptr(strategy_)); |
| 2021 } | 2022 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2058 gfx::Rect viewport_rect(1, 1); | 2059 gfx::Rect viewport_rect(1, 1); |
| 2059 RenderPass* root_pass = | 2060 RenderPass* root_pass = |
| 2060 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 2061 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 2061 viewport_rect, gfx::Transform()); | 2062 viewport_rect, gfx::Transform()); |
| 2062 root_pass->has_transparent_background = false; | 2063 root_pass->has_transparent_background = false; |
| 2063 root_pass->copy_requests.push_back( | 2064 root_pass->copy_requests.push_back( |
| 2064 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); | 2065 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); |
| 2065 | 2066 |
| 2066 unsigned sync_point = 0; | 2067 unsigned sync_point = 0; |
| 2067 TextureMailbox mailbox = | 2068 TextureMailbox mailbox = |
| 2068 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); | 2069 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point, |
| 2070 gfx::Size(256, 256), true); |
| 2069 scoped_ptr<SingleReleaseCallbackImpl> release_callback = | 2071 scoped_ptr<SingleReleaseCallbackImpl> release_callback = |
| 2070 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 2072 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 2071 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( | 2073 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( |
| 2072 mailbox, release_callback.Pass()); | 2074 mailbox, release_callback.Pass()); |
| 2073 bool premultiplied_alpha = false; | 2075 bool premultiplied_alpha = false; |
| 2074 bool flipped = false; | 2076 bool flipped = false; |
| 2075 bool nearest_neighbor = false; | 2077 bool nearest_neighbor = false; |
| 2076 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 2078 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2077 | 2079 |
| 2078 TextureDrawQuad* overlay_quad = | 2080 TextureDrawQuad* overlay_quad = |
| 2079 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2081 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2080 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), | 2082 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), |
| 2081 viewport_rect, viewport_rect, viewport_rect, resource_id, | 2083 viewport_rect, viewport_rect, viewport_rect, resource_id, |
| 2082 premultiplied_alpha, gfx::PointF(0, 0), | 2084 premultiplied_alpha, gfx::PointF(0, 0), |
| 2083 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 2085 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
| 2084 flipped, nearest_neighbor); | 2086 flipped, nearest_neighbor); |
| 2085 overlay_quad->set_allow_overlay(true); | |
| 2086 | 2087 |
| 2087 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. | 2088 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. |
| 2088 // Attempt will be called for each strategy in OverlayProcessor. We have | 2089 // Attempt will be called for each strategy in OverlayProcessor. We have |
| 2089 // added a fake strategy, so checking for Attempt calls checks if there was | 2090 // added a fake strategy, so checking for Attempt calls checks if there was |
| 2090 // any attempt to overlay, which there shouldn't be. We can't use the quad | 2091 // any attempt to overlay, which there shouldn't be. We can't use the quad |
| 2091 // list because the render pass is cleaned up by DrawFrame. | 2092 // list because the render pass is cleaned up by DrawFrame. |
| 2092 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0); | 2093 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); |
| 2093 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2094 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
| 2094 viewport_rect, false); | 2095 viewport_rect, false); |
| 2095 Mock::VerifyAndClearExpectations(processor->strategy_); | 2096 Mock::VerifyAndClearExpectations(processor->strategy_); |
| 2096 | 2097 |
| 2097 // Without a copy request Attempt() should be called once. | 2098 // Without a copy request Attempt() should be called once. |
| 2098 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 2099 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 2099 viewport_rect, gfx::Transform()); | 2100 viewport_rect, gfx::Transform()); |
| 2100 root_pass->has_transparent_background = false; | 2101 root_pass->has_transparent_background = false; |
| 2101 | 2102 |
| 2102 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2103 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2103 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), | 2104 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), |
| 2104 viewport_rect, viewport_rect, viewport_rect, resource_id, | 2105 viewport_rect, viewport_rect, viewport_rect, resource_id, |
| 2105 premultiplied_alpha, gfx::PointF(0, 0), | 2106 premultiplied_alpha, gfx::PointF(0, 0), |
| 2106 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 2107 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
| 2107 flipped, nearest_neighbor); | 2108 flipped, nearest_neighbor); |
| 2108 | 2109 |
| 2109 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(1); | 2110 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); |
| 2110 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2111 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
| 2111 viewport_rect, false); | 2112 viewport_rect, false); |
| 2112 } | 2113 } |
| 2113 | 2114 |
| 2114 class SingleOverlayOnTopProcessor : public OverlayProcessor { | 2115 class SingleOverlayOnTopProcessor : public OverlayProcessor { |
| 2115 public: | 2116 public: |
| 2116 class SingleOverlayValidator : public OverlayCandidateValidator { | 2117 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 2117 public: | 2118 public: |
| 2118 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 2119 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 2119 strategies->push_back( | 2120 strategies->push_back( |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2188 renderer.SetOverlayProcessor(processor); | 2189 renderer.SetOverlayProcessor(processor); |
| 2189 | 2190 |
| 2190 gfx::Rect viewport_rect(1, 1); | 2191 gfx::Rect viewport_rect(1, 1); |
| 2191 RenderPass* root_pass = | 2192 RenderPass* root_pass = |
| 2192 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 2193 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 2193 viewport_rect, gfx::Transform()); | 2194 viewport_rect, gfx::Transform()); |
| 2194 root_pass->has_transparent_background = false; | 2195 root_pass->has_transparent_background = false; |
| 2195 | 2196 |
| 2196 unsigned sync_point = 29; | 2197 unsigned sync_point = 29; |
| 2197 TextureMailbox mailbox = | 2198 TextureMailbox mailbox = |
| 2198 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); | 2199 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point, |
| 2200 gfx::Size(256, 256), true); |
| 2199 scoped_ptr<SingleReleaseCallbackImpl> release_callback = | 2201 scoped_ptr<SingleReleaseCallbackImpl> release_callback = |
| 2200 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 2202 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 2201 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( | 2203 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( |
| 2202 mailbox, release_callback.Pass()); | 2204 mailbox, release_callback.Pass()); |
| 2203 bool premultiplied_alpha = false; | 2205 bool premultiplied_alpha = false; |
| 2204 bool flipped = false; | 2206 bool flipped = false; |
| 2205 bool nearest_neighbor = false; | 2207 bool nearest_neighbor = false; |
| 2206 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 2208 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2207 gfx::PointF uv_top_left(0, 0); | 2209 gfx::PointF uv_top_left(0, 0); |
| 2208 gfx::PointF uv_bottom_right(1, 1); | 2210 gfx::PointF uv_bottom_right(1, 1); |
| 2209 | 2211 |
| 2210 TextureDrawQuad* overlay_quad = | 2212 TextureDrawQuad* overlay_quad = |
| 2211 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2213 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2212 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); | 2214 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); |
| 2213 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect, | 2215 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect, |
| 2214 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0); | 2216 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0); |
| 2215 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect, | 2217 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect, |
| 2216 viewport_rect, resource_id, premultiplied_alpha, | 2218 viewport_rect, resource_id, premultiplied_alpha, |
| 2217 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, | 2219 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, |
| 2218 vertex_opacity, flipped, nearest_neighbor); | 2220 vertex_opacity, flipped, nearest_neighbor); |
| 2219 overlay_quad->set_allow_overlay(true); | |
| 2220 | 2221 |
| 2221 // Verify that overlay_quad actually gets turned into an overlay, and even | 2222 // Verify that overlay_quad actually gets turned into an overlay, and even |
| 2222 // though it's not drawn, that its sync point is waited on. | 2223 // though it's not drawn, that its sync point is waited on. |
| 2223 EXPECT_CALL(*context, waitSyncPoint(sync_point)).Times(1); | 2224 EXPECT_CALL(*context, waitSyncPoint(sync_point)).Times(1); |
| 2224 EXPECT_CALL(overlay_scheduler, | 2225 EXPECT_CALL(overlay_scheduler, |
| 2225 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, | 2226 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, |
| 2226 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); | 2227 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); |
| 2227 | 2228 |
| 2228 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2229 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
| 2229 viewport_rect, false); | 2230 viewport_rect, false); |
| 2230 } | 2231 } |
| 2231 | 2232 |
| 2232 } // namespace | 2233 } // namespace |
| 2233 } // namespace cc | 2234 } // namespace cc |
| OLD | NEW |