Chromium Code Reviews| Index: cc/output/gl_renderer.cc |
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
| index fb5de4edd084c4f6915697f5e7c6f9b020e677a7..70a7ba71c2610de3fcb1998100a549e018a6485e 100644 |
| --- a/cc/output/gl_renderer.cc |
| +++ b/cc/output/gl_renderer.cc |
| @@ -2243,6 +2243,15 @@ void GLRenderer::DoGetFramebufferPixels( |
| NULL, |
| GL_STREAM_READ)); |
| + WebKit::WebGLId query = 0; |
| + if (is_async) { |
| + query = context_->createQueryEXT(); |
| + GLC(context_, context_->beginQueryEXT( |
| + GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM, |
| + query)); |
| + } |
| + |
| + |
|
danakj
2013/06/17 18:36:48
nit: a single line of whitespace is sufficient.
hubbe
2013/06/17 19:47:19
Done.
|
| GLC(context_, |
| context_->readPixels(window_rect.x(), |
| window_rect.y(), |
| @@ -2268,6 +2277,7 @@ void GLRenderer::DoGetFramebufferPixels( |
| base::Unretained(this), |
| cleanup_callback, |
| buffer, |
| + query, |
| dest_pixels, |
| rect.size()); |
| // Save the finished_callback so it can be cancelled. |
| @@ -2278,11 +2288,12 @@ void GLRenderer::DoGetFramebufferPixels( |
| pending_async_read_pixels_.front()->buffer = buffer; |
| if (is_async) { |
| - unsigned sync_point = context_->insertSyncPoint(); |
| - SyncPointHelper::SignalSyncPoint( |
| + SyncPointHelper::SignalQuery( |
| context_, |
| - sync_point, |
| + query, |
| finished_callback); |
| + GLC(context_, context_->endQueryEXT( |
| + GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM)); |
| } else { |
| resource_provider_->Finish(); |
| finished_callback.Run(); |
| @@ -2294,10 +2305,15 @@ void GLRenderer::DoGetFramebufferPixels( |
| void GLRenderer::FinishedReadback( |
| const AsyncGetFramebufferPixelsCleanupCallback& cleanup_callback, |
| unsigned source_buffer, |
| + unsigned query, |
| uint8* dest_pixels, |
| gfx::Size size) { |
| DCHECK(!pending_async_read_pixels_.empty()); |
| + if (query != 0) { |
| + GLC(context_, context_->deleteQueryEXT(query)); |
| + } |
| + |
| PendingAsyncReadPixels* current_read = pending_async_read_pixels_.back(); |
| // Make sure we service the readbacks in order. |
| DCHECK_EQ(source_buffer, current_read->buffer); |