diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-31 22:57:49 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-31 22:57:49 +0000 |
commit | 33e9cda3cdc7dfa6c0787814512fb6b42b0ff408 (patch) | |
tree | 428a14ec79e3024cf852690f4d3a31b8b655a573 /content/browser | |
parent | 5eab39e3f747dbb4caa4dfff6029ec00572e6d89 (diff) | |
download | chromium_src-33e9cda3cdc7dfa6c0787814512fb6b42b0ff408.zip chromium_src-33e9cda3cdc7dfa6c0787814512fb6b42b0ff408.tar.gz chromium_src-33e9cda3cdc7dfa6c0787814512fb6b42b0ff408.tar.bz2 |
Add IPC allowing GPU process to tell browser process to temporarily drop a front buffer.
This is to conserve video memory for hidden tabs that are not expected to be needed in the near term.
Review URL: https://chromiumcodereview.appspot.com/9303009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119979 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser')
13 files changed, 43 insertions, 0 deletions
diff --git a/content/browser/gpu/gpu_process_host_ui_shim.cc b/content/browser/gpu/gpu_process_host_ui_shim.cc index 7d26d66..4f32e79 100644 --- a/content/browser/gpu/gpu_process_host_ui_shim.cc +++ b/content/browser/gpu/gpu_process_host_ui_shim.cc @@ -187,6 +187,8 @@ bool GpuProcessHostUIShim::OnControlMessageReceived( OnAcceleratedSurfaceBuffersSwapped) IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfacePostSubBuffer, OnAcceleratedSurfacePostSubBuffer) + IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSuspend, + OnAcceleratedSurfaceSuspend) IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, OnGraphicsInfoCollected) @@ -371,6 +373,17 @@ void GpuProcessHostUIShim::OnAcceleratedSurfacePostSubBuffer( view->AcceleratedSurfacePostSubBuffer(params, host_id_); } +void GpuProcessHostUIShim::OnAcceleratedSurfaceSuspend(int32 surface_id) { + TRACE_EVENT0("renderer", + "GpuProcessHostUIShim::OnAcceleratedSurfaceSuspend"); + + RenderWidgetHostView* view = GetRenderWidgetHostViewFromSurfaceID(surface_id); + if (!view) + return; + + view->AcceleratedSurfaceSuspend(); +} + #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) void GpuProcessHostUIShim::OnAcceleratedSurfaceRelease( diff --git a/content/browser/gpu/gpu_process_host_ui_shim.h b/content/browser/gpu/gpu_process_host_ui_shim.h index 8b5a5f8..2ce9866 100644 --- a/content/browser/gpu/gpu_process_host_ui_shim.h +++ b/content/browser/gpu/gpu_process_host_ui_shim.h @@ -94,6 +94,7 @@ class GpuProcessHostUIShim const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params); void OnAcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params); + void OnAcceleratedSurfaceSuspend(int32 surface_id); #if defined(OS_MACOSX) || defined(UI_COMPOSITOR_IMAGE_TRANSPORT) void OnAcceleratedSurfaceNew( diff --git a/content/browser/renderer_host/render_widget_host_view.h b/content/browser/renderer_host/render_widget_host_view.h index e73dfcb..f3e9b8b 100644 --- a/content/browser/renderer_host/render_widget_host_view.h +++ b/content/browser/renderer_host/render_widget_host_view.h @@ -224,6 +224,10 @@ class RenderWidgetHostView { const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) = 0; + // Release the accelerated surface temporarily. It will be recreated on the + // next swap buffers or post sub buffer. + virtual void AcceleratedSurfaceSuspend() = 0; + #if defined(OS_MACOSX) // Tells the view whether or not to accept first responder status. If |flag| // is true, the view does not accept first responder status and instead 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 b77fefa..a3ea5a2 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -429,6 +429,9 @@ void RenderWidgetHostViewAura::AcceleratedSurfacePostSubBuffer( #endif } +void RenderWidgetHostViewAura::AcceleratedSurfaceSuspend() { +} + #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) void RenderWidgetHostViewAura::AcceleratedSurfaceNew( int32 width, diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index 58d9e1c..f4d9f51 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h @@ -94,6 +94,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAura virtual void AcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) OVERRIDE; + virtual void AcceleratedSurfaceSuspend() OVERRIDE; #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) virtual void AcceleratedSurfaceNew( int32 width, diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.cc b/content/browser/renderer_host/render_widget_host_view_gtk.cc index b77b51a..863dc3e 100644 --- a/content/browser/renderer_host/render_widget_host_view_gtk.cc +++ b/content/browser/renderer_host/render_widget_host_view_gtk.cc @@ -1023,6 +1023,10 @@ void RenderWidgetHostViewGtk::AcceleratedSurfacePostSubBuffer( RenderWidgetHost::AcknowledgePostSubBuffer(params.route_id, gpu_host_id); } +void RenderWidgetHostViewGtk::AcceleratedSurfaceSuspend() { +} + + void RenderWidgetHostViewGtk::SetBackground(const SkBitmap& background) { RenderWidgetHostView::SetBackground(background); host_->Send(new ViewMsg_SetBackground(host_->routing_id(), background)); diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.h b/content/browser/renderer_host/render_widget_host_view_gtk.h index 1b14a23c..3601164 100644 --- a/content/browser/renderer_host/render_widget_host_view_gtk.h +++ b/content/browser/renderer_host/render_widget_host_view_gtk.h @@ -98,6 +98,7 @@ class CONTENT_EXPORT RenderWidgetHostViewGtk : public RenderWidgetHostView { virtual void AcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) OVERRIDE; + virtual void AcceleratedSurfaceSuspend() OVERRIDE; virtual void SetBackground(const SkBitmap& background) OVERRIDE; virtual void CreatePluginContainer(gfx::PluginWindowHandle id) OVERRIDE; virtual void DestroyPluginContainer(gfx::PluginWindowHandle id) OVERRIDE; diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h index 028ef37..1c39904 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.h +++ b/content/browser/renderer_host/render_widget_host_view_mac.h @@ -264,6 +264,7 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView { virtual void AcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) OVERRIDE; + virtual void AcceleratedSurfaceSuspend() OVERRIDE; virtual void GetScreenInfo(WebKit::WebScreenInfo* results) OVERRIDE; virtual gfx::Rect GetRootWindowBounds() OVERRIDE; virtual gfx::PluginWindowHandle GetCompositingSurface() OVERRIDE; diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index 4a88a6b..9fc8dec 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm @@ -934,6 +934,9 @@ void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer( } } +void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() { +} + void RenderWidgetHostViewMac::UpdateRootGpuViewVisibility( bool show_gpu_widget) { TRACE_EVENT1("renderer_host", diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc index b6b7477..a8ab373 100644 --- a/content/browser/renderer_host/render_widget_host_view_win.cc +++ b/content/browser/renderer_host/render_widget_host_view_win.cc @@ -2140,6 +2140,13 @@ void RenderWidgetHostViewWin::AcceleratedSurfacePostSubBuffer( RenderWidgetHost::AcknowledgePostSubBuffer(params.route_id, gpu_host_id); } +void RenderWidgetHostViewWin::AcceleratedSurfaceSuspend() { + if (!accelerated_surface_.get()) + return; + + accelerated_surface_->Suspend(); +} + void RenderWidgetHostViewWin::SetAccessibilityFocus(int acc_obj_id) { if (!render_widget_host_) return; diff --git a/content/browser/renderer_host/render_widget_host_view_win.h b/content/browser/renderer_host/render_widget_host_view_win.h index a48f8a9..a4a6a05 100644 --- a/content/browser/renderer_host/render_widget_host_view_win.h +++ b/content/browser/renderer_host/render_widget_host_view_win.h @@ -205,6 +205,7 @@ class RenderWidgetHostViewWin virtual void AcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) OVERRIDE; + virtual void AcceleratedSurfaceSuspend() OVERRIDE; virtual void OnAccessibilityNotifications( const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params ) OVERRIDE; diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc index 764ee86..6e372fb 100644 --- a/content/browser/renderer_host/test_render_view_host.cc +++ b/content/browser/renderer_host/test_render_view_host.cc @@ -222,6 +222,9 @@ void TestRenderWidgetHostView::AcceleratedSurfacePostSubBuffer( int gpu_host_id) { } +void TestRenderWidgetHostView::AcceleratedSurfaceSuspend() { +} + #if defined(OS_MACOSX) gfx::Rect TestRenderWidgetHostView::GetViewCocoaBounds() const { diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h index 4af8386..f770893 100644 --- a/content/browser/renderer_host/test_render_view_host.h +++ b/content/browser/renderer_host/test_render_view_host.h @@ -102,6 +102,7 @@ class TestRenderWidgetHostView : public RenderWidgetHostView { virtual void AcceleratedSurfacePostSubBuffer( const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, int gpu_host_id) OVERRIDE; + virtual void AcceleratedSurfaceSuspend() OVERRIDE; #if defined(OS_MACOSX) virtual void SetTakesFocusOnlyOnMouseDown(bool flag) OVERRIDE {} virtual gfx::Rect GetViewCocoaBounds() const OVERRIDE; |