Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: tools/telemetry/telemetry/value/scalar.py

Issue 963313002: [Telemetry] Add interaction_record field to Value (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: misc typo fixes Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import numbers 5 import numbers
6 6
7 from telemetry import value as value_module 7 from telemetry import value as value_module
8 from telemetry.value import list_of_scalar_values 8 from telemetry.value import list_of_scalar_values
9 from telemetry.value import none_values 9 from telemetry.value import none_values
10 10
11 11
12 class ScalarValue(value_module.Value): 12 class ScalarValue(value_module.Value):
13 def __init__(self, page, name, units, value, important=True, 13 def __init__(self, page, name, units, value, important=True,
14 description=None, none_value_reason=None): 14 description=None, interaction_record=None,
15 none_value_reason=None):
15 """A single value (float or integer) result from a test. 16 """A single value (float or integer) result from a test.
16 17
17 A test that counts the number of DOM elements in a page might produce a 18 A test that counts the number of DOM elements in a page might produce a
18 scalar value: 19 scalar value:
19 ScalarValue(page, 'num_dom_elements', 'count', num_elements) 20 ScalarValue(page, 'num_dom_elements', 'count', num_elements)
20 """ 21 """
21 super(ScalarValue, self).__init__(page, name, units, important, description) 22 super(ScalarValue, self).__init__(page, name, units, important, description,
23 interaction_record)
22 assert value is None or isinstance(value, numbers.Number) 24 assert value is None or isinstance(value, numbers.Number)
23 none_values.ValidateNoneValueReason(value, none_value_reason) 25 none_values.ValidateNoneValueReason(value, none_value_reason)
24 self.value = value 26 self.value = value
25 self.none_value_reason = none_value_reason 27 self.none_value_reason = none_value_reason
26 28
27 def __repr__(self): 29 def __repr__(self):
28 if self.page: 30 if self.page:
29 page_name = self.page.url 31 page_name = self.page.url
30 else: 32 else:
31 page_name = None 33 page_name = None
32 return 'ScalarValue(%s, %s, %s, %s, important=%s, description=%s)' % ( 34 return ('ScalarValue(%s, %s, %s, %s, important=%s, description=%s, '
33 page_name, 35 'interaction_record=%s') % (
34 self.name, 36 page_name,
35 self.units, 37 self.name,
36 self.value, 38 self.units,
37 self.important, 39 self.value,
38 self.description) 40 self.important,
41 self.description,
42 self.interaction_record)
39 43
40 def GetBuildbotDataType(self, output_context): 44 def GetBuildbotDataType(self, output_context):
41 if self._IsImportantGivenOutputIntent(output_context): 45 if self._IsImportantGivenOutputIntent(output_context):
42 return 'default' 46 return 'default'
43 return 'unimportant' 47 return 'unimportant'
44 48
45 def GetBuildbotValue(self): 49 def GetBuildbotValue(self):
46 # Buildbot's print_perf_results method likes to get lists for all values, 50 # Buildbot's print_perf_results method likes to get lists for all values,
47 # even when they are scalar, so list-ize the return value. 51 # even when they are scalar, so list-ize the return value.
48 return [self.value] 52 return [self.value]
(...skipping 17 matching lines...) Expand all
66 70
67 return d 71 return d
68 72
69 @staticmethod 73 @staticmethod
70 def FromDict(value_dict, page_dict): 74 def FromDict(value_dict, page_dict):
71 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict) 75 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
72 kwargs['value'] = value_dict['value'] 76 kwargs['value'] = value_dict['value']
73 77
74 if 'none_value_reason' in value_dict: 78 if 'none_value_reason' in value_dict:
75 kwargs['none_value_reason'] = value_dict['none_value_reason'] 79 kwargs['none_value_reason'] = value_dict['none_value_reason']
80 if 'interaction_record' in value_dict:
81 kwargs['interaction_record'] = value_dict['interaction_record']
76 82
77 return ScalarValue(**kwargs) 83 return ScalarValue(**kwargs)
78 84
79 @classmethod 85 @classmethod
80 def MergeLikeValuesFromSamePage(cls, values): 86 def MergeLikeValuesFromSamePage(cls, values):
81 assert len(values) > 0 87 assert len(values) > 0
82 v0 = values[0] 88 v0 = values[0]
83 return cls._MergeLikeValues(values, v0.page, v0.name) 89 return cls._MergeLikeValues(values, v0.page, v0.name, v0.interaction_record)
84 90
85 @classmethod 91 @classmethod
86 def MergeLikeValuesFromDifferentPages(cls, values, 92 def MergeLikeValuesFromDifferentPages(cls, values,
87 group_by_name_suffix=False): 93 group_by_name_suffix=False):
88 assert len(values) > 0 94 assert len(values) > 0
89 v0 = values[0] 95 v0 = values[0]
90 name = v0.name_suffix if group_by_name_suffix else v0.name 96 name = v0.name_suffix if group_by_name_suffix else v0.name
91 return cls._MergeLikeValues(values, None, name) 97 return cls._MergeLikeValues(values, None, name, v0.interaction_record)
92 98
93 @classmethod 99 @classmethod
94 def _MergeLikeValues(cls, values, page, name): 100 def _MergeLikeValues(cls, values, page, name, interaction_record):
95 v0 = values[0] 101 v0 = values[0]
96 merged_value = [v.value for v in values] 102 merged_value = [v.value for v in values]
97 none_value_reason = None 103 none_value_reason = None
98 if None in merged_value: 104 if None in merged_value:
99 merged_value = None 105 merged_value = None
100 none_value_reason = none_values.MERGE_FAILURE_REASON 106 none_value_reason = none_values.MERGE_FAILURE_REASON
101 return list_of_scalar_values.ListOfScalarValues( 107 return list_of_scalar_values.ListOfScalarValues(
102 page, name, v0.units, merged_value, important=v0.important, 108 page, name, v0.units, merged_value, important=v0.important,
109 interaction_record=interaction_record,
103 none_value_reason=none_value_reason) 110 none_value_reason=none_value_reason)
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/value/merge_values_unittest.py ('k') | tools/telemetry/telemetry/value/skip.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698