blob: 5d510c3af1dbea8f1bc6e70528fb93bd345255c8 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from telemetry.value import improvement_direction
from telemetry.value import list_of_scalar_values
from telemetry.web_perf.metrics import timeline_based_metric
class _SingleEventMetric(timeline_based_metric.TimelineBasedMetric):
"""Reports directly durations of specific trace events that start during the
user interaction.
"""
def __init__(self, trace_event_name, metric_name, metric_description=None):
super(_SingleEventMetric, self).__init__()
self._TRACE_EVENT_NAME = trace_event_name
self._metric_name = metric_name
self._metric_description = metric_description
def AddResults(self, model, renderer_thread, interactions, results):
del model # unused
assert interactions
self._AddResultsInternal(renderer_thread.parent.IterAllSlices(),
interactions, results)
def _AddResultsInternal(self, events, interactions, results):
events_found = []
for event in events:
if (event.name == self._TRACE_EVENT_NAME) and any(
interaction.start <= event.start <= interaction.end
for interaction in interactions):
if event.has_thread_timestamps:
events_found.append(event.thread_duration)
else:
events_found.append(event.duration)
if not events_found:
return
results.AddValue(list_of_scalar_values.ListOfScalarValues(
page=results.current_page,
tir_label=interactions[0].label,
name=self._metric_name,
units='ms',
values=events_found,
description=self._metric_description,
improvement_direction=improvement_direction.DOWN))