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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 105743004: Add gpu::MailboxHolder to hold state for a gpu::Mailbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cc2a95fe Android fixes. Created 7 years 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 using gfx::SkIRectToRect; 90 using gfx::SkIRectToRect;
91 91
92 using blink::WebScreenInfo; 92 using blink::WebScreenInfo;
93 using blink::WebTouchEvent; 93 using blink::WebTouchEvent;
94 94
95 namespace content { 95 namespace content {
96 96
97 namespace { 97 namespace {
98 98
99 void MailboxReleaseCallback(scoped_ptr<base::SharedMemory> shared_memory, 99 void MailboxReleaseCallback(scoped_ptr<base::SharedMemory> shared_memory,
100 unsigned sync_point, bool lost_resource) { 100 uint32 sync_point,
101 bool lost_resource) {
101 // NOTE: shared_memory will get released when we go out of scope. 102 // NOTE: shared_memory will get released when we go out of scope.
102 } 103 }
103 104
104 // In mouse lock mode, we need to prevent the (invisible) cursor from hitting 105 // In mouse lock mode, we need to prevent the (invisible) cursor from hitting
105 // the border of the view, in order to get valid movement information. However, 106 // the border of the view, in order to get valid movement information. However,
106 // forcing the cursor back to the center of the view after each mouse move 107 // forcing the cursor back to the center of the view after each mouse move
107 // doesn't work well. It reduces the frequency of useful mouse move messages 108 // doesn't work well. It reduces the frequency of useful mouse move messages
108 // significantly. Therefore, we move the cursor to the center of the view only 109 // significantly. Therefore, we move the cursor to the center of the view only
109 // if it approaches the border. |kMouseLockBorderPercentage| specifies the width 110 // if it approaches the border. |kMouseLockBorderPercentage| specifies the width
110 // of the border area, in percentage of the corresponding dimension. 111 // of the border area, in percentage of the corresponding dimension.
(...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 &RenderWidgetHostViewAura:: 1101 &RenderWidgetHostViewAura::
1101 CopyFromCompositingSurfaceHasResultForVideo, 1102 CopyFromCompositingSurfaceHasResultForVideo,
1102 AsWeakPtr(), // For caching the ReadbackYUVInterface on this class. 1103 AsWeakPtr(), // For caching the ReadbackYUVInterface on this class.
1103 subscriber_texture, 1104 subscriber_texture,
1104 target, 1105 target,
1105 callback)); 1106 callback));
1106 gfx::Rect src_subrect_in_pixel = 1107 gfx::Rect src_subrect_in_pixel =
1107 ConvertRectToPixel(current_device_scale_factor_, src_subrect); 1108 ConvertRectToPixel(current_device_scale_factor_, src_subrect);
1108 request->set_area(src_subrect_in_pixel); 1109 request->set_area(src_subrect_in_pixel);
1109 if (subscriber_texture) { 1110 if (subscriber_texture) {
1110 request->SetTextureMailbox(cc::TextureMailbox( 1111 request->SetTextureMailbox(
1111 subscriber_texture->mailbox(), subscriber_texture->sync_point())); 1112 cc::TextureMailbox(subscriber_texture->mailbox(),
1113 subscriber_texture->target(),
1114 subscriber_texture->sync_point()));
1112 } 1115 }
1113 window_->layer()->RequestCopyOfOutput(request.Pass()); 1116 window_->layer()->RequestCopyOfOutput(request.Pass());
1114 } 1117 }
1115 1118
1116 bool RenderWidgetHostViewAura::CanCopyToBitmap() const { 1119 bool RenderWidgetHostViewAura::CanCopyToBitmap() const {
1117 return GetCompositor() && window_->layer()->has_external_content(); 1120 return GetCompositor() && window_->layer()->has_external_content();
1118 } 1121 }
1119 1122
1120 bool RenderWidgetHostViewAura::CanCopyToVideoFrame() const { 1123 bool RenderWidgetHostViewAura::CanCopyToVideoFrame() const {
1121 return GetCompositor() && 1124 return GetCompositor() &&
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
1843 cc::TextureMailbox texture_mailbox; 1846 cc::TextureMailbox texture_mailbox;
1844 scoped_ptr<cc::SingleReleaseCallback> release_callback; 1847 scoped_ptr<cc::SingleReleaseCallback> release_callback;
1845 result->TakeTexture(&texture_mailbox, &release_callback); 1848 result->TakeTexture(&texture_mailbox, &release_callback);
1846 DCHECK(texture_mailbox.IsTexture()); 1849 DCHECK(texture_mailbox.IsTexture());
1847 if (!texture_mailbox.IsTexture()) 1850 if (!texture_mailbox.IsTexture())
1848 return; 1851 return;
1849 1852
1850 ignore_result(scoped_callback_runner.Release()); 1853 ignore_result(scoped_callback_runner.Release());
1851 1854
1852 gl_helper->CropScaleReadbackAndCleanMailbox( 1855 gl_helper->CropScaleReadbackAndCleanMailbox(
1853 texture_mailbox.name(), 1856 texture_mailbox.mailbox(),
1854 texture_mailbox.sync_point(), 1857 texture_mailbox.sync_point(),
1855 result->size(), 1858 result->size(),
1856 gfx::Rect(result->size()), 1859 gfx::Rect(result->size()),
1857 dst_size_in_pixel, 1860 dst_size_in_pixel,
1858 pixels, 1861 pixels,
1859 base::Bind(&CopyFromCompositingSurfaceFinished, 1862 base::Bind(&CopyFromCompositingSurfaceFinished,
1860 callback, 1863 callback,
1861 base::Passed(&release_callback), 1864 base::Passed(&release_callback),
1862 base::Passed(&bitmap), 1865 base::Passed(&bitmap),
1863 base::Passed(&bitmap_pixels_lock))); 1866 base::Passed(&bitmap_pixels_lock)));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1900 1903
1901 GLHelper* gl_helper = ImageTransportFactory::GetInstance()->GetGLHelper(); 1904 GLHelper* gl_helper = ImageTransportFactory::GetInstance()->GetGLHelper();
1902 uint32 sync_point = gl_helper ? gl_helper->InsertSyncPoint() : 0; 1905 uint32 sync_point = gl_helper ? gl_helper->InsertSyncPoint() : 0;
1903 if (release_callback) { 1906 if (release_callback) {
1904 DCHECK(!subscriber_texture); 1907 DCHECK(!subscriber_texture);
1905 release_callback->Run(sync_point, false); 1908 release_callback->Run(sync_point, false);
1906 } else { 1909 } else {
1907 // If there's no release callback, then the texture is from 1910 // If there's no release callback, then the texture is from
1908 // idle_frame_subscriber_textures_ and we can put it back there. 1911 // idle_frame_subscriber_textures_ and we can put it back there.
1909 DCHECK(subscriber_texture); 1912 DCHECK(subscriber_texture);
1910 subscriber_texture->UpdateSyncPoint(sync_point); 1913 subscriber_texture->set_sync_point(sync_point);
1911 if (rwhva && rwhva->frame_subscriber_ && subscriber_texture->texture_id()) 1914 if (rwhva && rwhva->frame_subscriber_ && subscriber_texture->texture_id())
1912 rwhva->idle_frame_subscriber_textures_.push_back(subscriber_texture); 1915 rwhva->idle_frame_subscriber_textures_.push_back(subscriber_texture);
1913 subscriber_texture = NULL; 1916 subscriber_texture = NULL;
1914 } 1917 }
1915 } 1918 }
1916 1919
1917 // static 1920 // static
1918 void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo( 1921 void RenderWidgetHostViewAura::CopyFromCompositingSurfaceHasResultForVideo(
1919 base::WeakPtr<RenderWidgetHostViewAura> rwhva, 1922 base::WeakPtr<RenderWidgetHostViewAura> rwhva,
1920 scoped_refptr<OwnedMailbox> subscriber_texture, 1923 scoped_refptr<OwnedMailbox> subscriber_texture,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 yuv_readback_pipeline = rwhva->yuv_readback_pipeline_.get(); 2028 yuv_readback_pipeline = rwhva->yuv_readback_pipeline_.get();
2026 } 2029 }
2027 2030
2028 ignore_result(scoped_callback_runner.Release()); 2031 ignore_result(scoped_callback_runner.Release());
2029 base::Callback<void(bool result)> finished_callback = base::Bind( 2032 base::Callback<void(bool result)> finished_callback = base::Bind(
2030 &RenderWidgetHostViewAura::CopyFromCompositingSurfaceFinishedForVideo, 2033 &RenderWidgetHostViewAura::CopyFromCompositingSurfaceFinishedForVideo,
2031 rwhva->AsWeakPtr(), 2034 rwhva->AsWeakPtr(),
2032 callback, 2035 callback,
2033 subscriber_texture, 2036 subscriber_texture,
2034 base::Passed(&release_callback)); 2037 base::Passed(&release_callback));
2035 yuv_readback_pipeline->ReadbackYUV( 2038 yuv_readback_pipeline->ReadbackYUV(texture_mailbox.mailbox(),
2036 texture_mailbox.name(), 2039 texture_mailbox.sync_point(),
2037 texture_mailbox.sync_point(), 2040 video_frame.get(),
2038 video_frame.get(), 2041 finished_callback);
2039 finished_callback);
2040 } 2042 }
2041 2043
2042 void RenderWidgetHostViewAura::GetScreenInfo(WebScreenInfo* results) { 2044 void RenderWidgetHostViewAura::GetScreenInfo(WebScreenInfo* results) {
2043 GetScreenInfoForWindow(results, window_->GetRootWindow() ? window_ : NULL); 2045 GetScreenInfoForWindow(results, window_->GetRootWindow() ? window_ : NULL);
2044 } 2046 }
2045 2047
2046 gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() { 2048 gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() {
2047 #if defined(OS_WIN) 2049 #if defined(OS_WIN)
2048 // aura::Window::GetBoundsInScreen doesn't take non-client area into 2050 // aura::Window::GetBoundsInScreen doesn't take non-client area into
2049 // account. 2051 // account.
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
3452 RenderWidgetHost* widget) { 3454 RenderWidgetHost* widget) {
3453 return new RenderWidgetHostViewAura(widget); 3455 return new RenderWidgetHostViewAura(widget);
3454 } 3456 }
3455 3457
3456 // static 3458 // static
3457 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) { 3459 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) {
3458 GetScreenInfoForWindow(results, NULL); 3460 GetScreenInfoForWindow(results, NULL);
3459 } 3461 }
3460 3462
3461 } // namespace content 3463 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698