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/browser/renderer_host/render_widget_host_impl.h" | 5 #include "content/browser/renderer_host/render_widget_host_impl.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 // request to the renderer to paint the view if required. | 798 // request to the renderer to paint the view if required. |
799 if (!repaint_ack_pending_ && !resize_ack_pending_) { | 799 if (!repaint_ack_pending_ && !resize_ack_pending_) { |
800 repaint_start_time_ = TimeTicks::Now(); | 800 repaint_start_time_ = TimeTicks::Now(); |
801 repaint_ack_pending_ = true; | 801 repaint_ack_pending_ = true; |
802 TRACE_EVENT_ASYNC_BEGIN0( | 802 TRACE_EVENT_ASYNC_BEGIN0( |
803 "renderer_host", "RenderWidgetHostImpl::repaint_ack_pending_", this); | 803 "renderer_host", "RenderWidgetHostImpl::repaint_ack_pending_", this); |
804 Send(new ViewMsg_Repaint(routing_id_, view_size)); | 804 Send(new ViewMsg_Repaint(routing_id_, view_size)); |
805 } | 805 } |
806 | 806 |
807 TimeDelta max_delay = TimeDelta::FromMilliseconds(kPaintMsgTimeoutMS); | 807 TimeDelta max_delay = TimeDelta::FromMilliseconds(kPaintMsgTimeoutMS); |
808 TimeTicks end_time = TimeTicks::Now() + max_delay; | 808 TimeTicks start_time = TimeTicks::Now(); |
| 809 TimeDelta elapsed_delay; |
809 do { | 810 do { |
810 TRACE_EVENT0("renderer_host", "WaitForSurface::WaitForUpdate"); | 811 TRACE_EVENT0("renderer_host", "WaitForSurface::WaitForUpdate"); |
811 | 812 |
812 // When we have asked the RenderWidget to resize, and we are still waiting | 813 // When we have asked the RenderWidget to resize, and we are still waiting |
813 // on a response, block for a little while to see if we can't get a response | 814 // on a response, block for a little while to see if we can't get a response |
814 // before returning the old (incorrectly sized) backing store. | 815 // before returning the old (incorrectly sized) backing store. |
815 IPC::Message msg; | 816 IPC::Message msg; |
816 if (RenderWidgetResizeHelper::Get()->WaitForSingleTaskToRun(max_delay)) { | 817 if (RenderWidgetResizeHelper::Get()->WaitForSingleTaskToRun(max_delay)) { |
817 | 818 |
818 // For auto-resized views, current_size_ determines the view_size and it | 819 // For auto-resized views, current_size_ determines the view_size and it |
819 // may have changed during the handling of an UpdateRect message. | 820 // may have changed during the handling of an UpdateRect message. |
820 if (auto_resize_enabled_) | 821 if (auto_resize_enabled_) |
821 view_size = current_size_; | 822 view_size = current_size_; |
822 | 823 |
823 // Break now if we got a backing store or accelerated surface of the | 824 // Break now if we got a backing store or accelerated surface of the |
824 // correct size. | 825 // correct size. |
825 if (view_->HasAcceleratedSurface(view_size)) | 826 if (view_->HasAcceleratedSurface(view_size)) |
826 return; | 827 return; |
827 } else { | 828 } else { |
828 TRACE_EVENT0("renderer_host", "WaitForSurface::Timeout"); | 829 TRACE_EVENT0("renderer_host", "WaitForSurface::Timeout"); |
829 break; | 830 break; |
830 } | 831 } |
831 | 832 |
832 // Loop if we still have time left and haven't gotten a properly sized | 833 // Loop if we still have time left and haven't gotten a properly sized |
833 // BackingStore yet. This is necessary to support the GPU path which | 834 // BackingStore yet. This is necessary to support the GPU path which |
834 // typically has multiple frames pipelined -- we may need to skip one or two | 835 // typically has multiple frames pipelined -- we may need to skip one or two |
835 // BackingStore messages to get to the latest. | 836 // BackingStore messages to get to the latest. |
836 max_delay = end_time - TimeTicks::Now(); | 837 elapsed_delay = TimeTicks::Now() - start_time; |
837 } while (max_delay > TimeDelta::FromSeconds(0)); | 838 } while (elapsed_delay < max_delay); |
| 839 |
| 840 UMA_HISTOGRAM_CUSTOM_TIMES("OSX.RendererHost.SurfaceWaitTime", elapsed_delay, |
| 841 TimeDelta::FromMilliseconds(1), |
| 842 TimeDelta::FromMilliseconds(200), 50); |
838 } | 843 } |
839 #endif | 844 #endif |
840 | 845 |
841 bool RenderWidgetHostImpl::ScheduleComposite() { | 846 bool RenderWidgetHostImpl::ScheduleComposite() { |
842 if (is_hidden_ || current_size_.IsEmpty() || repaint_ack_pending_ || | 847 if (is_hidden_ || current_size_.IsEmpty() || repaint_ack_pending_ || |
843 resize_ack_pending_) { | 848 resize_ack_pending_) { |
844 return false; | 849 return false; |
845 } | 850 } |
846 | 851 |
847 // Send out a request to the renderer to paint the view if required. | 852 // Send out a request to the renderer to paint the view if required. |
(...skipping 1316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2164 } | 2169 } |
2165 #endif | 2170 #endif |
2166 | 2171 |
2167 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { | 2172 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { |
2168 if (view_) | 2173 if (view_) |
2169 return view_->PreferredReadbackFormat(); | 2174 return view_->PreferredReadbackFormat(); |
2170 return kN32_SkColorType; | 2175 return kN32_SkColorType; |
2171 } | 2176 } |
2172 | 2177 |
2173 } // namespace content | 2178 } // namespace content |
OLD | NEW |