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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 94
95 class MemoryHolder : public base::RefCounted<MemoryHolder> { 95 class MemoryHolder : public base::RefCounted<MemoryHolder> {
96 public: 96 public:
97 MemoryHolder(scoped_ptr<base::SharedMemory> shared_memory, 97 MemoryHolder(scoped_ptr<base::SharedMemory> shared_memory,
98 gfx::Size frame_size, 98 gfx::Size frame_size,
99 base::Callback<void()> callback) 99 base::Callback<void()> callback)
100 : shared_memory_(shared_memory.Pass()), 100 : shared_memory_(shared_memory.Pass()),
101 frame_size_(frame_size), 101 frame_size_(frame_size),
102 callback_(callback) {} 102 callback_(callback) {}
103 103
104 cc::TextureMailbox GetMailbox() { 104 void GetMailbox(cc::TextureMailbox* mailbox,
105 return cc::TextureMailbox( 105 scoped_ptr<cc::ScopedReleaseCallback>* release_callback) {
106 shared_memory_.get(), 106 *mailbox = cc::TextureMailbox(shared_memory_.get(), frame_size_);
107 frame_size_, 107 *release_callback = cc::ScopedReleaseCallback::Create(
108 base::Bind(ReleaseMailbox, make_scoped_refptr(this))); 108 base::Bind(ReleaseMailbox, make_scoped_refptr(this)));
109 } 109 }
110 110
111 private: 111 private:
112 friend class base::RefCounted<MemoryHolder>; 112 friend class base::RefCounted<MemoryHolder>;
113 ~MemoryHolder() { callback_.Run(); } 113 ~MemoryHolder() { callback_.Run(); }
114 114
115 scoped_ptr<base::SharedMemory> shared_memory_; 115 scoped_ptr<base::SharedMemory> shared_memory_;
116 gfx::Size frame_size_; 116 gfx::Size frame_size_;
117 base::Callback<void()> callback_; 117 base::Callback<void()> callback_;
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 accelerated_compositing_state_changed_ = false; 1296 accelerated_compositing_state_changed_ = false;
1297 1297
1298 bool is_compositing_active = host_->is_accelerated_compositing_active(); 1298 bool is_compositing_active = host_->is_accelerated_compositing_active();
1299 if (is_compositing_active && current_surface_.get()) { 1299 if (is_compositing_active && current_surface_.get()) {
1300 window_->layer()->SetExternalTexture(current_surface_.get()); 1300 window_->layer()->SetExternalTexture(current_surface_.get());
1301 current_frame_size_ = ConvertSizeToDIP( 1301 current_frame_size_ = ConvertSizeToDIP(
1302 current_surface_->device_scale_factor(), current_surface_->size()); 1302 current_surface_->device_scale_factor(), current_surface_->size());
1303 CheckResizeLock(); 1303 CheckResizeLock();
1304 framebuffer_holder_ = NULL; 1304 framebuffer_holder_ = NULL;
1305 } else if (is_compositing_active && framebuffer_holder_) { 1305 } else if (is_compositing_active && framebuffer_holder_) {
1306 cc::TextureMailbox mailbox = framebuffer_holder_->GetMailbox(); 1306 cc::TextureMailbox mailbox;
1307 scoped_ptr<cc::ScopedReleaseCallback> callback;
1308 framebuffer_holder_->GetMailbox(&mailbox, &callback);
1307 window_->layer()->SetTextureMailbox(mailbox, 1309 window_->layer()->SetTextureMailbox(mailbox,
1310 callback.Pass(),
1308 last_swapped_surface_scale_factor_); 1311 last_swapped_surface_scale_factor_);
1309 current_frame_size_ = ConvertSizeToDIP(last_swapped_surface_scale_factor_, 1312 current_frame_size_ = ConvertSizeToDIP(last_swapped_surface_scale_factor_,
1310 mailbox.shared_memory_size()); 1313 mailbox.shared_memory_size());
1311 CheckResizeLock(); 1314 CheckResizeLock();
1312 } else { 1315 } else {
1313 window_->layer()->SetExternalTexture(NULL); 1316 window_->layer()->SetExternalTexture(NULL);
1314 resize_lock_.reset(); 1317 resize_lock_.reset();
1315 host_->WasResized(); 1318 host_->WasResized();
1316 framebuffer_holder_ = NULL; 1319 framebuffer_holder_ = NULL;
1317 } 1320 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1529 1532
1530 scoped_refptr<MemoryHolder> holder(new MemoryHolder( 1533 scoped_refptr<MemoryHolder> holder(new MemoryHolder(
1531 shared_memory.Pass(), 1534 shared_memory.Pass(),
1532 frame_size, 1535 frame_size,
1533 base::Bind(&RenderWidgetHostViewAura::SendSoftwareFrameAck, 1536 base::Bind(&RenderWidgetHostViewAura::SendSoftwareFrameAck,
1534 AsWeakPtr(), 1537 AsWeakPtr(),
1535 output_surface_id, 1538 output_surface_id,
1536 frame_data->id))); 1539 frame_data->id)));
1537 bool first_frame = !framebuffer_holder_; 1540 bool first_frame = !framebuffer_holder_;
1538 framebuffer_holder_.swap(holder); 1541 framebuffer_holder_.swap(holder);
1539 cc::TextureMailbox mailbox = framebuffer_holder_->GetMailbox(); 1542 cc::TextureMailbox mailbox;
1543 scoped_ptr<cc::ScopedReleaseCallback> callback;
1544 framebuffer_holder_->GetMailbox(&mailbox, &callback);
1540 DCHECK(mailbox.IsSharedMemory()); 1545 DCHECK(mailbox.IsSharedMemory());
1541 current_frame_size_ = frame_size_in_dip; 1546 current_frame_size_ = frame_size_in_dip;
1542 1547
1543 released_front_lock_ = NULL; 1548 released_front_lock_ = NULL;
1544 CheckResizeLock(); 1549 CheckResizeLock();
1545 window_->layer()->SetTextureMailbox(mailbox, frame_device_scale_factor); 1550 window_->layer()->SetTextureMailbox(mailbox,
1551 callback.Pass(),
1552 frame_device_scale_factor);
1546 window_->SchedulePaintInRect( 1553 window_->SchedulePaintInRect(
1547 ConvertRectToDIP(frame_device_scale_factor, damage_rect)); 1554 ConvertRectToDIP(frame_device_scale_factor, damage_rect));
1548 1555
1549 ui::Compositor* compositor = GetCompositor(); 1556 ui::Compositor* compositor = GetCompositor();
1550 if (compositor) { 1557 if (compositor) {
1551 compositor->SetLatencyInfo(latency_info); 1558 compositor->SetLatencyInfo(latency_info);
1552 if (first_frame) { 1559 if (first_frame) {
1553 // Send swap for first frame, because no frame will be released due to 1560 // Send swap for first frame, because no frame will be released due to
1554 // that. 1561 // that.
1555 AddOnCommitCallbackAndDisableLocks( 1562 AddOnCommitCallbackAndDisableLocks(
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 PrepareTextureCopyOutputResult(dst_size_in_pixel, callback, result.Pass()); 1777 PrepareTextureCopyOutputResult(dst_size_in_pixel, callback, result.Pass());
1771 return; 1778 return;
1772 } 1779 }
1773 1780
1774 DCHECK(result->HasBitmap()); 1781 DCHECK(result->HasBitmap());
1775 PrepareBitmapCopyOutputResult(dst_size_in_pixel, callback, result.Pass()); 1782 PrepareBitmapCopyOutputResult(dst_size_in_pixel, callback, result.Pass());
1776 } 1783 }
1777 1784
1778 static void CopyFromCompositingSurfaceFinished( 1785 static void CopyFromCompositingSurfaceFinished(
1779 const base::Callback<void(bool, const SkBitmap&)>& callback, 1786 const base::Callback<void(bool, const SkBitmap&)>& callback,
1780 const cc::TextureMailbox::ReleaseCallback& release_callback, 1787 scoped_ptr<cc::ScopedReleaseCallback> release_callback,
1781 scoped_ptr<SkBitmap> bitmap, 1788 scoped_ptr<SkBitmap> bitmap,
1782 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock, 1789 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock,
1783 bool result) { 1790 bool result) {
1784 bitmap_pixels_lock.reset(); 1791 bitmap_pixels_lock.reset();
1785 release_callback.Run(0, false); 1792 release_callback->Run(0, false);
1786 callback.Run(result, *bitmap); 1793 callback.Run(result, *bitmap);
1787 } 1794 }
1788 1795
1789 // static 1796 // static
1790 void RenderWidgetHostViewAura::PrepareTextureCopyOutputResult( 1797 void RenderWidgetHostViewAura::PrepareTextureCopyOutputResult(
1791 const gfx::Size& dst_size_in_pixel, 1798 const gfx::Size& dst_size_in_pixel,
1792 const base::Callback<void(bool, const SkBitmap&)>& callback, 1799 const base::Callback<void(bool, const SkBitmap&)>& callback,
1793 scoped_ptr<cc::CopyOutputResult> result) { 1800 scoped_ptr<cc::CopyOutputResult> result) {
1794 base::ScopedClosureRunner scoped_callback_runner( 1801 base::ScopedClosureRunner scoped_callback_runner(
1795 base::Bind(callback, false, SkBitmap())); 1802 base::Bind(callback, false, SkBitmap()));
(...skipping 11 matching lines...) Expand all
1807 1814
1808 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 1815 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
1809 GLHelper* gl_helper = factory->GetGLHelper(); 1816 GLHelper* gl_helper = factory->GetGLHelper();
1810 if (!gl_helper) 1817 if (!gl_helper)
1811 return; 1818 return;
1812 1819
1813 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock( 1820 scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock(
1814 new SkAutoLockPixels(*bitmap)); 1821 new SkAutoLockPixels(*bitmap));
1815 uint8* pixels = static_cast<uint8*>(bitmap->getPixels()); 1822 uint8* pixels = static_cast<uint8*>(bitmap->getPixels());
1816 1823
1817 scoped_ptr<cc::TextureMailbox> texture_mailbox = result->TakeTexture(); 1824 cc::TextureMailbox texture_mailbox;
1818 DCHECK(texture_mailbox->IsTexture()); 1825 scoped_ptr<cc::ScopedReleaseCallback> release_callback;
1819 if (!texture_mailbox->IsTexture()) 1826 result->TakeTexture(&texture_mailbox, &release_callback);
1827 DCHECK(texture_mailbox.IsTexture());
1828 if (!texture_mailbox.IsTexture())
1820 return; 1829 return;
1821 1830
1822 ignore_result(scoped_callback_runner.Release()); 1831 ignore_result(scoped_callback_runner.Release());
1823 1832
1824 gl_helper->CropScaleReadbackAndCleanMailbox( 1833 gl_helper->CropScaleReadbackAndCleanMailbox(
1825 texture_mailbox->name(), 1834 texture_mailbox.name(),
1826 texture_mailbox->sync_point(), 1835 texture_mailbox.sync_point(),
1827 result->size(), 1836 result->size(),
1828 gfx::Rect(result->size()), 1837 gfx::Rect(result->size()),
1829 dst_size_in_pixel, 1838 dst_size_in_pixel,
1830 pixels, 1839 pixels,
1831 base::Bind(&CopyFromCompositingSurfaceFinished, 1840 base::Bind(&CopyFromCompositingSurfaceFinished,
1832 callback, 1841 callback,
1833 texture_mailbox->callback(), 1842 base::Passed(&release_callback),
1834 base::Passed(&bitmap), 1843 base::Passed(&bitmap),
1835 base::Passed(&bitmap_pixels_lock))); 1844 base::Passed(&bitmap_pixels_lock)));
1836 } 1845 }
1837 1846
1838 // static 1847 // static
1839 void RenderWidgetHostViewAura::PrepareBitmapCopyOutputResult( 1848 void RenderWidgetHostViewAura::PrepareBitmapCopyOutputResult(
1840 const gfx::Size& dst_size_in_pixel, 1849 const gfx::Size& dst_size_in_pixel,
1841 const base::Callback<void(bool, const SkBitmap&)>& callback, 1850 const base::Callback<void(bool, const SkBitmap&)>& callback,
1842 scoped_ptr<cc::CopyOutputResult> result) { 1851 scoped_ptr<cc::CopyOutputResult> result) {
1843 DCHECK(result->HasBitmap()); 1852 DCHECK(result->HasBitmap());
(...skipping 13 matching lines...) Expand all
1857 SkBitmap bitmap = skia::ImageOperations::Resize( 1866 SkBitmap bitmap = skia::ImageOperations::Resize(
1858 *source, 1867 *source,
1859 skia::ImageOperations::RESIZE_BEST, 1868 skia::ImageOperations::RESIZE_BEST,
1860 dst_size_in_pixel.width(), 1869 dst_size_in_pixel.width(),
1861 dst_size_in_pixel.height()); 1870 dst_size_in_pixel.height());
1862 callback.Run(true, bitmap); 1871 callback.Run(true, bitmap);
1863 } 1872 }
1864 1873
1865 static void CopyFromCompositingSurfaceFinishedForVideo( 1874 static void CopyFromCompositingSurfaceFinishedForVideo(
1866 const base::Callback<void(bool)>& callback, 1875 const base::Callback<void(bool)>& callback,
1867 const cc::TextureMailbox::ReleaseCallback& release_callback, 1876 scoped_ptr<cc::ScopedReleaseCallback> release_callback,
1868 bool result) { 1877 bool result) {
1869 release_callback.Run(0, false); 1878 release_callback->Run(0, false);
1870 callback.Run(result); 1879 callback.Run(result);
1871 } 1880 }
1872 1881
1873 // static 1882 // static
1874 void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo( 1883 void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo(
1875 base::WeakPtr<RenderWidgetHostViewAura> rwhva, 1884 base::WeakPtr<RenderWidgetHostViewAura> rwhva,
1876 scoped_refptr<media::VideoFrame> video_frame, 1885 scoped_refptr<media::VideoFrame> video_frame,
1877 const base::Callback<void(bool)>& callback, 1886 const base::Callback<void(bool)>& callback,
1878 scoped_ptr<cc::CopyOutputResult> result) { 1887 scoped_ptr<cc::CopyOutputResult> result) {
1879 base::ScopedClosureRunner scoped_callback_runner(base::Bind(callback, false)); 1888 base::ScopedClosureRunner scoped_callback_runner(base::Bind(callback, false));
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1932 ignore_result(scoped_callback_runner.Release()); 1941 ignore_result(scoped_callback_runner.Release());
1933 callback.Run(true); 1942 callback.Run(true);
1934 return; 1943 return;
1935 } 1944 }
1936 1945
1937 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 1946 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
1938 GLHelper* gl_helper = factory->GetGLHelper(); 1947 GLHelper* gl_helper = factory->GetGLHelper();
1939 if (!gl_helper) 1948 if (!gl_helper)
1940 return; 1949 return;
1941 1950
1942 scoped_ptr<cc::TextureMailbox> texture_mailbox = result->TakeTexture(); 1951 cc::TextureMailbox texture_mailbox;
1943 DCHECK(texture_mailbox->IsTexture()); 1952 scoped_ptr<cc::ScopedReleaseCallback> release_callback;
1944 if (!texture_mailbox->IsTexture()) 1953 result->TakeTexture(&texture_mailbox, &release_callback);
1954 DCHECK(texture_mailbox.IsTexture());
1955 if (!texture_mailbox.IsTexture())
1945 return; 1956 return;
1946 1957
1947 gfx::Rect result_rect(result->size()); 1958 gfx::Rect result_rect(result->size());
1948 1959
1949 content::ReadbackYUVInterface* yuv_readback_pipeline = 1960 content::ReadbackYUVInterface* yuv_readback_pipeline =
1950 rwhva->yuv_readback_pipeline_.get(); 1961 rwhva->yuv_readback_pipeline_.get();
1951 if (yuv_readback_pipeline == NULL || 1962 if (yuv_readback_pipeline == NULL ||
1952 yuv_readback_pipeline->scaler()->SrcSize() != result_rect.size() || 1963 yuv_readback_pipeline->scaler()->SrcSize() != result_rect.size() ||
1953 yuv_readback_pipeline->scaler()->SrcSubrect() != result_rect || 1964 yuv_readback_pipeline->scaler()->SrcSubrect() != result_rect ||
1954 yuv_readback_pipeline->scaler()->DstSize() != region_in_frame.size()) { 1965 yuv_readback_pipeline->scaler()->DstSize() != region_in_frame.size()) {
(...skipping 21 matching lines...) Expand all
1976 region_in_frame, 1987 region_in_frame,
1977 true, 1988 true,
1978 false)); 1989 false));
1979 yuv_readback_pipeline = rwhva->yuv_readback_pipeline_.get(); 1990 yuv_readback_pipeline = rwhva->yuv_readback_pipeline_.get();
1980 } 1991 }
1981 1992
1982 ignore_result(scoped_callback_runner.Release()); 1993 ignore_result(scoped_callback_runner.Release());
1983 base::Callback<void(bool result)> finished_callback = base::Bind( 1994 base::Callback<void(bool result)> finished_callback = base::Bind(
1984 &CopyFromCompositingSurfaceFinishedForVideo, 1995 &CopyFromCompositingSurfaceFinishedForVideo,
1985 callback, 1996 callback,
1986 texture_mailbox->callback()); 1997 base::Passed(&release_callback));
1987 yuv_readback_pipeline->ReadbackYUV( 1998 yuv_readback_pipeline->ReadbackYUV(
1988 texture_mailbox->name(), 1999 texture_mailbox.name(),
1989 texture_mailbox->sync_point(), 2000 texture_mailbox.sync_point(),
1990 video_frame.get(), 2001 video_frame.get(),
1991 finished_callback); 2002 finished_callback);
1992 } 2003 }
1993 2004
1994 void RenderWidgetHostViewAura::GetScreenInfo(WebScreenInfo* results) { 2005 void RenderWidgetHostViewAura::GetScreenInfo(WebScreenInfo* results) {
1995 GetScreenInfoForWindow(results, window_->GetRootWindow() ? window_ : NULL); 2006 GetScreenInfoForWindow(results, window_->GetRootWindow() ? window_ : NULL);
1996 } 2007 }
1997 2008
1998 gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() { 2009 gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() {
1999 return window_->GetToplevelWindow()->GetBoundsInScreen(); 2010 return window_->GetToplevelWindow()->GetBoundsInScreen();
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after
3269 RenderWidgetHost* widget) { 3280 RenderWidgetHost* widget) {
3270 return new RenderWidgetHostViewAura(widget); 3281 return new RenderWidgetHostViewAura(widget);
3271 } 3282 }
3272 3283
3273 // static 3284 // static
3274 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) { 3285 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) {
3275 GetScreenInfoForWindow(results, NULL); 3286 GetScreenInfoForWindow(results, NULL);
3276 } 3287 }
3277 3288
3278 } // namespace content 3289 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698