Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index 1a5038fd8988908a76e30d4f57f16ee5d222bd6b..1729aced25563227bfab9b38eb6a34f773c91d1e 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -388,8 +388,10 @@ bool RenderWidget::SupportsAsynchronousSwapBuffers() |
| return false; |
| } |
| -void RenderWidget::OnSwapBuffersAborted() |
| -{ |
| +void RenderWidget::OnSwapBuffersAborted() { |
| + if (WebWidgetHandlesCompositorScheduling()) |
| + return; |
| + |
| TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); |
| while (!updates_pending_swap_.empty()) { |
| ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front(); |
| @@ -404,6 +406,9 @@ void RenderWidget::OnSwapBuffersAborted() |
| } |
| void RenderWidget::OnSwapBuffersPosted() { |
|
nduca
2011/11/11 06:01:08
Can we get rid of this completely? E.g. never use
|
| + if (WebWidgetHandlesCompositorScheduling()) |
| + return; |
| + |
| TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted"); |
| if (using_asynchronous_swapbuffers_) { |
| @@ -418,6 +423,9 @@ void RenderWidget::OnSwapBuffersPosted() { |
| } |
| void RenderWidget::OnSwapBuffersComplete() { |
| + if (WebWidgetHandlesCompositorScheduling()) |
| + return; |
| + |
| TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete"); |
| // When compositing deactivates, we reset the swapbuffers pending count. The |
| // swapbuffers acks may still arrive, however. |
| @@ -990,6 +998,54 @@ void RenderWidget::didDeactivateCompositor() { |
| if (using_asynchronous_swapbuffers_) |
| using_asynchronous_swapbuffers_ = false; |
| + |
| + // Clear out pending updates. |
| + while (!updates_pending_swap_.empty()) { |
| + ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front(); |
| + updates_pending_swap_.pop(); |
| + if (msg) |
| + Send(msg); |
| + } |
| +} |
| + |
| +void RenderWidget::didBeginFrame() |
| +{ |
| + if (!WebWidgetHandlesCompositorScheduling()) |
| + return; |
| + |
| + ViewHostMsg_UpdateRect* msg = NULL; |
| + if (next_paint_flags_ || plugin_window_moves_.size()) { |
| + DCHECK(!pending_update_params_.get()); |
| + pending_update_params_.reset(new ViewHostMsg_UpdateRect_Params); |
| + pending_update_params_->view_size = size_; |
| + pending_update_params_->resizer_rect = resizer_rect_; |
| + pending_update_params_->plugin_window_moves.swap(plugin_window_moves_); |
| + pending_update_params_->flags = next_paint_flags_; |
| + pending_update_params_->scroll_offset = GetScrollOffset(); |
| + pending_update_params_->flags = next_paint_flags_; |
| + next_paint_flags_ = 0; |
| + } |
| + |
| + if (pending_update_params_.get()) { |
| + msg = new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_); |
| + pending_update_params_.reset(); |
| + } |
| + updates_pending_swap_.push(msg); |
| +} |
| + |
| +void RenderWidget::didFinishFrame() |
|
nduca
2011/11/11 06:01:08
One thing that nags me here is that Antoine's patc
|
| +{ |
| + if (!WebWidgetHandlesCompositorScheduling()) |
| + return; |
| + |
| + if (updates_pending_swap_.empty()) |
| + return; |
| + |
| + ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front(); |
| + updates_pending_swap_.pop(); |
| + if (msg) { |
| + Send(msg); |
| + } |
| } |
| void RenderWidget::scheduleComposite() { |