Chromium Code Reviews| Index: cc/output/direct_renderer.cc |
| diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc |
| index be5d2bff5be469716352781daae22a622c48d4ed..c2c8aff3986994529c93e62b8c702e780ef1886a 100644 |
| --- a/cc/output/direct_renderer.cc |
| +++ b/cc/output/direct_renderer.cc |
| @@ -56,6 +56,13 @@ static gfx::Transform window_matrix(int x, int y, int width, int height) { |
| namespace cc { |
| +static ResourceProvider::ResourceId WaitOnResourceSyncPoints( |
| + ResourceProvider* resource_provider, |
| + ResourceProvider::ResourceId resource_id) { |
| + resource_provider->WaitSyncPointIfNeeded(resource_id); |
| + return resource_id; |
| +} |
| + |
| DirectRenderer::DrawingFrame::DrawingFrame() |
| : root_render_pass(NULL), current_render_pass(NULL), current_texture(NULL) { |
| } |
| @@ -225,6 +232,20 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
| // viewport size is never set. |
| output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor); |
| + // Insert WaitSyncPointCHROMIUM on quad resources prior to drawing the frame, |
| + // so that drawing can proceed without GL context switching interruptions. |
| + // crbug.com/394547 |
|
danakj
2014/08/13 23:05:19
git blame will point to the bug, i think you can d
vmiura
2014/08/15 21:20:39
Done.
|
| + DrawQuad::ResourceIteratorCallback wait_on_resource_syncpoints_callback = |
| + base::Bind(&WaitOnResourceSyncPoints, resource_provider_); |
| + |
| + for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { |
| + RenderPass* pass = render_passes_in_draw_order->at(i); |
| + for (size_t j = 0; j < pass->quad_list.size(); ++j) { |
| + DrawQuad* quad = pass->quad_list[j]; |
| + quad->IterateResources(wait_on_resource_syncpoints_callback); |
| + } |
| + } |
| + |
| BeginDrawingFrame(&frame); |
| for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { |
| RenderPass* pass = render_passes_in_draw_order->at(i); |