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

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

Issue 1142343008: cc: Rework overlays to not use the ResourceProvider and pass texture size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix more tests Created 5 years, 6 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 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 2011 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 public: 2022 public:
2023 class Strategy : public OverlayProcessor::Strategy { 2023 class Strategy : public OverlayProcessor::Strategy {
2024 public: 2024 public:
2025 Strategy() {} 2025 Strategy() {}
2026 ~Strategy() override {} 2026 ~Strategy() override {}
2027 MOCK_METHOD2(Attempt, 2027 MOCK_METHOD2(Attempt,
2028 bool(RenderPassList* render_passes_in_draw_order, 2028 bool(RenderPassList* render_passes_in_draw_order,
2029 OverlayCandidateList* candidates)); 2029 OverlayCandidateList* candidates));
2030 }; 2030 };
2031 2031
2032 TestOverlayProcessor(OutputSurface* surface, 2032 explicit TestOverlayProcessor(OutputSurface* surface)
2033 ResourceProvider* resource_provider) 2033 : OverlayProcessor(surface) {}
2034 : OverlayProcessor(surface, resource_provider) {}
2035 ~TestOverlayProcessor() override {} 2034 ~TestOverlayProcessor() override {}
2036 void Initialize() override { 2035 void Initialize() override {
2037 strategy_ = new Strategy(); 2036 strategy_ = new Strategy();
2038 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_)); 2037 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_));
2039 } 2038 }
2040 2039
2041 Strategy* strategy_; 2040 Strategy* strategy_;
2042 }; 2041 };
2043 2042
2044 void MailboxReleased(unsigned sync_point, 2043 void MailboxReleased(unsigned sync_point,
(...skipping 17 matching lines...) Expand all
2062 output_surface.get(), shared_bitmap_manager.get()); 2061 output_surface.get(), shared_bitmap_manager.get());
2063 scoped_ptr<TextureMailboxDeleter> mailbox_deleter( 2062 scoped_ptr<TextureMailboxDeleter> mailbox_deleter(
2064 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get())); 2063 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get()));
2065 2064
2066 RendererSettings settings; 2065 RendererSettings settings;
2067 FakeRendererClient renderer_client; 2066 FakeRendererClient renderer_client;
2068 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(), 2067 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(),
2069 resource_provider.get(), mailbox_deleter.get()); 2068 resource_provider.get(), mailbox_deleter.get());
2070 2069
2071 TestOverlayProcessor* processor = 2070 TestOverlayProcessor* processor =
2072 new TestOverlayProcessor(output_surface.get(), resource_provider.get()); 2071 new TestOverlayProcessor(output_surface.get());
2073 processor->Initialize(); 2072 processor->Initialize();
2074 renderer.SetOverlayProcessor(processor); 2073 renderer.SetOverlayProcessor(processor);
2075 2074
2076 gfx::Rect viewport_rect(1, 1); 2075 gfx::Rect viewport_rect(1, 1);
2077 TestRenderPass* root_pass = 2076 TestRenderPass* root_pass =
2078 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), 2077 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0),
2079 viewport_rect, gfx::Transform()); 2078 viewport_rect, gfx::Transform());
2080 root_pass->has_transparent_background = false; 2079 root_pass->has_transparent_background = false;
2081 root_pass->copy_requests.push_back( 2080 root_pass->copy_requests.push_back(
2082 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); 2081 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult)));
2083 2082
2084 unsigned sync_point = 0; 2083 unsigned sync_point = 0;
2085 TextureMailbox mailbox = 2084 TextureMailbox mailbox =
2086 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 2085 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
2087 mailbox.set_allow_overlay(true);
2088 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 2086 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
2089 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); 2087 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
2090 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( 2088 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox(
2091 mailbox, release_callback.Pass()); 2089 mailbox, release_callback.Pass());
2092 bool premultiplied_alpha = false; 2090 bool premultiplied_alpha = false;
2093 bool flipped = false; 2091 bool flipped = false;
2094 bool nearest_neighbor = false; 2092 bool nearest_neighbor = false;
2095 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2093 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2096 2094
2097 TextureDrawQuad* overlay_quad = 2095 TextureDrawQuad* overlay_quad =
2098 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2096 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2099 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), 2097 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(),
2100 viewport_rect, viewport_rect, viewport_rect, resource_id, 2098 viewport_rect, viewport_rect, viewport_rect, resource_id,
2101 premultiplied_alpha, gfx::PointF(0, 0), 2099 premultiplied_alpha, gfx::PointF(0, 0),
2102 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, 2100 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity,
2103 flipped, nearest_neighbor); 2101 flipped, nearest_neighbor);
2102 overlay_quad->set_allow_overlay(true);
2104 2103
2105 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. 2104 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays.
2106 // Attempt will be called for each strategy in OverlayProcessor. We have 2105 // Attempt will be called for each strategy in OverlayProcessor. We have
2107 // added a fake strategy, so checking for Attempt calls checks if there was 2106 // added a fake strategy, so checking for Attempt calls checks if there was
2108 // any attempt to overlay, which there shouldn't be. We can't use the quad 2107 // any attempt to overlay, which there shouldn't be. We can't use the quad
2109 // list because the render pass is cleaned up by DrawFrame. 2108 // list because the render pass is cleaned up by DrawFrame.
2110 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0); 2109 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0);
2111 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, 2110 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect,
2112 viewport_rect, false); 2111 viewport_rect, false);
2113 Mock::VerifyAndClearExpectations(processor->strategy_); 2112 Mock::VerifyAndClearExpectations(processor->strategy_);
(...skipping 19 matching lines...) Expand all
2133 public: 2132 public:
2134 class SingleOverlayValidator : public OverlayCandidateValidator { 2133 class SingleOverlayValidator : public OverlayCandidateValidator {
2135 public: 2134 public:
2136 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { 2135 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
2137 ASSERT_EQ(2U, surfaces->size()); 2136 ASSERT_EQ(2U, surfaces->size());
2138 OverlayCandidate& candidate = surfaces->back(); 2137 OverlayCandidate& candidate = surfaces->back();
2139 candidate.overlay_handled = true; 2138 candidate.overlay_handled = true;
2140 } 2139 }
2141 }; 2140 };
2142 2141
2143 SingleOverlayOnTopProcessor(OutputSurface* surface, 2142 explicit SingleOverlayOnTopProcessor(OutputSurface* surface)
2144 ResourceProvider* resource_provider) 2143 : OverlayProcessor(surface) {}
2145 : OverlayProcessor(surface, resource_provider) {}
2146 2144
2147 void Initialize() override { 2145 void Initialize() override {
2148 strategies_.push_back(scoped_ptr<Strategy>( 2146 strategies_.push_back(
2149 new OverlayStrategySingleOnTop(&validator_, resource_provider_))); 2147 scoped_ptr<Strategy>(new OverlayStrategySingleOnTop(&validator_)));
2150 } 2148 }
2151 2149
2152 SingleOverlayValidator validator_; 2150 SingleOverlayValidator validator_;
2153 }; 2151 };
2154 2152
2155 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D { 2153 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D {
2156 public: 2154 public:
2157 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point)); 2155 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point));
2158 }; 2156 };
2159 2157
(...skipping 28 matching lines...) Expand all
2188 scoped_ptr<ResourceProvider> resource_provider = FakeResourceProvider::Create( 2186 scoped_ptr<ResourceProvider> resource_provider = FakeResourceProvider::Create(
2189 output_surface.get(), shared_bitmap_manager.get()); 2187 output_surface.get(), shared_bitmap_manager.get());
2190 scoped_ptr<TextureMailboxDeleter> mailbox_deleter( 2188 scoped_ptr<TextureMailboxDeleter> mailbox_deleter(
2191 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get())); 2189 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get()));
2192 2190
2193 RendererSettings settings; 2191 RendererSettings settings;
2194 FakeRendererClient renderer_client; 2192 FakeRendererClient renderer_client;
2195 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(), 2193 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(),
2196 resource_provider.get(), mailbox_deleter.get()); 2194 resource_provider.get(), mailbox_deleter.get());
2197 2195
2198 SingleOverlayOnTopProcessor* processor = new SingleOverlayOnTopProcessor( 2196 SingleOverlayOnTopProcessor* processor =
2199 output_surface.get(), resource_provider.get()); 2197 new SingleOverlayOnTopProcessor(output_surface.get());
2200 processor->Initialize(); 2198 processor->Initialize();
2201 renderer.SetOverlayProcessor(processor); 2199 renderer.SetOverlayProcessor(processor);
2202 2200
2203 gfx::Rect viewport_rect(1, 1); 2201 gfx::Rect viewport_rect(1, 1);
2204 TestRenderPass* root_pass = 2202 TestRenderPass* root_pass =
2205 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), 2203 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0),
2206 viewport_rect, gfx::Transform()); 2204 viewport_rect, gfx::Transform());
2207 root_pass->has_transparent_background = false; 2205 root_pass->has_transparent_background = false;
2208 2206
2209 unsigned sync_point = TestRenderPass::kSyncPointForMailboxTextureQuad; 2207 unsigned sync_point = TestRenderPass::kSyncPointForMailboxTextureQuad;
2210 TextureMailbox mailbox = 2208 TextureMailbox mailbox =
2211 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 2209 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
2212 mailbox.set_allow_overlay(true);
2213 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 2210 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
2214 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); 2211 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
2215 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( 2212 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox(
2216 mailbox, release_callback.Pass()); 2213 mailbox, release_callback.Pass());
2217 bool premultiplied_alpha = false; 2214 bool premultiplied_alpha = false;
2218 bool flipped = false; 2215 bool flipped = false;
2219 bool nearest_neighbor = false; 2216 bool nearest_neighbor = false;
2220 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2217 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2221 gfx::PointF uv_top_left(0, 0); 2218 gfx::PointF uv_top_left(0, 0);
2222 gfx::PointF uv_bottom_right(1, 1); 2219 gfx::PointF uv_bottom_right(1, 1);
2223 2220
2224 TextureDrawQuad* overlay_quad = 2221 TextureDrawQuad* overlay_quad =
2225 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2222 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2226 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); 2223 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState();
2227 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect, 2224 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect,
2228 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0); 2225 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0);
2229 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect, 2226 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect,
2230 viewport_rect, resource_id, premultiplied_alpha, 2227 viewport_rect, resource_id, premultiplied_alpha,
2231 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, 2228 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT,
2232 vertex_opacity, flipped, nearest_neighbor); 2229 vertex_opacity, flipped, nearest_neighbor);
2230 overlay_quad->set_allow_overlay(true);
2233 2231
2234 // Verify that overlay_quad actually gets turned into an overlay, and even 2232 // Verify that overlay_quad actually gets turned into an overlay, and even
2235 // though it's not drawn, that its sync point is waited on. 2233 // though it's not drawn, that its sync point is waited on.
2236 EXPECT_CALL(*context, 2234 EXPECT_CALL(*context,
2237 waitSyncPoint(TestRenderPass::kSyncPointForMailboxTextureQuad)) 2235 waitSyncPoint(TestRenderPass::kSyncPointForMailboxTextureQuad))
2238 .Times(1); 2236 .Times(1);
2239 EXPECT_CALL(overlay_scheduler, 2237 EXPECT_CALL(overlay_scheduler,
2240 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, 2238 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect,
2241 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); 2239 BoundingRect(uv_top_left, uv_bottom_right))).Times(1);
2242 2240
2243 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, 2241 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect,
2244 viewport_rect, false); 2242 viewport_rect, false);
2245 } 2243 }
2246 2244
2247 } // namespace 2245 } // namespace
2248 } // namespace cc 2246 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698