OLD | NEW |
| (Empty) |
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.label.startswith('Gesture_'): | |
22 return copy.copy(interaction_record) | |
23 gesture_events = [ | |
24 ev for ev | |
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 | |
OLD | NEW |