Index: chrome/browser/renderer_host/render_widget_host.cc |
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc |
index a6efd58ae1847174aec14d0b9229276878560dfa..d5161ed6809dc2c497b9193569e144bf9d25d6f4 100644 |
--- a/chrome/browser/renderer_host/render_widget_host.cc |
+++ b/chrome/browser/renderer_host/render_widget_host.cc |
@@ -79,6 +79,9 @@ RenderWidgetHost::RenderWidgetHost(RenderProcessHost* process, |
is_loading_(false), |
is_hidden_(false), |
is_gpu_rendering_active_(false), |
+#if defined(OS_MACOSX) |
+ needs_to_hide_gpu_view_on_paint_(false), |
+#endif |
repaint_ack_pending_(false), |
resize_ack_pending_(false), |
mouse_move_pending_(false), |
@@ -823,6 +826,14 @@ void RenderWidgetHost::OnMsgUpdateRect( |
} |
} |
+#if defined(OS_MACOSX) |
+ if (needs_to_hide_gpu_view_on_paint_) { |
+ if (view_) |
+ view_->GpuRenderingStateDidChange(); |
+ needs_to_hide_gpu_view_on_paint_ = false; |
+ } |
+#endif |
+ |
// ACK early so we can prefetch the next PaintRect if there is a next one. |
// This must be done AFTER we're done painting with the bitmap supplied by the |
// renderer. This ACK is a signal to the renderer that the backing store can |
@@ -971,8 +982,14 @@ void RenderWidgetHost::OnMsgGpuRenderingActivated(bool activated) { |
#endif |
is_gpu_rendering_active_ = activated; |
#if defined(OS_MACOSX) |
- if (old_state != is_gpu_rendering_active_ && view_) |
- view_->GpuRenderingStateDidChange(); |
+ if (old_state != is_gpu_rendering_active_ && view_) { |
+ if (is_gpu_rendering_active_) { |
+ view_->GpuRenderingStateDidChange(); |
+ } else { |
+ // Delay revealing the non-gpu view until it has been repainted. |
+ needs_to_hide_gpu_view_on_paint_ = true; |
+ } |
+ } |
#endif |
} |