| 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 | 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 Loading... |
| 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) |
| OLD | NEW |