Chromium Code Reviews| 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 |
| } |
| } |