diff options
author | miletus@chromium.org <miletus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-31 22:14:14 +0000 |
---|---|---|
committer | miletus@chromium.org <miletus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-31 22:14:14 +0000 |
commit | 24ce0000834fc461cf05779aab683eeb10fde931 (patch) | |
tree | f7bc6e2978c594d8ae6c40520d126b041e802fe7 /content | |
parent | aa1255b3ab9d58bb4cddb28c2af52e91b1ee3d75 (diff) | |
download | chromium_src-24ce0000834fc461cf05779aab683eeb10fde931.zip chromium_src-24ce0000834fc461cf05779aab683eeb10fde931.tar.gz chromium_src-24ce0000834fc461cf05779aab683eeb10fde931.tar.bz2 |
Fix a few latency related UMA calculation
1. When using input event's LatencyInfo to compute latency related UMA metric
(Event.Latency.RendererImpl.GestureScroll & Event.Latency.TouchToScrollUpdateSwap)
the current implementation counts the averaged latency component as just 1 sample.
This underestimates the latency component's contribution to the UMA metric when
the latency component's event_count is larger than 1.
The correct way is to add |event_count| samples to the UMA metric distribution.
2. When set the touch event's acked time as INPUT_EVENT_LATENCY_ACKED_COMPONENT,
current implementation loops through the uncoalesced touch event list and call
the HighResNow() for each touch event. But actually all the events are acked at
the same time as a whole coalesced event, they should have the same acked timestamp.
BUG=None.
TEST=1. On Pixel, do touchscreen scrolling on page www.rbyers.net/janky-touch-scroll.html
2. Check in chrome://histograms/ that
average Event.Latency.TouchToScrollUpdateSwap
> average Event.Latency.RendererImpl
> average Event.Latency.Browser.TouchAcked
Review URL: https://chromiumcodereview.appspot.com/20155005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214833 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/renderer_host/input/touch_event_queue.cc | 5 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host_impl.cc | 14 | ||||
-rw-r--r-- | content/renderer/gpu/input_handler_proxy.cc | 15 |
3 files changed, 20 insertions, 14 deletions
diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc index 0a7b1d4..56500e6 100644 --- a/content/browser/renderer_host/input/touch_event_queue.cc +++ b/content/browser/renderer_host/input/touch_event_queue.cc @@ -188,12 +188,13 @@ void TouchEventQueue::PopTouchEventWithAck(InputEventAckState ack_result) { // to the renderer, or touch-events being queued. base::AutoReset<bool> dispatching_touch_ack(&dispatching_touch_ack_, true); + base::TimeTicks now = base::TimeTicks::HighResNow(); for (WebTouchEventWithLatencyList::const_iterator iter = acked_event->begin(), end = acked_event->end(); iter != end; ++iter) { ui::LatencyInfo* latency = const_cast<ui::LatencyInfo*>(&(iter->latency)); - latency->AddLatencyNumber( - ui::INPUT_EVENT_LATENCY_ACKED_COMPONENT, 0, 0); + latency->AddLatencyNumberWithTimestamp( + ui::INPUT_EVENT_LATENCY_ACKED_COMPONENT, 0, 0, now, 1); client_->OnTouchEventAck((*iter), ack_result); } } diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index c08d897..858447c 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc @@ -2439,12 +2439,14 @@ void RenderWidgetHostImpl::FrameSwapped(const ui::LatencyInfo& latency_info) { // results in final frame swap. base::TimeDelta delta = latency_info.swap_timestamp - original_component.event_time; - UMA_HISTOGRAM_CUSTOM_COUNTS( - "Event.Latency.TouchToScrollUpdateSwap", - delta.InMicroseconds(), - 0, - 1000000, - 100); + for (size_t i = 0; i < original_component.event_count; i++) { + UMA_HISTOGRAM_CUSTOM_COUNTS( + "Event.Latency.TouchToScrollUpdateSwap", + delta.InMicroseconds(), + 0, + 1000000, + 100); + } rendering_stats_.scroll_update_count += original_component.event_count; rendering_stats_.total_scroll_update_latency += original_component.event_count * diff --git a/content/renderer/gpu/input_handler_proxy.cc b/content/renderer/gpu/input_handler_proxy.cc index 74cc6d1..1d9bb07 100644 --- a/content/renderer/gpu/input_handler_proxy.cc +++ b/content/renderer/gpu/input_handler_proxy.cc @@ -36,12 +36,15 @@ void SendScrollLatencyUma(const WebInputEvent& event, if (it == latency_info.latency_components.end()) return; - UMA_HISTOGRAM_CUSTOM_COUNTS( - "Event.Latency.RendererImpl.GestureScroll", - (base::TimeTicks::HighResNow() - it->second.event_time).InMicroseconds(), - 0, - 200000, - 100); + base::TimeDelta delta = base::TimeTicks::HighResNow() - it->second.event_time; + for (size_t i = 0; i < it->second.event_count; ++i) { + UMA_HISTOGRAM_CUSTOM_COUNTS( + "Event.Latency.RendererImpl.GestureScroll", + delta.InMicroseconds(), + 0, + 200000, + 100); + } } // namespace } |