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); |
} |