blob: cc1879d50e99bf5f5da87aab01447ebb03ea30d8 [file] [log] [blame]
# Copyright 2015 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
JITTER_EVENT_NAME = 'jitter'
class JitterTimelineMetric(timeline_based_metric.TimelineBasedMetric):
"""JitterTimelineMetric reports jitter in composited layers.
This jitter is due to the main thread attempting to fix the position of a
scrolling composited layer. 'jitter-amount' is the metric added to the
results.
"""
def __init__(self):
super(JitterTimelineMetric, self).__init__()
@staticmethod
def IsJitterEvent(event):
return event.name == JITTER_EVENT_NAME
def AddResults(self, model, renderer_thread, interactions, results):
assert interactions
jitter_events = []
for event in model.IterAllEvents(
event_predicate=self.IsJitterEvent):
jitter_events.append(event)
self._AddJitterResultsInternal(jitter_events, interactions, results)
def _AddJitterResultsInternal(self, events, interactions, results):
jitters = []
for event in events:
if timeline_based_metric.IsEventInInteractions(event, interactions):
jitters.append(event.args['value'])
if jitters:
results.AddValue(list_of_scalar_values.ListOfScalarValues(
page=results.current_page,
tir_label=interactions[0].label,
name='jitter-amount',
units='score',
values=jitters,
description='Jitter each frame',
improvement_direction=improvement_direction.DOWN))