OLD | NEW |
---|---|
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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
168 } | 168 } |
169 | 169 |
170 // This is used to complete pending inits and non-pending inits. For non- | 170 // This is used to complete pending inits and non-pending inits. For non- |
171 // pending cases, the parent will be the same as the current parent. This | 171 // pending cases, the parent will be the same as the current parent. This |
172 // indicates we do not need to reparent or anything. | 172 // indicates we do not need to reparent or anything. |
173 void RenderWidget::CompleteInit(gfx::NativeViewId parent_hwnd) { | 173 void RenderWidget::CompleteInit(gfx::NativeViewId parent_hwnd) { |
174 DCHECK(routing_id_ != MSG_ROUTING_NONE); | 174 DCHECK(routing_id_ != MSG_ROUTING_NONE); |
175 | 175 |
176 host_window_ = parent_hwnd; | 176 host_window_ = parent_hwnd; |
177 | 177 |
178 DoDeferredUpdate(); | |
179 | |
178 Send(new ViewHostMsg_RenderViewReady(routing_id_)); | 180 Send(new ViewHostMsg_RenderViewReady(routing_id_)); |
179 } | 181 } |
180 | 182 |
181 void RenderWidget::SetSwappedOut(bool is_swapped_out) { | 183 void RenderWidget::SetSwappedOut(bool is_swapped_out) { |
182 // We should only toggle between states. | 184 // We should only toggle between states. |
183 DCHECK(is_swapped_out_ != is_swapped_out); | 185 DCHECK(is_swapped_out_ != is_swapped_out); |
184 is_swapped_out_ = is_swapped_out; | 186 is_swapped_out_ = is_swapped_out; |
185 | 187 |
186 // If we are swapping out, we will call ReleaseProcess, allowing the process | 188 // If we are swapping out, we will call ReleaseProcess, allowing the process |
187 // to exit if all of its RenderViews are swapped out. We wait until the | 189 // to exit if all of its RenderViews are swapped out. We wait until the |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
730 | 732 |
731 if (pending_input_event_ack_.get()) | 733 if (pending_input_event_ack_.get()) |
732 Send(pending_input_event_ack_.release()); | 734 Send(pending_input_event_ack_.release()); |
733 } | 735 } |
734 | 736 |
735 void RenderWidget::DoDeferredUpdate() { | 737 void RenderWidget::DoDeferredUpdate() { |
736 TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate"); | 738 TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate"); |
737 | 739 |
738 if (!webwidget_) | 740 if (!webwidget_) |
739 return; | 741 return; |
742 | |
743 if (!host_window_) { | |
744 TRACE_EVENT0("renderer", "EarlyOut_NoHostWindow"); | |
745 return; | |
746 } | |
740 if (update_reply_pending_) { | 747 if (update_reply_pending_) { |
741 TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending"); | 748 TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending"); |
742 return; | 749 return; |
743 } | 750 } |
744 if (is_accelerated_compositing_active_ && | 751 if (is_accelerated_compositing_active_ && |
745 num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) { | 752 num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) { |
746 TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending"); | 753 TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending"); |
747 return; | 754 return; |
748 } | 755 } |
749 | 756 |
750 // Suppress updating when we are hidden. | 757 // Suppress updating when we are hidden. |
751 if (is_hidden_ || size_.IsEmpty()) { | 758 if (is_hidden_ || size_.IsEmpty()) { |
752 paint_aggregator_.ClearPendingUpdate(); | 759 paint_aggregator_.ClearPendingUpdate(); |
753 needs_repainting_on_restore_ = true; | 760 needs_repainting_on_restore_ = true; |
754 TRACE_EVENT0("renderer", "EarlyOut_NotVisible"); | 761 TRACE_EVENT0("renderer", "EarlyOut_NotVisible"); |
755 return; | 762 return; |
756 } | 763 } |
757 | 764 |
765 if (is_accelerated_compositing_active_) | |
piman
2012/01/30 18:10:23
is_accelerated_compositing_active_ can change valu
| |
766 using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers(); | |
767 | |
758 // Tracking of frame rate jitter | 768 // Tracking of frame rate jitter |
759 base::TimeTicks frame_begin_ticks = base::TimeTicks::Now(); | 769 base::TimeTicks frame_begin_ticks = base::TimeTicks::Now(); |
760 AnimateIfNeeded(); | 770 AnimateIfNeeded(); |
761 | 771 |
762 // Layout may generate more invalidation. It may also enable the | 772 // Layout may generate more invalidation. It may also enable the |
763 // GPU acceleration, so make sure to run layout before we send the | 773 // GPU acceleration, so make sure to run layout before we send the |
764 // GpuRenderingActivated message. | 774 // GpuRenderingActivated message. |
765 webwidget_->layout(); | 775 webwidget_->layout(); |
766 | 776 |
767 // Suppress painting if nothing is dirty. This has to be done after updating | 777 // Suppress painting if nothing is dirty. This has to be done after updating |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1003 // round-trips to the browser's UI thread before finishing the frame, | 1013 // round-trips to the browser's UI thread before finishing the frame, |
1004 // causing deadlocks if we delay the UpdateRect until we receive the | 1014 // causing deadlocks if we delay the UpdateRect until we receive the |
1005 // OnSwapBuffersComplete. So send a dummy message that will unblock the | 1015 // OnSwapBuffersComplete. So send a dummy message that will unblock the |
1006 // browser's UI thread. | 1016 // browser's UI thread. |
1007 Send(new ViewHostMsg_UpdateIsDelayed(routing_id_)); | 1017 Send(new ViewHostMsg_UpdateIsDelayed(routing_id_)); |
1008 } | 1018 } |
1009 | 1019 |
1010 is_accelerated_compositing_active_ = true; | 1020 is_accelerated_compositing_active_ = true; |
1011 Send(new ViewHostMsg_DidActivateAcceleratedCompositing( | 1021 Send(new ViewHostMsg_DidActivateAcceleratedCompositing( |
1012 routing_id_, is_accelerated_compositing_active_)); | 1022 routing_id_, is_accelerated_compositing_active_)); |
1013 | |
1014 // Note: asynchronous swapbuffer support currently only matters if | |
1015 // compositing scheduling happens on the RenderWidget. | |
1016 using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers(); | |
1017 } | 1023 } |
1018 | 1024 |
1019 void RenderWidget::didDeactivateCompositor() { | 1025 void RenderWidget::didDeactivateCompositor() { |
1020 TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor"); | 1026 TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor"); |
1021 | 1027 |
1022 is_accelerated_compositing_active_ = false; | 1028 is_accelerated_compositing_active_ = false; |
1023 Send(new ViewHostMsg_DidActivateAcceleratedCompositing( | 1029 Send(new ViewHostMsg_DidActivateAcceleratedCompositing( |
1024 routing_id_, is_accelerated_compositing_active_)); | 1030 routing_id_, is_accelerated_compositing_active_)); |
1025 | 1031 |
1026 if (using_asynchronous_swapbuffers_) | 1032 if (using_asynchronous_swapbuffers_) |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1559 } | 1565 } |
1560 } | 1566 } |
1561 | 1567 |
1562 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { | 1568 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { |
1563 return false; | 1569 return false; |
1564 } | 1570 } |
1565 | 1571 |
1566 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { | 1572 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { |
1567 return false; | 1573 return false; |
1568 } | 1574 } |
OLD | NEW |