Index: tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
diff --git a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
index c8d1475c497bf304880e6dfc67f6a8b11da667a8..33c51fb0aba2ec229763470471d01dffc439c0d3 100644 |
--- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
+++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
@@ -15,6 +15,12 @@ UI_COMP_NAME = 'INPUT_EVENT_LATENCY_UI_COMPONENT' |
ORIGINAL_COMP_NAME = 'INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT' |
# This is when the input event was sent from browser to renderer. |
BEGIN_COMP_NAME = 'INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT' |
+# This is when an input event is turned into a scroll update. |
+BEGIN_SCROLL_UPDATE_COMP_NAME = ( |
+ 'INPUT_EVENT_LATENCY_BEGIN_SCROLL_UPDATE_MAIN_COMPONENT') |
+# This is when a scroll update is forwarded to the main thread. |
+FORWARD_SCROLL_UPDATE_COMP_NAME = ( |
+ 'INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT') |
# This is when the input event has reached swap buffer. |
END_COMP_NAME = 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' |
@@ -52,8 +58,8 @@ def GetInputLatencyEvents(process, timeline_range): |
return input_events |
-def ComputeInputEventLatency(input_events): |
- """ Compute the input event latency. |
+def ComputeInputEventLatencies(input_events): |
+ """ Compute the input event and scroll update latencies. |
Input event latency is the time from when the input event is created to |
when its resulted page is swap buffered. |
@@ -64,22 +70,33 @@ def ComputeInputEventLatency(input_events): |
2. INPUT_EVENT_LATENCY_UI_COMPONENT -- when event reaches Chrome |
3. INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT -- when event reaches RenderWidget |
+ If the latency starts with a |
+ INPUT_EVENT_LATENCY_BEGIN_SCROLL_UPDATE_MAIN_COMPONENT component, then it is |
+ classified as a scroll update instead of a normal input latency measure. |
+ |
+ Returns: |
+ A pair of lists for input and scroll update event latencies. |
""" |
input_event_latency = [] |
+ scroll_update_latency = [] |
for event in input_events: |
data = event.args['data'] |
if END_COMP_NAME in data: |
end_time = data[END_COMP_NAME]['time'] |
+ latency_list = input_event_latency |
if ORIGINAL_COMP_NAME in data: |
latency = end_time - data[ORIGINAL_COMP_NAME]['time'] |
elif UI_COMP_NAME in data: |
latency = end_time - data[UI_COMP_NAME]['time'] |
elif BEGIN_COMP_NAME in data: |
latency = end_time - data[BEGIN_COMP_NAME]['time'] |
+ elif BEGIN_SCROLL_UPDATE_COMP_NAME in data: |
+ latency = end_time - data[BEGIN_SCROLL_UPDATE_COMP_NAME]['time'] |
+ latency_list = scroll_update_latency |
else: |
raise ValueError, 'LatencyInfo has no begin component' |
- input_event_latency.append(latency / 1000.0) |
- return input_event_latency |
+ latency_list.append(latency / 1000.0) |
+ return input_event_latency, scroll_update_latency |
def HasRenderingStats(process): |
@@ -131,6 +148,9 @@ class RenderingStats(object): |
# generated to when the its resulted page is swap buffered. |
self.input_event_latency = [] |
self.frame_queueing_durations = [] |
+ # Latency from when a scroll update is sent to the main thread until the |
+ # resulting frame is swapped. |
+ self.scroll_update_latency = [] |
for timeline_range in timeline_ranges: |
self.frame_timestamps.append([]) |
@@ -143,6 +163,7 @@ class RenderingStats(object): |
self.rasterized_pixel_counts.append([]) |
self.approximated_pixel_percentages.append([]) |
self.input_event_latency.append([]) |
+ self.scroll_update_latency.append([]) |
if timeline_range.is_empty: |
continue |
@@ -168,7 +189,10 @@ class RenderingStats(object): |
# Plugin input event's latency slice is generated in renderer process. |
latency_events.extend(GetInputLatencyEvents(renderer_process, |
timeline_range)) |
- self.input_event_latency[-1] = ComputeInputEventLatency(latency_events) |
+ input_event_latency, scroll_update_latency = \ |
+ ComputeInputEventLatencies(latency_events) |
+ self.input_event_latency[-1] = input_event_latency |
+ self.scroll_update_latency[-1] = scroll_update_latency |
def _GatherEvents(self, event_name, process, timeline_range): |
events = [] |