| 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 ed39e5347f16f9a94caee2f9f6d967b14908992f..75af84b2d674f28e5553f1350d64fc809d6aecc2 100644
|
| --- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py
|
| +++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats.py
|
| @@ -27,6 +27,16 @@ SCROLL_UPDATE_EVENT_NAME = 'InputLatency:ScrollUpdate'
|
| # Name for a gesture scroll update latency event.
|
| GESTURE_SCROLL_UPDATE_EVENT_NAME = 'InputLatency:GestureScrollUpdate'
|
|
|
| +# These are keys used in the 'data' field dictionary located in
|
| +# BenchmarkInstrumentation::ImplThreadRenderingStats.
|
| +VISIBLE_CONTENT_DATA = 'visible_content_area'
|
| +APPROXIMATED_VISIBLE_CONTENT_DATA = 'approximated_visible_content_area'
|
| +CHECKERBOARDED_VISIBLE_CONTENT_DATA = 'checkerboarded_visible_content_area'
|
| +# These are keys used in the 'errors' field dictionary located in
|
| +# RenderingStats in this file.
|
| +APPROXIMATED_PIXEL_ERROR = 'approximated_pixel_percentages'
|
| +CHECKERBOARDED_PIXEL_ERROR = 'checkerboarded_pixel_percentages'
|
| +
|
|
|
| def GetInputLatencyEvents(process, timeline_range):
|
| """Get input events' LatencyInfo from the process's trace buffer that are
|
| @@ -152,6 +162,7 @@ class RenderingStats(object):
|
| self.frame_timestamps = []
|
| self.frame_times = []
|
| self.approximated_pixel_percentages = []
|
| + self.checkerboarded_pixel_percentages = []
|
| # End-to-end latency for input event - from when input event is
|
| # generated to when the its resulted page is swap buffered.
|
| self.input_event_latency = []
|
| @@ -166,6 +177,7 @@ class RenderingStats(object):
|
| self.frame_timestamps.append([])
|
| self.frame_times.append([])
|
| self.approximated_pixel_percentages.append([])
|
| + self.checkerboarded_pixel_percentages.append([])
|
| self.input_event_latency.append([])
|
| self.scroll_update_latency.append([])
|
| self.gesture_scroll_update_latency.append([])
|
| @@ -237,12 +249,37 @@ class RenderingStats(object):
|
| event_name = 'BenchmarkInstrumentation::ImplThreadRenderingStats'
|
| for event in self._GatherEvents(event_name, process, timeline_range):
|
| data = event.args['data']
|
| - if data.get('visible_content_area', 0):
|
| + if VISIBLE_CONTENT_DATA not in data:
|
| + self.errors[APPROXIMATED_PIXEL_ERROR] = (
|
| + 'Calculating approximated_pixel_percentages not possible because '
|
| + 'visible_content_area was missing.')
|
| + self.errors[CHECKERBOARDED_PIXEL_ERROR] = (
|
| + 'Calculating checkerboarded_pixel_percentages not possible because '
|
| + 'visible_content_area was missing.')
|
| + return
|
| + visible_content_area = data[VISIBLE_CONTENT_DATA]
|
| + if visible_content_area == 0:
|
| + self.errors[APPROXIMATED_PIXEL_ERROR] = (
|
| + 'Calculating approximated_pixel_percentages would have caused '
|
| + 'a divide-by-zero')
|
| + self.errors[CHECKERBOARDED_PIXEL_ERROR] = (
|
| + 'Calculating checkerboarded_pixel_percentages would have caused '
|
| + 'a divide-by-zero')
|
| + return
|
| + if APPROXIMATED_VISIBLE_CONTENT_DATA in data:
|
| self.approximated_pixel_percentages[-1].append(
|
| - round(float(data['approximated_visible_content_area']) /
|
| - float(data['visible_content_area']) * 100.0, 3))
|
| + round(float(data[APPROXIMATED_VISIBLE_CONTENT_DATA]) /
|
| + float(data[VISIBLE_CONTENT_DATA]) * 100.0, 3))
|
| + else:
|
| + self.errors[APPROXIMATED_PIXEL_ERROR] = (
|
| + 'approximated_pixel_percentages was not recorded')
|
| + if CHECKERBOARDED_VISIBLE_CONTENT_DATA in data:
|
| + self.checkerboarded_pixel_percentages[-1].append(
|
| + round(float(data[CHECKERBOARDED_VISIBLE_CONTENT_DATA]) /
|
| + float(data[VISIBLE_CONTENT_DATA]) * 100.0, 3))
|
| else:
|
| - self.approximated_pixel_percentages[-1].append(0.0)
|
| + self.errors[CHECKERBOARDED_PIXEL_ERROR] = (
|
| + 'checkerboarded_pixel_percentages was not recorded')
|
|
|
| def _InitFrameQueueingDurationsFromTimeline(self, process, timeline_range):
|
| try:
|
|
|