Index: content/browser/renderer_host/render_process_host_impl.cc |
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc |
index 499f1616223036ecf528498a9d3b0b8a08391e9a..e29a7e620aeb6407b3884068ece3adb878fdeb00 100644 |
--- a/content/browser/renderer_host/render_process_host_impl.cc |
+++ b/content/browser/renderer_host/render_process_host_impl.cc |
@@ -400,7 +400,8 @@ RenderProcessHostImpl::RenderProcessHostImpl( |
dummy_shutdown_event_(false, false), |
#endif |
supports_browser_plugin_(supports_browser_plugin), |
- is_guest_(is_guest) { |
+ is_guest_(is_guest), |
+ gpu_observer_registered_(false) { |
widget_helper_ = new RenderWidgetHelper(); |
ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); |
@@ -429,6 +430,11 @@ RenderProcessHostImpl::~RenderProcessHostImpl() { |
DCHECK(!run_renderer_in_process()); |
ChildProcessSecurityPolicyImpl::GetInstance()->Remove(GetID()); |
+ if (gpu_observer_registered_) { |
+ GpuDataManagerImpl::GetInstance()->RemoveObserver(this); |
+ gpu_observer_registered_ = false; |
+ } |
+ |
// We may have some unsent messages at this point, but that's OK. |
channel_.reset(); |
while (!queued_messages_.empty()) { |
@@ -552,6 +558,11 @@ bool RenderProcessHostImpl::Init() { |
fast_shutdown_started_ = false; |
} |
+ if (!gpu_observer_registered_) { |
+ gpu_observer_registered_ = true; |
+ GpuDataManagerImpl::GetInstance()->AddObserver(this); |
+ } |
+ |
is_initialized_ = true; |
return true; |
} |
@@ -1773,4 +1784,20 @@ void RenderProcessHostImpl::OnCompositorSurfaceBuffersSwappedNoHost( |
ack_params); |
} |
+void RenderProcessHostImpl::OnGpuSwitching() { |
+ for (RenderWidgetHostsIterator iter = GetRenderWidgetHostsIterator(); |
+ !iter.IsAtEnd(); |
+ iter.Advance()) { |
+ const RenderWidgetHost* widget = iter.GetCurrentValue(); |
+ DCHECK(widget); |
+ if (!widget || !widget->IsRenderView()) |
+ continue; |
+ |
+ RenderViewHost* rvh = |
+ RenderViewHost::From(const_cast<RenderWidgetHost*>(widget)); |
+ |
+ rvh->UpdateWebkitPreferences(rvh->GetWebkitPreferences()); |
+ } |
+} |
+ |
} // namespace content |