Index: tools/telemetry/telemetry/web_perf/timeline_interaction_record.py |
diff --git a/tools/telemetry/telemetry/web_perf/timeline_interaction_record.py b/tools/telemetry/telemetry/web_perf/timeline_interaction_record.py |
index e2d8d1faa9a4541941824e43bfaad12487fc2c08..1879b0d365b27b977e72b864ad5b0658dc0c2c1a 100644 |
--- a/tools/telemetry/telemetry/web_perf/timeline_interaction_record.py |
+++ b/tools/telemetry/telemetry/web_perf/timeline_interaction_record.py |
@@ -10,10 +10,10 @@ import telemetry.timeline.bounds as timeline_bounds |
# Enables the fast metric for this interaction |
IS_FAST = 'is_fast' |
-# Enables the smoothness metric for this interaction |
-IS_SMOOTH = 'is_smooth' |
# Enables the responsiveness metric for this interaction |
IS_RESPONSIVE = 'is_responsive' |
+# Enables the smoothness metric for this interaction |
+IS_SMOOTH = 'is_smooth' |
# Allows multiple duplicate interactions of the same type |
REPEATABLE = 'repeatable' |
@@ -101,21 +101,48 @@ class TimelineInteractionRecord(object): |
time-range. |
The valid interaction flags are: |
- * is_smooth: Enables the smoothness metrics |
- * is_responsive: Enables the responsiveness metrics |
- * repeatable: Allows other interactions to use the same logical name |
+ * is_fast: Enables the fast metric |
+ * is_responsive: Enables the responsiveness metric |
+ * is_smooth: Enables the smoothness metric |
+ * repeatable: Allows other interactions to use the same label |
""" |
- def __init__(self, label, start, end, async_event=None): |
+ def __init__(self, label, start, end, async_event=None, flags=None): |
assert label |
- self.label = label |
- self.start = start |
- self.end = end |
- self.is_fast = False |
- self.is_smooth = False |
- self.is_responsive = False |
- self.repeatable = False |
+ self._label = label |
+ self._start = start |
+ self._end = end |
self._async_event = async_event |
+ self._flags = flags if flags is not None else [] |
+ _AssertFlagsAreValid(self._flags) |
+ |
+ @property |
+ def label(self): |
+ return self._label |
+ |
+ @property |
+ def start(self): |
+ return self._start |
+ |
+ @property |
+ def end(self): |
+ return self._end |
+ |
+ @property |
+ def is_fast(self): |
+ return IS_FAST in self._flags |
+ |
+ @property |
+ def is_responsive(self): |
+ return IS_RESPONSIVE in self._flags |
+ |
+ @property |
+ def is_smooth(self): |
+ return IS_SMOOTH in self._flags |
+ |
+ @property |
+ def repeatable(self): |
+ return REPEATABLE in self._flags |
# TODO(nednguyen): After crbug.com/367175 is marked fixed, we should be able |
# to get rid of perf.measurements.smooth_gesture_util and make this the only |
@@ -130,26 +157,12 @@ class TimelineInteractionRecord(object): |
assert async_event.start_thread == async_event.end_thread, ( |
'Start thread of this record\'s async event is not the same as its ' |
'end thread') |
- m = re.match('Interaction\.(.+)\/(.+)', async_event.name) |
- if m: |
- label = m.group(1) |
- if m.group(1) != '': |
- flags = m.group(2).split(',') |
- else: |
- flags = [] |
- else: |
- m = re.match('Interaction\.(.+)', async_event.name) |
- assert m |
- label = m.group(1) |
- flags = [] |
- |
- record = cls(label, async_event.start, async_event.end, async_event) |
- _AssertFlagsAreValid(flags) |
- record.is_fast = IS_FAST in flags |
- record.is_smooth = IS_SMOOTH in flags |
- record.is_responsive = IS_RESPONSIVE in flags |
- record.repeatable = REPEATABLE in flags |
- return record |
+ m = re.match('Interaction\.(?P<label>.+?)(/(?P<flags>[^/]+))?$', |
+ async_event.name) |
+ assert m, "Async event is not an interaction record." |
+ label = m.group('label') |
+ flags = m.group('flags').split(',') if m.group('flags') is not None else [] |
+ return cls(label, async_event.start, async_event.end, async_event, flags) |
@decorators.Cache |
def GetBounds(self): |
@@ -162,7 +175,7 @@ class TimelineInteractionRecord(object): |
if metric_type not in METRICS: |
raise AssertionError('Unrecognized metric type for a timeline ' |
'interaction record: %s' % metric_type) |
- return getattr(self, metric_type) |
+ return metric_type in self._flags |
def GetOverlappedThreadTimeForSlice(self, timeline_slice): |
"""Get the thread duration of timeline_slice that overlaps with this record. |
@@ -243,15 +256,7 @@ class TimelineInteractionRecord(object): |
record_scheduled_ratio) |
def __repr__(self): |
- flags = [] |
- if self.is_smooth: |
- flags.append(IS_SMOOTH) |
- elif self.is_responsive: |
- flags.append(IS_RESPONSIVE) |
- elif self.is_fast: |
- flags.append(IS_FAST) |
- flags_str = ','.join(flags) |
- |
+ flags_str = ','.join(self._flags) |
return ('TimelineInteractionRecord(label=\'%s\', start=%f, end=%f,' + |
' flags=%s, async_event=%s)') % ( |
self.label, |