Home | History | Annotate | Download | only in measurements
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 import copy
      5 
      6 from telemetry.web_perf import timeline_interaction_record as tir_module
      7 
      8 
      9 def GetAdjustedInteractionIfContainGesture(timeline, interaction_record):
     10   """ Returns a new interaction record if interaction_record contains geture
     11   whose time range that overlaps with interaction_record's range. If not,
     12   returns a clone of original interaction_record.
     13   The synthetic gesture controller inserts a trace marker to precisely
     14   demarcate when the gesture was running. We check for overlap, not inclusion,
     15   because gesture_actions can start/end slightly outside the telemetry markers
     16   on Windows. This problem is probably caused by a race condition between
     17   the browser and renderer process submitting the trace events for the
     18   markers.
     19   """
     20   # Only adjust the range for gestures.
     21   if not interaction_record.logical_name.startswith('Gesture_'):
     22     return copy.copy(interaction_record)
     23   gesture_events = [
     24     ev for ev
     25     in timeline.GetAllEventsOfName('SyntheticGestureController::running', True)
     26     if ev.start <= interaction_record.end and
     27     ev.end >= interaction_record.start]
     28   if len(gesture_events) == 0:
     29     return copy.copy(interaction_record)
     30   if len(gesture_events) > 1:
     31     raise Exception('More than one possible synthetic gesture marker found in '
     32                     'interaction_record %s.' % interaction_record.logical_name)
     33   return tir_module.TimelineInteractionRecord(interaction_record.logical_name,
     34                                               gesture_events[0].start,
     35                                               gesture_events[0].end)
     36