Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index ed8eb0cb5dfa3f118e642f12e997f1776fff7be9..5a165050350a07c25e0a75c59b476c9c196db901 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -825,28 +825,39 @@ void RenderWidget::DoDeferredUpdateAndSendInputAck() { |
Send(pending_input_event_ack_.release()); |
} |
-void RenderWidget::DoDeferredUpdate() { |
- TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate"); |
- |
- if (!webwidget_) |
- return; |
- |
+bool RenderWidget::CanDoDeferredUpdate() const { |
+ if (!webwidget_) { |
+ TRACE_EVENT0("renderer", "EarlyOut_NoWebWidget"); |
+ return false; |
+ } |
if (!host_window_set_) { |
TRACE_EVENT0("renderer", "EarlyOut_NoHostWindow"); |
- return; |
+ return false; |
} |
if (update_reply_pending_) { |
TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending"); |
- return; |
+ return false; |
} |
if (is_accelerated_compositing_active_ && |
num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) { |
TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending"); |
- return; |
+ return false; |
} |
+ return true; |
+} |
+ |
+bool RenderWidget::ShouldSuppressDeferredUpdates() const { |
+ return is_hidden_ || size_.IsEmpty(); |
+} |
+ |
+void RenderWidget::DoDeferredUpdate() { |
+ TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate"); |
+ |
+ if (!CanDoDeferredUpdate()) |
+ return; |
// Suppress updating when we are hidden. |
- if (is_hidden_ || size_.IsEmpty()) { |
+ if (ShouldSuppressDeferredUpdates()) { |
paint_aggregator_.ClearPendingUpdate(); |
needs_repainting_on_restore_ = true; |
TRACE_EVENT0("renderer", "EarlyOut_NotVisible"); |
@@ -1184,9 +1195,18 @@ void RenderWidget::didCompleteSwapBuffers() { |
next_paint_flags_ = 0; |
} |
-void RenderWidget::scheduleComposite() { |
+#if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL) |
+#define SC_RETURN_TYPE bool |
+#else |
+#define SC_RETURN_TYPE void |
+#endif |
+ |
+SC_RETURN_TYPE RenderWidget::scheduleComposite() { |
if (WebWidgetHandlesCompositorScheduling()) { |
webwidget_->composite(false); |
+#if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL) |
+ return true; |
+#endif |
} else { |
// TODO(nduca): replace with something a little less hacky. The reason this |
// hack is still used is because the Invalidate-DoDeferredUpdate loop |
@@ -1195,6 +1215,9 @@ void RenderWidget::scheduleComposite() { |
// duplicating all that code is less desirable than "faking out" the |
// invalidation path using a magical damage rect. |
didInvalidateRect(WebRect(0, 0, 1, 1)); |
+#if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL) |
+ return CanDoDeferredUpdate() && !ShouldSuppressDeferredUpdates(); |
jamesr
2012/05/08 23:42:40
what happens if ShouldSuppress...() is false, but
|
+#endif |
} |
} |