Index: content/browser/renderer_host/render_widget_host_latency_tracker.cc |
diff --git a/content/browser/renderer_host/render_widget_host_latency_tracker.cc b/content/browser/renderer_host/render_widget_host_latency_tracker.cc |
index 2d738c491910c4d429709da26d4ecd6193f9105b..f5bdd390e7662b3508171ba15e34427a32956016 100644 |
--- a/content/browser/renderer_host/render_widget_host_latency_tracker.cc |
+++ b/content/browser/renderer_host/render_widget_host_latency_tracker.cc |
@@ -135,6 +135,13 @@ void ComputeInputLatencyHistograms(WebInputEvent::Type type, |
} |
} |
+// Scroll latency is mostly under 1000ms. |
Alexei Svitkine (slow)
2015/02/13 16:16:33
I'm not convinced that these macro params are the
Yufeng Shen (Slow to review)
2015/02/17 20:37:21
Thanks Alexei for the suggestions.
Here is what's
|
+#define UMA_HISTOGRAM_SCROLL_LATENCY(name, start, end) \ |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( \ |
+ name, \ |
+ (end.event_time - start.event_time).InMicroseconds(), \ |
+ 1, 1000000, 100) |
+ |
void ComputeScrollLatencyHistograms( |
const LatencyInfo::LatencyComponent& swap_component, |
int64 latency_component_id, |
@@ -148,11 +155,9 @@ void ComputeScrollLatencyHistograms( |
// first scroll event in a sequence and the original timestamp of that |
// scroll event's underlying touch event. |
for (size_t i = 0; i < first_original_component.event_count; i++) { |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
"Event.Latency.TouchToFirstScrollUpdateSwap", |
- (swap_component.event_time - first_original_component.event_time) |
- .InMicroseconds(), |
- 1, 1000000, 100); |
+ first_original_component, swap_component); |
} |
original_component = first_original_component; |
} else if (!latency.FindLatency( |
@@ -165,12 +170,69 @@ void ComputeScrollLatencyHistograms( |
// created (averaged if there are multiple) to when the scroll gesture |
// results in final frame swap. |
for (size_t i = 0; i < original_component.event_count; i++) { |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
"Event.Latency.TouchToScrollUpdateSwap", |
- (swap_component.event_time - original_component.event_time) |
- .InMicroseconds(), |
- 1, 1000000, 100); |
+ original_component, swap_component); |
+ } |
+ |
+ LatencyInfo::LatencyComponent rendering_scheduled_component; |
+ bool rendering_scheduled_on_main = latency.FindLatency( |
+ ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT, |
+ 0, &rendering_scheduled_component); |
+ |
+ if (!rendering_scheduled_on_main) { |
+ if (!latency.FindLatency( |
+ ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT, |
+ 0, &rendering_scheduled_component)) |
+ return; |
+ } |
+ |
+ if (rendering_scheduled_on_main) { |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.TouchToHandled_Main", |
+ original_component, rendering_scheduled_component); |
+ } else { |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.TouchToHandled_Impl", |
+ original_component, rendering_scheduled_component); |
+ } |
+ |
+ LatencyInfo::LatencyComponent renderer_swap_component; |
+ if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, |
+ 0, &renderer_swap_component)) |
+ return; |
+ |
+ if (rendering_scheduled_on_main) { |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.HandledToRendererSwap_Main", |
+ rendering_scheduled_component, renderer_swap_component); |
+ } else { |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.HandledToRendererSwap_Impl", |
+ rendering_scheduled_component, renderer_swap_component); |
} |
+ |
+ LatencyInfo::LatencyComponent browser_received_swap_component; |
+ if (!latency.FindLatency( |
+ ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT, |
+ 0, &browser_received_swap_component)) |
+ return; |
+ |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified", |
+ renderer_swap_component, browser_received_swap_component); |
+ |
+ LatencyInfo::LatencyComponent gpu_swap_component; |
+ if (!latency.FindLatency(ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT, |
+ 0, &gpu_swap_component)) |
+ return; |
+ |
+ UMA_HISTOGRAM_SCROLL_LATENCY( |
+ "Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap", |
+ browser_received_swap_component, gpu_swap_component); |
+ |
+ UMA_HISTOGRAM_SCROLL_LATENCY("Event.Latency.ScrollUpdate.GpuSwap", |
+ gpu_swap_component, swap_component); |
} |
// LatencyComponents generated in the renderer must have component IDs |
@@ -264,7 +326,9 @@ void RenderWidgetHostLatencyTracker::OnInputEventAck( |
// Latency ends when it is acked but does not cause render scheduling. |
bool rendering_scheduled = latency->FindLatency( |
- ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT, 0, NULL); |
+ ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT, 0, nullptr); |
+ rendering_scheduled |= latency->FindLatency( |
+ ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT, 0, nullptr); |
if (WebInputEvent::isGestureEventType(event.type)) { |
if (!rendering_scheduled) { |