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 33c51fb0aba2ec229763470471d01dffc439c0d3..ad29d57182a6fffbc327dd6713d818599a60cf15 100644 |
--- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
+++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py |
@@ -24,6 +24,11 @@ FORWARD_SCROLL_UPDATE_COMP_NAME = ( |
# This is when the input event has reached swap buffer. |
END_COMP_NAME = 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' |
+# Name for a main thread scroll update latency event. |
+SCROLL_UPDATE_EVENT_NAME = 'InputLatency:ScrollUpdate' |
+# Name for a gesture scroll update latency event. |
+GESTURE_SCROLL_UPDATE_EVENT_NAME = 'InputLatency:GestureScrollUpdate' |
+ |
class NotEnoughFramesError(page_test.MeasurementFailure): |
def __init__(self, frame_count): |
@@ -59,7 +64,7 @@ def GetInputLatencyEvents(process, timeline_range): |
def ComputeInputEventLatencies(input_events): |
- """ Compute the input event and scroll update latencies. |
+ """ Compute input event latencies. |
Input event latency is the time from when the input event is created to |
when its resulted page is swap buffered. |
@@ -75,28 +80,29 @@ def ComputeInputEventLatencies(input_events): |
classified as a scroll update instead of a normal input latency measure. |
Returns: |
- A pair of lists for input and scroll update event latencies. |
+ A list sorted by increasing start time of latencies which are tuples of |
+ (input_event_name, latency_in_ms). |
""" |
- input_event_latency = [] |
- scroll_update_latency = [] |
+ input_event_latencies = [] |
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'] |
+ start_time = data[ORIGINAL_COMP_NAME]['time'] |
elif UI_COMP_NAME in data: |
- latency = end_time - data[UI_COMP_NAME]['time'] |
+ start_time = data[UI_COMP_NAME]['time'] |
elif BEGIN_COMP_NAME in data: |
- latency = end_time - data[BEGIN_COMP_NAME]['time'] |
+ start_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 |
+ start_time = data[BEGIN_SCROLL_UPDATE_COMP_NAME]['time'] |
else: |
raise ValueError, 'LatencyInfo has no begin component' |
- latency_list.append(latency / 1000.0) |
- return input_event_latency, scroll_update_latency |
+ latency = (end_time - start_time) / 1000.0 |
+ input_event_latencies.append((start_time, event.name, latency)) |
+ |
+ input_event_latencies.sort() |
+ return [(name, latency) for _, name, latency in input_event_latencies] |
def HasRenderingStats(process): |
@@ -151,6 +157,8 @@ class RenderingStats(object): |
# Latency from when a scroll update is sent to the main thread until the |
# resulting frame is swapped. |
self.scroll_update_latency = [] |
+ # Latency for a GestureScrollUpdate input event. |
+ self.gesture_scroll_update_latency = [] |
for timeline_range in timeline_ranges: |
self.frame_timestamps.append([]) |
@@ -164,6 +172,7 @@ class RenderingStats(object): |
self.approximated_pixel_percentages.append([]) |
self.input_event_latency.append([]) |
self.scroll_update_latency.append([]) |
+ self.gesture_scroll_update_latency.append([]) |
if timeline_range.is_empty: |
continue |
@@ -189,10 +198,15 @@ class RenderingStats(object): |
# Plugin input event's latency slice is generated in renderer process. |
latency_events.extend(GetInputLatencyEvents(renderer_process, |
timeline_range)) |
- 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 |
+ input_event_latencies = ComputeInputEventLatencies(latency_events) |
+ self.input_event_latency[-1] = [ |
+ latency for name, latency in input_event_latencies] |
+ self.scroll_update_latency[-1] = [ |
+ latency for name, latency in input_event_latencies |
+ if name == SCROLL_UPDATE_EVENT_NAME] |
+ self.gesture_scroll_update_latency[-1] = [ |
+ latency for name, latency in input_event_latencies |
+ if name == GESTURE_SCROLL_UPDATE_EVENT_NAME] |
def _GatherEvents(self, event_name, process, timeline_range): |
events = [] |