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

Unified Diff: cc/output/gl_renderer.cc

Issue 2628883004: cc: Use weak ptr for async read pixel queries. (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/gl_renderer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « cc/output/gl_renderer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698