Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: content/renderer/render_widget.cc

Issue 10227004: RenderWidget's scheduleComposite should return a bool. (true iff a prompt composite will come). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_widget.h ('k') | ui/gfx/compositor/compositor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 DoDeferredUpdateAndSendInputAck(); 818 DoDeferredUpdateAndSendInputAck();
819 } 819 }
820 820
821 void RenderWidget::DoDeferredUpdateAndSendInputAck() { 821 void RenderWidget::DoDeferredUpdateAndSendInputAck() {
822 DoDeferredUpdate(); 822 DoDeferredUpdate();
823 823
824 if (pending_input_event_ack_.get()) 824 if (pending_input_event_ack_.get())
825 Send(pending_input_event_ack_.release()); 825 Send(pending_input_event_ack_.release());
826 } 826 }
827 827
828 bool RenderWidget::CanDoDeferredUpdate() const {
829 if (!webwidget_) {
830 TRACE_EVENT0("renderer", "EarlyOut_NoWebWidget");
831 return false;
832 }
833 if (!host_window_set_) {
834 TRACE_EVENT0("renderer", "EarlyOut_NoHostWindow");
835 return false;
836 }
837 if (update_reply_pending_) {
838 TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending");
839 return false;
840 }
841 if (is_accelerated_compositing_active_ &&
842 num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) {
843 TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending");
844 return false;
845 }
846 return true;
847 }
848
849 bool RenderWidget::ShouldSuppressDeferredUpdates() const {
850 return is_hidden_ || size_.IsEmpty();
851 }
852
828 void RenderWidget::DoDeferredUpdate() { 853 void RenderWidget::DoDeferredUpdate() {
829 TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate"); 854 TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate");
830 855
831 if (!webwidget_) 856 if (!CanDoDeferredUpdate())
832 return; 857 return;
833 858
834 if (!host_window_set_) {
835 TRACE_EVENT0("renderer", "EarlyOut_NoHostWindow");
836 return;
837 }
838 if (update_reply_pending_) {
839 TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending");
840 return;
841 }
842 if (is_accelerated_compositing_active_ &&
843 num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) {
844 TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending");
845 return;
846 }
847
848 // Suppress updating when we are hidden. 859 // Suppress updating when we are hidden.
849 if (is_hidden_ || size_.IsEmpty()) { 860 if (ShouldSuppressDeferredUpdates()) {
850 paint_aggregator_.ClearPendingUpdate(); 861 paint_aggregator_.ClearPendingUpdate();
851 needs_repainting_on_restore_ = true; 862 needs_repainting_on_restore_ = true;
852 TRACE_EVENT0("renderer", "EarlyOut_NotVisible"); 863 TRACE_EVENT0("renderer", "EarlyOut_NotVisible");
853 return; 864 return;
854 } 865 }
855 866
856 if (is_accelerated_compositing_active_) 867 if (is_accelerated_compositing_active_)
857 using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers(); 868 using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers();
858 869
859 // Tracking of frame rate jitter 870 // Tracking of frame rate jitter
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 params.view_size = size_; 1188 params.view_size = size_;
1178 params.plugin_window_moves.swap(plugin_window_moves_); 1189 params.plugin_window_moves.swap(plugin_window_moves_);
1179 params.flags = next_paint_flags_; 1190 params.flags = next_paint_flags_;
1180 params.scroll_offset = GetScrollOffset(); 1191 params.scroll_offset = GetScrollOffset();
1181 params.needs_ack = false; 1192 params.needs_ack = false;
1182 1193
1183 Send(new ViewHostMsg_UpdateRect(routing_id_, params)); 1194 Send(new ViewHostMsg_UpdateRect(routing_id_, params));
1184 next_paint_flags_ = 0; 1195 next_paint_flags_ = 0;
1185 } 1196 }
1186 1197
1187 void RenderWidget::scheduleComposite() { 1198 #if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL)
1199 #define SC_RETURN_TYPE bool
1200 #else
1201 #define SC_RETURN_TYPE void
1202 #endif
1203
1204 SC_RETURN_TYPE RenderWidget::scheduleComposite() {
1188 if (WebWidgetHandlesCompositorScheduling()) { 1205 if (WebWidgetHandlesCompositorScheduling()) {
1189 webwidget_->composite(false); 1206 webwidget_->composite(false);
1207 #if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL)
1208 return true;
1209 #endif
1190 } else { 1210 } else {
1191 // TODO(nduca): replace with something a little less hacky. The reason this 1211 // TODO(nduca): replace with something a little less hacky. The reason this
1192 // hack is still used is because the Invalidate-DoDeferredUpdate loop 1212 // hack is still used is because the Invalidate-DoDeferredUpdate loop
1193 // contains a lot of host-renderer synchronization logic that is still 1213 // contains a lot of host-renderer synchronization logic that is still
1194 // important for the accelerated compositing case. The option of simply 1214 // important for the accelerated compositing case. The option of simply
1195 // duplicating all that code is less desirable than "faking out" the 1215 // duplicating all that code is less desirable than "faking out" the
1196 // invalidation path using a magical damage rect. 1216 // invalidation path using a magical damage rect.
1197 didInvalidateRect(WebRect(0, 0, 1, 1)); 1217 didInvalidateRect(WebRect(0, 0, 1, 1));
1218 #if defined(WEBWIDGETCLIENT_SCHEDULECOMPOSITE_RETURNS_BOOL)
1219 return CanDoDeferredUpdate() && !ShouldSuppressDeferredUpdates();
jamesr 2012/05/08 23:42:40 what happens if ShouldSuppress...() is false, but
1220 #endif
1198 } 1221 }
1199 } 1222 }
1200 1223
1201 void RenderWidget::scheduleAnimation() { 1224 void RenderWidget::scheduleAnimation() {
1202 if (animation_update_pending_) 1225 if (animation_update_pending_)
1203 return; 1226 return;
1204 1227
1205 TRACE_EVENT0("gpu", "RenderWidget::scheduleAnimation"); 1228 TRACE_EVENT0("gpu", "RenderWidget::scheduleAnimation");
1206 animation_update_pending_ = true; 1229 animation_update_pending_ = true;
1207 if (!animation_timer_.IsRunning()) { 1230 if (!animation_timer_.IsRunning()) {
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 } 1742 }
1720 } 1743 }
1721 1744
1722 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { 1745 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) {
1723 return false; 1746 return false;
1724 } 1747 }
1725 1748
1726 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { 1749 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const {
1727 return false; 1750 return false;
1728 } 1751 }
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | ui/gfx/compositor/compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698