| Index: tools/telemetry/telemetry/value/string.py
|
| diff --git a/tools/telemetry/telemetry/value/string.py b/tools/telemetry/telemetry/value/string.py
|
| index d82c17c4e2cace7e3123b6c0700dda79208c9fc6..5528eb6b87b06d1c6e3de637e5b982d8470d77b8 100644
|
| --- a/tools/telemetry/telemetry/value/string.py
|
| +++ b/tools/telemetry/telemetry/value/string.py
|
| @@ -4,11 +4,12 @@
|
|
|
| from telemetry import value as value_module
|
| from telemetry.value import list_of_string_values
|
| +from telemetry.value import none_values
|
|
|
|
|
| class StringValue(value_module.Value):
|
| def __init__(self, page, name, units, value, important=True,
|
| - description=None):
|
| + description=None, none_value_reason=None):
|
| """A single value (float, integer or string) result from a test.
|
|
|
| A test that output a hash of the content in a page might produce a
|
| @@ -16,8 +17,10 @@ class StringValue(value_module.Value):
|
| StringValue(page, 'page_hash', 'hash', '74E377FF')
|
| """
|
| super(StringValue, self).__init__(page, name, units, important, description)
|
| - assert isinstance(value, basestring)
|
| + assert value is None or isinstance(value, basestring)
|
| + none_values.ValidateValue(value, none_value_reason)
|
| self.value = value
|
| + self.none_value_reason = none_value_reason
|
|
|
| def __repr__(self):
|
| if self.page:
|
| @@ -55,6 +58,10 @@ class StringValue(value_module.Value):
|
| def AsDict(self):
|
| d = super(StringValue, self).AsDict()
|
| d['value'] = self.value
|
| +
|
| + if self.none_value_reason is not None:
|
| + d['none_value_reason'] = self.none_value_reason
|
| +
|
| return d
|
|
|
| @staticmethod
|
| @@ -62,27 +69,33 @@ class StringValue(value_module.Value):
|
| kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
|
| kwargs['value'] = value_dict['value']
|
|
|
| + if 'none_value_reason' in value_dict:
|
| + kwargs['none_value_reason'] = value_dict['none_value_reason']
|
| +
|
| return StringValue(**kwargs)
|
|
|
| @classmethod
|
| def MergeLikeValuesFromSamePage(cls, values):
|
| assert len(values) > 0
|
| v0 = values[0]
|
| - return list_of_string_values.ListOfStringValues(
|
| - v0.page, v0.name, v0.units,
|
| - [v.value for v in values],
|
| - important=v0.important)
|
| + return cls._MergeLikeValues(values, v0.page, v0.name)
|
|
|
| @classmethod
|
| def MergeLikeValuesFromDifferentPages(cls, values,
|
| group_by_name_suffix=False):
|
| assert len(values) > 0
|
| v0 = values[0]
|
| - if not group_by_name_suffix:
|
| - name = v0.name
|
| - else:
|
| - name = v0.name_suffix
|
| + name = v0.name_suffix if group_by_name_suffix else v0.name
|
| + return cls._MergeLikeValues(values, None, name)
|
| +
|
| + @classmethod
|
| + def _MergeLikeValues(cls, values, page, name):
|
| + v0 = values[0]
|
| + merged_value = [v.value for v in values]
|
| + none_value_reason = None
|
| + if None in merged_value:
|
| + merged_value = None
|
| + none_value_reason = none_values.MERGE_FAILURE_REASON
|
| return list_of_string_values.ListOfStringValues(
|
| - None, name, v0.units,
|
| - [v.value for v in values],
|
| - important=v0.important)
|
| + page, name, v0.units, merged_value, important=v0.important,
|
| + none_value_reason=none_value_reason)
|
|
|