Index: cc/output/gl_renderer.cc |
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
index 506681e6a43b0d522553df0231f9f84231d43c08..099c6d0544e8f1af534e33d2fdc4473a29ba9ffd 100644 |
--- a/cc/output/gl_renderer.cc |
+++ b/cc/output/gl_renderer.cc |
@@ -271,7 +271,6 @@ struct GLRenderer::PendingAsyncReadPixels { |
PendingAsyncReadPixels() : buffer(0) {} |
std::unique_ptr<CopyOutputRequest> copy_request; |
- base::CancelableClosure finished_read_pixels_callback; |
unsigned buffer; |
private: |
@@ -390,7 +389,8 @@ GLRenderer::GLRenderer(const RendererSettings* settings, |
gl_composited_texture_quad_border_( |
settings->gl_composited_texture_quad_border), |
bound_geometry_(NO_BINDING), |
- color_lut_cache_(gl_) { |
+ color_lut_cache_(gl_), |
+ weak_ptr_factory_(this) { |
DCHECK(gl_); |
DCHECK(context_support_); |
@@ -408,13 +408,6 @@ GLRenderer::GLRenderer(const RendererSettings* settings, |
} |
GLRenderer::~GLRenderer() { |
- while (!pending_async_read_pixels_.empty()) { |
- PendingAsyncReadPixels* pending_read = |
- pending_async_read_pixels_.back().get(); |
- pending_read->finished_read_pixels_callback.Cancel(); |
- pending_async_read_pixels_.pop_back(); |
- } |
- |
CleanupSharedObjects(); |
if (context_visibility_) { |
@@ -3084,23 +3077,14 @@ void GLRenderer::GetFramebufferPixelsAsync( |
gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0); |
- base::Closure finished_callback = base::Bind(&GLRenderer::FinishedReadback, |
- base::Unretained(this), |
- buffer, |
- query, |
- window_rect.size()); |
- // Save the finished_callback so it can be cancelled. |
- pending_async_read_pixels_.front()->finished_read_pixels_callback.Reset( |
- finished_callback); |
- base::Closure cancelable_callback = |
- pending_async_read_pixels_.front()-> |
- finished_read_pixels_callback.callback(); |
- |
// Save the buffer to verify the callbacks happen in the expected order. |
pending_async_read_pixels_.front()->buffer = buffer; |
gl_->EndQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM); |
- context_support_->SignalQuery(query, cancelable_callback); |
+ context_support_->SignalQuery( |
+ query, |
+ base::Bind(&GLRenderer::FinishedReadback, weak_ptr_factory_.GetWeakPtr(), |
+ buffer, query, window_rect.size())); |
} |
void GLRenderer::FinishedReadback(unsigned source_buffer, |