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

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: 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 2092 matching lines...) Expand 10 before | Expand all | Expand 10 after
2103 public: 2103 public:
2104 class Strategy : public OverlayProcessor::Strategy { 2104 class Strategy : public OverlayProcessor::Strategy {
2105 public: 2105 public:
2106 Strategy() {} 2106 Strategy() {}
2107 ~Strategy() override {} 2107 ~Strategy() override {}
2108 MOCK_METHOD2(Attempt, 2108 MOCK_METHOD2(Attempt,
2109 bool(RenderPassList* render_passes_in_draw_order, 2109 bool(RenderPassList* render_passes_in_draw_order,
2110 OverlayCandidateList* candidates)); 2110 OverlayCandidateList* candidates));
2111 }; 2111 };
2112 2112
2113 TestOverlayProcessor(OutputSurface* surface, 2113 TestOverlayProcessor(OutputSurface* surface) : OverlayProcessor(surface) {}
2114 ResourceProvider* resource_provider)
2115 : OverlayProcessor(surface, resource_provider) {}
2116 ~TestOverlayProcessor() override {} 2114 ~TestOverlayProcessor() override {}
2117 void Initialize() override { 2115 void Initialize() override {
2118 strategy_ = new Strategy(); 2116 strategy_ = new Strategy();
2119 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_)); 2117 strategies_.push_back(scoped_ptr<OverlayProcessor::Strategy>(strategy_));
2120 } 2118 }
2121 2119
2122 Strategy* strategy_; 2120 Strategy* strategy_;
2123 }; 2121 };
2124 2122
2125 void MailboxReleased(unsigned sync_point, 2123 void MailboxReleased(unsigned sync_point,
(...skipping 18 matching lines...) Expand all
2144 1)); 2142 1));
2145 scoped_ptr<TextureMailboxDeleter> mailbox_deleter( 2143 scoped_ptr<TextureMailboxDeleter> mailbox_deleter(
2146 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get())); 2144 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get()));
2147 2145
2148 RendererSettings settings; 2146 RendererSettings settings;
2149 FakeRendererClient renderer_client; 2147 FakeRendererClient renderer_client;
2150 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(), 2148 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(),
2151 resource_provider.get(), mailbox_deleter.get()); 2149 resource_provider.get(), mailbox_deleter.get());
2152 2150
2153 TestOverlayProcessor* processor = 2151 TestOverlayProcessor* processor =
2154 new TestOverlayProcessor(output_surface.get(), resource_provider.get()); 2152 new TestOverlayProcessor(output_surface.get());
2155 processor->Initialize(); 2153 processor->Initialize();
2156 renderer.SetOverlayProcessor(processor); 2154 renderer.SetOverlayProcessor(processor);
2157 2155
2158 gfx::Rect viewport_rect(1, 1); 2156 gfx::Rect viewport_rect(1, 1);
2159 TestRenderPass* root_pass = 2157 TestRenderPass* root_pass =
2160 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), 2158 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0),
2161 viewport_rect, gfx::Transform()); 2159 viewport_rect, gfx::Transform());
2162 root_pass->has_transparent_background = false; 2160 root_pass->has_transparent_background = false;
2163 root_pass->copy_requests.push_back( 2161 root_pass->copy_requests.push_back(
2164 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); 2162 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult)));
2165 2163
2166 unsigned sync_point = 0; 2164 unsigned sync_point = 0;
2167 TextureMailbox mailbox = 2165 TextureMailbox mailbox =
2168 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 2166 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
2169 mailbox.set_allow_overlay(true);
2170 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 2167 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
2171 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); 2168 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
2172 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( 2169 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox(
2173 mailbox, release_callback.Pass()); 2170 mailbox, release_callback.Pass());
2174 bool premultiplied_alpha = false; 2171 bool premultiplied_alpha = false;
2175 bool flipped = false; 2172 bool flipped = false;
2176 bool nearest_neighbor = false; 2173 bool nearest_neighbor = false;
2177 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2174 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2178 2175
2179 TextureDrawQuad* overlay_quad = 2176 TextureDrawQuad* overlay_quad =
2180 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2177 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2181 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), 2178 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(),
2182 viewport_rect, viewport_rect, viewport_rect, resource_id, 2179 viewport_rect, viewport_rect, viewport_rect, resource_id,
2183 premultiplied_alpha, gfx::PointF(0, 0), 2180 premultiplied_alpha, gfx::PointF(0, 0),
2184 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, 2181 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity,
2185 flipped, nearest_neighbor); 2182 flipped, nearest_neighbor);
2183 overlay_quad->allow_overlay = true;
2186 2184
2187 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. 2185 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays.
2188 // Attempt will be called for each strategy in OverlayProcessor. We have 2186 // Attempt will be called for each strategy in OverlayProcessor. We have
2189 // added a fake strategy, so checking for Attempt calls checks if there was 2187 // added a fake strategy, so checking for Attempt calls checks if there was
2190 // any attempt to overlay, which there shouldn't be. We can't use the quad 2188 // any attempt to overlay, which there shouldn't be. We can't use the quad
2191 // list because the render pass is cleaned up by DrawFrame. 2189 // list because the render pass is cleaned up by DrawFrame.
2192 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0); 2190 EXPECT_CALL(*processor->strategy_, Attempt(_, _)).Times(0);
2193 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, 2191 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect,
2194 viewport_rect, false); 2192 viewport_rect, false);
2195 Mock::VerifyAndClearExpectations(processor->strategy_); 2193 Mock::VerifyAndClearExpectations(processor->strategy_);
(...skipping 19 matching lines...) Expand all
2215 public: 2213 public:
2216 class SingleOverlayValidator : public OverlayCandidateValidator { 2214 class SingleOverlayValidator : public OverlayCandidateValidator {
2217 public: 2215 public:
2218 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { 2216 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
2219 ASSERT_EQ(2U, surfaces->size()); 2217 ASSERT_EQ(2U, surfaces->size());
2220 OverlayCandidate& candidate = surfaces->back(); 2218 OverlayCandidate& candidate = surfaces->back();
2221 candidate.overlay_handled = true; 2219 candidate.overlay_handled = true;
2222 } 2220 }
2223 }; 2221 };
2224 2222
2225 SingleOverlayOnTopProcessor(OutputSurface* surface, 2223 SingleOverlayOnTopProcessor(OutputSurface* surface)
2226 ResourceProvider* resource_provider) 2224 : OverlayProcessor(surface) {}
2227 : OverlayProcessor(surface, resource_provider) {}
2228 2225
2229 void Initialize() override { 2226 void Initialize() override {
2230 strategies_.push_back(scoped_ptr<Strategy>( 2227 strategies_.push_back(
2231 new OverlayStrategySingleOnTop(&validator_, resource_provider_))); 2228 scoped_ptr<Strategy>(new OverlayStrategySingleOnTop(&validator_)));
2232 } 2229 }
2233 2230
2234 SingleOverlayValidator validator_; 2231 SingleOverlayValidator validator_;
2235 }; 2232 };
2236 2233
2237 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D { 2234 class WaitSyncPointCountingContext : public TestWebGraphicsContext3D {
2238 public: 2235 public:
2239 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point)); 2236 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point));
2240 }; 2237 };
2241 2238
(...skipping 29 matching lines...) Expand all
2271 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, false, 2268 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, false,
2272 1)); 2269 1));
2273 scoped_ptr<TextureMailboxDeleter> mailbox_deleter( 2270 scoped_ptr<TextureMailboxDeleter> mailbox_deleter(
2274 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get())); 2271 new TextureMailboxDeleter(base::ThreadTaskRunnerHandle::Get()));
2275 2272
2276 RendererSettings settings; 2273 RendererSettings settings;
2277 FakeRendererClient renderer_client; 2274 FakeRendererClient renderer_client;
2278 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(), 2275 FakeRendererGL renderer(&renderer_client, &settings, output_surface.get(),
2279 resource_provider.get(), mailbox_deleter.get()); 2276 resource_provider.get(), mailbox_deleter.get());
2280 2277
2281 SingleOverlayOnTopProcessor* processor = new SingleOverlayOnTopProcessor( 2278 SingleOverlayOnTopProcessor* processor =
2282 output_surface.get(), resource_provider.get()); 2279 new SingleOverlayOnTopProcessor(output_surface.get());
2283 processor->Initialize(); 2280 processor->Initialize();
2284 renderer.SetOverlayProcessor(processor); 2281 renderer.SetOverlayProcessor(processor);
2285 2282
2286 gfx::Rect viewport_rect(1, 1); 2283 gfx::Rect viewport_rect(1, 1);
2287 TestRenderPass* root_pass = 2284 TestRenderPass* root_pass =
2288 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), 2285 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0),
2289 viewport_rect, gfx::Transform()); 2286 viewport_rect, gfx::Transform());
2290 root_pass->has_transparent_background = false; 2287 root_pass->has_transparent_background = false;
2291 2288
2292 unsigned sync_point = TestRenderPass::kSyncPointForMailboxTextureQuad; 2289 unsigned sync_point = TestRenderPass::kSyncPointForMailboxTextureQuad;
2293 TextureMailbox mailbox = 2290 TextureMailbox mailbox =
2294 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 2291 TextureMailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
2295 mailbox.set_allow_overlay(true);
2296 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 2292 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
2297 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); 2293 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
2298 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( 2294 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox(
2299 mailbox, release_callback.Pass()); 2295 mailbox, release_callback.Pass());
2300 bool premultiplied_alpha = false; 2296 bool premultiplied_alpha = false;
2301 bool flipped = false; 2297 bool flipped = false;
2302 bool nearest_neighbor = false; 2298 bool nearest_neighbor = false;
2303 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2299 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2304 gfx::PointF uv_top_left(0, 0); 2300 gfx::PointF uv_top_left(0, 0);
2305 gfx::PointF uv_bottom_right(1, 1); 2301 gfx::PointF uv_bottom_right(1, 1);
2306 2302
2307 TextureDrawQuad* overlay_quad = 2303 TextureDrawQuad* overlay_quad =
2308 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2304 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2309 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); 2305 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState();
2310 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect, 2306 shared_state->SetAll(gfx::Transform(), viewport_rect.size(), viewport_rect,
2311 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0); 2307 viewport_rect, false, 1, SkXfermode::kSrcOver_Mode, 0);
2312 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect, 2308 overlay_quad->SetNew(shared_state, viewport_rect, viewport_rect,
2313 viewport_rect, resource_id, premultiplied_alpha, 2309 viewport_rect, resource_id, premultiplied_alpha,
2314 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, 2310 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT,
2315 vertex_opacity, flipped, nearest_neighbor); 2311 vertex_opacity, flipped, nearest_neighbor);
2312 overlay_quad->allow_overlay = true;
2316 2313
2317 // Verify that overlay_quad actually gets turned into an overlay, and even 2314 // Verify that overlay_quad actually gets turned into an overlay, and even
2318 // though it's not drawn, that its sync point is waited on. 2315 // though it's not drawn, that its sync point is waited on.
2319 EXPECT_CALL(*context, 2316 EXPECT_CALL(*context,
2320 waitSyncPoint(TestRenderPass::kSyncPointForMailboxTextureQuad)) 2317 waitSyncPoint(TestRenderPass::kSyncPointForMailboxTextureQuad))
2321 .Times(1); 2318 .Times(1);
2322 EXPECT_CALL(overlay_scheduler, 2319 EXPECT_CALL(overlay_scheduler,
2323 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, 2320 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect,
2324 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); 2321 BoundingRect(uv_top_left, uv_bottom_right))).Times(1);
2325 2322
2326 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, 2323 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect,
2327 viewport_rect, false); 2324 viewport_rect, false);
2328 } 2325 }
2329 2326
2330 } // namespace 2327 } // namespace
2331 } // namespace cc 2328 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698