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.
6 from telemetry
.web_perf
import timeline_interaction_record
as tir_module
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
20 # Only adjust the range for gestures.
21 if not interaction_record
.label
.startswith('Gesture_'):
22 return copy
.copy(interaction_record
)
25 in timeline
.IterAllAsyncSlicesOfName('SyntheticGestureController::running')
26 if ev
.parent_slice
is None and
27 ev
.start
<= interaction_record
.end
and
28 ev
.end
>= interaction_record
.start
]
29 if len(gesture_events
) == 0:
30 return copy
.copy(interaction_record
)
31 if len(gesture_events
) > 1:
32 raise Exception('More than one possible synthetic gesture marker found in '
33 'interaction_record %s.' % interaction_record
.label
)
34 return tir_module
.TimelineInteractionRecord(
35 interaction_record
.label
, gesture_events
[0].start
,
36 gesture_events
[0].end
, gesture_events
[0],
37 interaction_record
._flags
) # pylint: disable=W0212