OLD | NEW |
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 from telemetry.value import summarizable |
10 | 11 |
11 | 12 |
12 class ScalarValue(value_module.Value): | 13 class ScalarValue(summarizable.SummarizableValue): |
13 def __init__(self, page, name, units, value, important=True, | 14 def __init__(self, page, name, units, value, important=True, |
14 description=None, tir_label=None, | 15 description=None, tir_label=None, |
15 none_value_reason=None): | 16 none_value_reason=None, improvement_direction=None): |
16 """A single value (float or integer) result from a test. | 17 """A single value (float or integer) result from a test. |
17 | 18 |
18 A test that counts the number of DOM elements in a page might produce a | 19 A test that counts the number of DOM elements in a page might produce a |
19 scalar value: | 20 scalar value: |
20 ScalarValue(page, 'num_dom_elements', 'count', num_elements) | 21 ScalarValue(page, 'num_dom_elements', 'count', num_elements) |
21 """ | 22 """ |
22 super(ScalarValue, self).__init__(page, name, units, important, description, | 23 super(ScalarValue, self).__init__(page, name, units, important, description, |
23 tir_label) | 24 tir_label, improvement_direction) |
24 assert value is None or isinstance(value, numbers.Number) | 25 assert value is None or isinstance(value, numbers.Number) |
25 none_values.ValidateNoneValueReason(value, none_value_reason) | 26 none_values.ValidateNoneValueReason(value, none_value_reason) |
26 self.value = value | 27 self.value = value |
27 self.none_value_reason = none_value_reason | 28 self.none_value_reason = none_value_reason |
28 | 29 |
29 def __repr__(self): | 30 def __repr__(self): |
30 if self.page: | 31 if self.page: |
31 page_name = self.page.display_name | 32 page_name = self.page.display_name |
32 else: | 33 else: |
33 page_name = 'None' | 34 page_name = 'None' |
34 return ('ScalarValue(%s, %s, %s, %s, important=%s, description=%s, ' | 35 return ('ScalarValue(%s, %s, %s, %s, important=%s, description=%s, ' |
35 'tir_label=%s') % ( | 36 'tir_label=%s, improvement_direction=%s') % ( |
36 page_name, | 37 page_name, |
37 self.name, | 38 self.name, |
38 self.units, | 39 self.units, |
39 self.value, | 40 self.value, |
40 self.important, | 41 self.important, |
41 self.description, | 42 self.description, |
42 self.tir_label) | 43 self.tir_label, |
| 44 self.improvment_direction) |
43 | 45 |
44 def GetBuildbotDataType(self, output_context): | 46 def GetBuildbotDataType(self, output_context): |
45 if self._IsImportantGivenOutputIntent(output_context): | 47 if self._IsImportantGivenOutputIntent(output_context): |
46 return 'default' | 48 return 'default' |
47 return 'unimportant' | 49 return 'unimportant' |
48 | 50 |
49 def GetBuildbotValue(self): | 51 def GetBuildbotValue(self): |
50 # Buildbot's print_perf_results method likes to get lists for all values, | 52 # Buildbot's print_perf_results method likes to get lists for all values, |
51 # even when they are scalar, so list-ize the return value. | 53 # even when they are scalar, so list-ize the return value. |
52 return [self.value] | 54 return [self.value] |
(...skipping 14 matching lines...) Expand all Loading... |
67 | 69 |
68 if self.none_value_reason is not None: | 70 if self.none_value_reason is not None: |
69 d['none_value_reason'] = self.none_value_reason | 71 d['none_value_reason'] = self.none_value_reason |
70 | 72 |
71 return d | 73 return d |
72 | 74 |
73 @staticmethod | 75 @staticmethod |
74 def FromDict(value_dict, page_dict): | 76 def FromDict(value_dict, page_dict): |
75 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict) | 77 kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict) |
76 kwargs['value'] = value_dict['value'] | 78 kwargs['value'] = value_dict['value'] |
| 79 kwargs['improvement_direction'] = value_dict['improvement_direction'] |
77 | 80 |
78 if 'none_value_reason' in value_dict: | 81 if 'none_value_reason' in value_dict: |
79 kwargs['none_value_reason'] = value_dict['none_value_reason'] | 82 kwargs['none_value_reason'] = value_dict['none_value_reason'] |
80 if 'tir_label' in value_dict: | 83 if 'tir_label' in value_dict: |
81 kwargs['tir_label'] = value_dict['tir_label'] | 84 kwargs['tir_label'] = value_dict['tir_label'] |
82 | 85 |
83 return ScalarValue(**kwargs) | 86 return ScalarValue(**kwargs) |
84 | 87 |
85 @classmethod | 88 @classmethod |
86 def MergeLikeValuesFromSamePage(cls, values): | 89 def MergeLikeValuesFromSamePage(cls, values): |
(...skipping 11 matching lines...) Expand all Loading... |
98 def _MergeLikeValues(cls, values, page, name, tir_label): | 101 def _MergeLikeValues(cls, values, page, name, tir_label): |
99 v0 = values[0] | 102 v0 = values[0] |
100 merged_value = [v.value for v in values] | 103 merged_value = [v.value for v in values] |
101 none_value_reason = None | 104 none_value_reason = None |
102 if None in merged_value: | 105 if None in merged_value: |
103 merged_value = None | 106 merged_value = None |
104 none_value_reason = none_values.MERGE_FAILURE_REASON | 107 none_value_reason = none_values.MERGE_FAILURE_REASON |
105 return list_of_scalar_values.ListOfScalarValues( | 108 return list_of_scalar_values.ListOfScalarValues( |
106 page, name, v0.units, merged_value, important=v0.important, | 109 page, name, v0.units, merged_value, important=v0.important, |
107 tir_label=tir_label, | 110 tir_label=tir_label, |
108 none_value_reason=none_value_reason) | 111 none_value_reason=none_value_reason, |
| 112 improvement_direction=v0.improvement_direction) |
OLD | NEW |