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

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

Issue 809393002: Added support for improvement_direction to relevant values, which is propogated to chartjson. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix linter issues Created 5 years, 11 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 none_values 8 from telemetry.value import none_values
9 from telemetry.value import summarizable
9 10
10 11
11 def _Mean(values): 12 def _Mean(values):
12 return float(sum(values)) / len(values) if len(values) > 0 else 0.0 13 return float(sum(values)) / len(values) if len(values) > 0 else 0.0
13 14
14 15
15 class ListOfScalarValues(value_module.Value): 16 class ListOfScalarValues(summarizable.SummarizableValue):
16 def __init__(self, page, name, units, values, 17 def __init__(self, page, name, units, values,
17 important=True, description=None, none_value_reason=None, 18 important=True, description=None, none_value_reason=None,
18 same_page_merge_policy=value_module.CONCATENATE): 19 same_page_merge_policy=value_module.CONCATENATE,
20 improvement_direction=None):
19 super(ListOfScalarValues, self).__init__(page, name, units, important, 21 super(ListOfScalarValues, self).__init__(page, name, units, important,
20 description) 22 description, improvement_direction)
21 if values is not None: 23 if values is not None:
22 assert isinstance(values, list) 24 assert isinstance(values, list)
23 assert len(values) > 0 25 assert len(values) > 0
24 assert all(isinstance(v, numbers.Number) for v in values) 26 assert all(isinstance(v, numbers.Number) for v in values)
25 none_values.ValidateNoneValueReason(values, none_value_reason) 27 none_values.ValidateNoneValueReason(values, none_value_reason)
26 self.values = values 28 self.values = values
27 self.none_value_reason = none_value_reason 29 self.none_value_reason = none_value_reason
28 self.same_page_merge_policy = same_page_merge_policy 30 self.same_page_merge_policy = same_page_merge_policy
29 31
30 def __repr__(self): 32 def __repr__(self):
31 if self.page: 33 if self.page:
32 page_name = self.page.url 34 page_name = self.page.url
33 else: 35 else:
34 page_name = None 36 page_name = None
35 if self.same_page_merge_policy == value_module.CONCATENATE: 37 if self.same_page_merge_policy == value_module.CONCATENATE:
36 merge_policy = 'CONCATENATE' 38 merge_policy = 'CONCATENATE'
37 else: 39 else:
38 merge_policy = 'PICK_FIRST' 40 merge_policy = 'PICK_FIRST'
39 return ('ListOfScalarValues(%s, %s, %s, %s, ' 41 return ('ListOfScalarValues(%s, %s, %s, %s, '
40 'important=%s, description=%s, same_page_merge_policy=%s)') % ( 42 'important=%s, description=%s, same_page_merge_policy=%s, '
43 'improvement_direction=%s)') % (
41 page_name, 44 page_name,
42 self.name, 45 self.name,
43 self.units, 46 self.units,
44 repr(self.values), 47 repr(self.values),
45 self.important, 48 self.important,
46 self.description, 49 self.description,
47 merge_policy) 50 merge_policy,
51 self.improvement_direction)
48 52
49 def GetBuildbotDataType(self, output_context): 53 def GetBuildbotDataType(self, output_context):
50 if self._IsImportantGivenOutputIntent(output_context): 54 if self._IsImportantGivenOutputIntent(output_context):
51 return 'default' 55 return 'default'
52 return 'unimportant' 56 return 'unimportant'
53 57
54 def GetBuildbotValue(self): 58 def GetBuildbotValue(self):
55 return self.values 59 return self.values
56 60
57 def GetRepresentativeNumber(self): 61 def GetRepresentativeNumber(self):
(...skipping 16 matching lines...) Expand all
74 78
75 if self.none_value_reason is not None: 79 if self.none_value_reason is not None:
76 d['none_value_reason'] = self.none_value_reason 80 d['none_value_reason'] = self.none_value_reason
77 81
78 return d 82 return d
79 83
80 @staticmethod 84 @staticmethod
81 def FromDict(value_dict, page_dict): 85 def FromDict(value_dict, page_dict):
82 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict) 86 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
83 kwargs['values'] = value_dict['values'] 87 kwargs['values'] = value_dict['values']
88 kwargs['improvement_direction'] = value_dict['improvement_direction']
84 89
85 if 'none_value_reason' in value_dict: 90 if 'none_value_reason' in value_dict:
86 kwargs['none_value_reason'] = value_dict['none_value_reason'] 91 kwargs['none_value_reason'] = value_dict['none_value_reason']
87 92
88 return ListOfScalarValues(**kwargs) 93 return ListOfScalarValues(**kwargs)
89 94
90 @classmethod 95 @classmethod
91 def MergeLikeValuesFromSamePage(cls, values): 96 def MergeLikeValuesFromSamePage(cls, values):
92 assert len(values) > 0 97 assert len(values) > 0
93 v0 = values[0] 98 v0 = values[0]
94 99
95 if v0.same_page_merge_policy == value_module.PICK_FIRST: 100 if v0.same_page_merge_policy == value_module.PICK_FIRST:
96 return ListOfScalarValues( 101 return ListOfScalarValues(
97 v0.page, v0.name, v0.units, 102 v0.page, v0.name, v0.units,
98 values[0].values, 103 values[0].values,
99 important=v0.important, 104 important=v0.important,
100 same_page_merge_policy=v0.same_page_merge_policy, 105 same_page_merge_policy=v0.same_page_merge_policy,
101 none_value_reason=v0.none_value_reason) 106 none_value_reason=v0.none_value_reason,
107 improvement_direction=v0.improvement_direction)
102 108
103 assert v0.same_page_merge_policy == value_module.CONCATENATE 109 assert v0.same_page_merge_policy == value_module.CONCATENATE
104 return cls._MergeLikeValues(values, v0.page, v0.name) 110 return cls._MergeLikeValues(values, v0.page, v0.name)
105 111
106 @classmethod 112 @classmethod
107 def MergeLikeValuesFromDifferentPages(cls, values, 113 def MergeLikeValuesFromDifferentPages(cls, values,
108 group_by_name_suffix=False): 114 group_by_name_suffix=False):
109 assert len(values) > 0 115 assert len(values) > 0
110 v0 = values[0] 116 v0 = values[0]
111 name = v0.name_suffix if group_by_name_suffix else v0.name 117 name = v0.name_suffix if group_by_name_suffix else v0.name
112 return cls._MergeLikeValues(values, None, name) 118 return cls._MergeLikeValues(values, None, name)
113 119
114 @classmethod 120 @classmethod
115 def _MergeLikeValues(cls, values, page, name): 121 def _MergeLikeValues(cls, values, page, name):
116 v0 = values[0] 122 v0 = values[0]
117 merged_values = [] 123 merged_values = []
118 none_value_reason = None 124 none_value_reason = None
119 for v in values: 125 for v in values:
120 if v.values is None: 126 if v.values is None:
121 merged_values = None 127 merged_values = None
122 none_value_reason = none_values.MERGE_FAILURE_REASON 128 none_value_reason = none_values.MERGE_FAILURE_REASON
123 break 129 break
124 merged_values.extend(v.values) 130 merged_values.extend(v.values)
125 return ListOfScalarValues( 131 return ListOfScalarValues(
126 page, name, v0.units, 132 page, name, v0.units,
127 merged_values, 133 merged_values,
128 important=v0.important, 134 important=v0.important,
129 same_page_merge_policy=v0.same_page_merge_policy, 135 same_page_merge_policy=v0.same_page_merge_policy,
130 none_value_reason=none_value_reason) 136 none_value_reason=none_value_reason,
137 improvement_direction=v0.improvement_direction)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698