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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 23648014: cc: Move TextureMailbox::ReleaseCallback to SingleReleaseCallback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: releasecallback: dchecks Created 7 years, 3 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
Index: content/browser/renderer_host/render_widget_host_view_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 1dab8126fed8f1fb3b1cd3f33a51360a14327071..7be6db96867cb15e2568bce60f815c174e15b900 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -101,10 +101,10 @@ class MemoryHolder : public base::RefCounted<MemoryHolder> {
frame_size_(frame_size),
callback_(callback) {}
- cc::TextureMailbox GetMailbox() {
- return cc::TextureMailbox(
- shared_memory_.get(),
- frame_size_,
+ void GetMailbox(cc::TextureMailbox* mailbox,
+ scoped_ptr<cc::ScopedReleaseCallback>* release_callback) {
+ *mailbox = cc::TextureMailbox(shared_memory_.get(), frame_size_);
+ *release_callback = cc::ScopedReleaseCallback::Create(
base::Bind(ReleaseMailbox, make_scoped_refptr(this)));
}
@@ -1303,8 +1303,11 @@ void RenderWidgetHostViewAura::UpdateExternalTexture() {
CheckResizeLock();
framebuffer_holder_ = NULL;
} else if (is_compositing_active && framebuffer_holder_) {
- cc::TextureMailbox mailbox = framebuffer_holder_->GetMailbox();
+ cc::TextureMailbox mailbox;
+ scoped_ptr<cc::ScopedReleaseCallback> callback;
+ framebuffer_holder_->GetMailbox(&mailbox, &callback);
window_->layer()->SetTextureMailbox(mailbox,
+ callback.Pass(),
last_swapped_surface_scale_factor_);
current_frame_size_ = ConvertSizeToDIP(last_swapped_surface_scale_factor_,
mailbox.shared_memory_size());
@@ -1536,13 +1539,17 @@ void RenderWidgetHostViewAura::SwapSoftwareFrame(
frame_data->id)));
bool first_frame = !framebuffer_holder_;
framebuffer_holder_.swap(holder);
- cc::TextureMailbox mailbox = framebuffer_holder_->GetMailbox();
+ cc::TextureMailbox mailbox;
+ scoped_ptr<cc::ScopedReleaseCallback> callback;
+ framebuffer_holder_->GetMailbox(&mailbox, &callback);
DCHECK(mailbox.IsSharedMemory());
current_frame_size_ = frame_size_in_dip;
released_front_lock_ = NULL;
CheckResizeLock();
- window_->layer()->SetTextureMailbox(mailbox, frame_device_scale_factor);
+ window_->layer()->SetTextureMailbox(mailbox,
+ callback.Pass(),
+ frame_device_scale_factor);
window_->SchedulePaintInRect(
ConvertRectToDIP(frame_device_scale_factor, damage_rect));
@@ -1777,12 +1784,12 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResult(
static void CopyFromCompositingSurfaceFinished(
const base::Callback<void(bool, const SkBitmap&)>& callback,
- const cc::TextureMailbox::ReleaseCallback& release_callback,
+ scoped_ptr<cc::ScopedReleaseCallback> release_callback,
scoped_ptr<SkBitmap> bitmap,
scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock,
bool result) {
bitmap_pixels_lock.reset();
- release_callback.Run(0, false);
+ release_callback->Run(0, false);
callback.Run(result, *bitmap);
}
@@ -1814,23 +1821,25 @@ void RenderWidgetHostViewAura::PrepareTextureCopyOutputResult(
new SkAutoLockPixels(*bitmap));
uint8* pixels = static_cast<uint8*>(bitmap->getPixels());
- scoped_ptr<cc::TextureMailbox> texture_mailbox = result->TakeTexture();
- DCHECK(texture_mailbox->IsTexture());
- if (!texture_mailbox->IsTexture())
+ cc::TextureMailbox texture_mailbox;
+ scoped_ptr<cc::ScopedReleaseCallback> release_callback;
+ result->TakeTexture(&texture_mailbox, &release_callback);
+ DCHECK(texture_mailbox.IsTexture());
+ if (!texture_mailbox.IsTexture())
return;
ignore_result(scoped_callback_runner.Release());
gl_helper->CropScaleReadbackAndCleanMailbox(
- texture_mailbox->name(),
- texture_mailbox->sync_point(),
+ texture_mailbox.name(),
+ texture_mailbox.sync_point(),
result->size(),
gfx::Rect(result->size()),
dst_size_in_pixel,
pixels,
base::Bind(&CopyFromCompositingSurfaceFinished,
callback,
- texture_mailbox->callback(),
+ base::Passed(&release_callback),
base::Passed(&bitmap),
base::Passed(&bitmap_pixels_lock)));
}
@@ -1864,9 +1873,9 @@ void RenderWidgetHostViewAura::PrepareBitmapCopyOutputResult(
static void CopyFromCompositingSurfaceFinishedForVideo(
const base::Callback<void(bool)>& callback,
- const cc::TextureMailbox::ReleaseCallback& release_callback,
+ scoped_ptr<cc::ScopedReleaseCallback> release_callback,
bool result) {
- release_callback.Run(0, false);
+ release_callback->Run(0, false);
callback.Run(result);
}
@@ -1939,9 +1948,11 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo(
if (!gl_helper)
return;
- scoped_ptr<cc::TextureMailbox> texture_mailbox = result->TakeTexture();
- DCHECK(texture_mailbox->IsTexture());
- if (!texture_mailbox->IsTexture())
+ cc::TextureMailbox texture_mailbox;
+ scoped_ptr<cc::ScopedReleaseCallback> release_callback;
+ result->TakeTexture(&texture_mailbox, &release_callback);
+ DCHECK(texture_mailbox.IsTexture());
+ if (!texture_mailbox.IsTexture())
return;
gfx::Rect result_rect(result->size());
@@ -1983,10 +1994,10 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo(
base::Callback<void(bool result)> finished_callback = base::Bind(
&CopyFromCompositingSurfaceFinishedForVideo,
callback,
- texture_mailbox->callback());
+ base::Passed(&release_callback));
yuv_readback_pipeline->ReadbackYUV(
- texture_mailbox->name(),
- texture_mailbox->sync_point(),
+ texture_mailbox.name(),
+ texture_mailbox.sync_point(),
video_frame.get(),
finished_callback);
}

Powered by Google App Engine
This is Rietveld 408576698