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

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

Issue 411643002: Early wait on texture resource sync points in gl_renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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/direct_renderer.h" 5 #include "cc/output/direct_renderer.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 overlay_processor_->ProcessForOverlays(render_passes_in_draw_order, 219 overlay_processor_->ProcessForOverlays(render_passes_in_draw_order,
220 &frame.overlay_list); 220 &frame.overlay_list);
221 221
222 EnsureBackbuffer(); 222 EnsureBackbuffer();
223 223
224 // Only reshape when we know we are going to draw. Otherwise, the reshape 224 // Only reshape when we know we are going to draw. Otherwise, the reshape
225 // can leave the window at the wrong size if we never draw and the proper 225 // can leave the window at the wrong size if we never draw and the proper
226 // viewport size is never set. 226 // viewport size is never set.
227 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor); 227 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor);
228 228
229 // Try to lock resources first.
230 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
231 RenderPass* pass = render_passes_in_draw_order->at(i);
232 PrelockRenderPass(&frame, pass);
233 }
234
229 BeginDrawingFrame(&frame); 235 BeginDrawingFrame(&frame);
230 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { 236 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
231 RenderPass* pass = render_passes_in_draw_order->at(i); 237 RenderPass* pass = render_passes_in_draw_order->at(i);
232 DrawRenderPass(&frame, pass); 238 DrawRenderPass(&frame, pass);
233 239
234 for (ScopedPtrVector<CopyOutputRequest>::iterator it = 240 for (ScopedPtrVector<CopyOutputRequest>::iterator it =
235 pass->copy_requests.begin(); 241 pass->copy_requests.begin();
236 it != pass->copy_requests.end(); 242 it != pass->copy_requests.end();
237 ++it) { 243 ++it) {
238 if (i > 0) { 244 if (i > 0) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 const DrawingFrame* frame, 328 const DrawingFrame* frame,
323 const gfx::Rect& draw_space_rect) { 329 const gfx::Rect& draw_space_rect) {
324 gfx::Rect window_space_rect = MoveFromDrawToWindowSpace(draw_space_rect); 330 gfx::Rect window_space_rect = MoveFromDrawToWindowSpace(draw_space_rect);
325 if (NeedDeviceClip(frame)) 331 if (NeedDeviceClip(frame))
326 window_space_rect.Intersect(DeviceClipRectInWindowSpace(frame)); 332 window_space_rect.Intersect(DeviceClipRectInWindowSpace(frame));
327 SetScissorTestRect(window_space_rect); 333 SetScissorTestRect(window_space_rect);
328 } 334 }
329 335
330 void DirectRenderer::FinishDrawingQuadList() {} 336 void DirectRenderer::FinishDrawingQuadList() {}
331 337
338 void DirectRenderer::PrelockRenderPass(DrawingFrame* frame,
339 const RenderPass* render_pass) {
340 const QuadList& quad_list = render_pass->quad_list;
341 int i = 0;
342 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
343 it != quad_list.BackToFrontEnd();
344 ++it) {
danakj 2014/08/13 13:52:12 You can IterateResources here to get each of the r
vmiura 2014/08/13 22:50:39 Done.
345 DoPrelockQuad(frame, *it);
346 i++;
347 }
348 }
349
332 void DirectRenderer::DrawRenderPass(DrawingFrame* frame, 350 void DirectRenderer::DrawRenderPass(DrawingFrame* frame,
333 const RenderPass* render_pass) { 351 const RenderPass* render_pass) {
334 TRACE_EVENT0("cc", "DirectRenderer::DrawRenderPass"); 352 TRACE_EVENT0("cc", "DirectRenderer::DrawRenderPass");
335 if (!UseRenderPass(frame, render_pass)) 353 if (!UseRenderPass(frame, render_pass))
336 return; 354 return;
337 355
338 bool using_scissor_as_optimization = Capabilities().using_partial_swap; 356 bool using_scissor_as_optimization = Capabilities().using_partial_swap;
339 gfx::Rect render_pass_scissor; 357 gfx::Rect render_pass_scissor;
340 bool draw_rect_covers_full_surface = true; 358 bool draw_rect_covers_full_surface = true;
341 if (frame->current_render_pass == frame->root_render_pass && 359 if (frame->current_render_pass == frame->root_render_pass &&
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 ScopedResource* texture = render_pass_textures_.get(id); 438 ScopedResource* texture = render_pass_textures_.get(id);
421 return texture && texture->id(); 439 return texture && texture->id();
422 } 440 }
423 441
424 // static 442 // static
425 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 443 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
426 return render_pass->output_rect.size(); 444 return render_pass->output_rect.size();
427 } 445 }
428 446
429 } // namespace cc 447 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/direct_renderer.h ('k') | cc/output/gl_renderer.h » ('j') | cc/output/gl_renderer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698