| Index: tools/telemetry/telemetry/value/list_of_string_values.py
|
| diff --git a/tools/telemetry/telemetry/value/list_of_string_values.py b/tools/telemetry/telemetry/value/list_of_string_values.py
|
| index eaecbe1227f105435c5a394cb17b483ef64fbf4e..4f3604a44f3300ea3dce0cd05ee29ae2504fe83e 100644
|
| --- a/tools/telemetry/telemetry/value/list_of_string_values.py
|
| +++ b/tools/telemetry/telemetry/value/list_of_string_values.py
|
| @@ -3,19 +3,22 @@
|
| # found in the LICENSE file.
|
|
|
| from telemetry import value as value_module
|
| +from telemetry.value import none_values
|
|
|
|
|
| class ListOfStringValues(value_module.Value):
|
| def __init__(self, page, name, units, values,
|
| - important=True, description=None,
|
| + important=True, description=None, none_value_reason=None,
|
| same_page_merge_policy=value_module.CONCATENATE):
|
| super(ListOfStringValues, self).__init__(page, name, units, important,
|
| description)
|
| - assert len(values) > 0
|
| - assert isinstance(values, list)
|
| - for v in values:
|
| - assert isinstance(v, basestring)
|
| + if values is not None:
|
| + assert isinstance(values, list)
|
| + assert len(values) > 0
|
| + assert all(isinstance(v, basestring) for v in values)
|
| + none_values.ValidateNoneValueReason(values, none_value_reason)
|
| self.values = values
|
| + self.none_value_reason = none_value_reason
|
| self.same_page_merge_policy = same_page_merge_policy
|
|
|
| def __repr__(self):
|
| @@ -62,6 +65,10 @@ class ListOfStringValues(value_module.Value):
|
| def AsDict(self):
|
| d = super(ListOfStringValues, self).AsDict()
|
| d['values'] = self.values
|
| +
|
| + if self.none_value_reason is not None:
|
| + d['none_value_reason'] = self.none_value_reason
|
| +
|
| return d
|
|
|
| @staticmethod
|
| @@ -69,6 +76,9 @@ class ListOfStringValues(value_module.Value):
|
| kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
|
| kwargs['values'] = value_dict['values']
|
|
|
| + if 'none_value_reason' in value_dict:
|
| + kwargs['none_value_reason'] = value_dict['none_value_reason']
|
| +
|
| return ListOfStringValues(**kwargs)
|
|
|
| @classmethod
|
| @@ -81,32 +91,34 @@ class ListOfStringValues(value_module.Value):
|
| v0.page, v0.name, v0.units,
|
| values[0].values,
|
| important=v0.important,
|
| - same_page_merge_policy=v0.same_page_merge_policy)
|
| + same_page_merge_policy=v0.same_page_merge_policy,
|
| + none_value_reason=v0.none_value_reason)
|
|
|
| assert v0.same_page_merge_policy == value_module.CONCATENATE
|
| - all_values = []
|
| - for v in values:
|
| - all_values.extend(v.values)
|
| - return ListOfStringValues(
|
| - v0.page, v0.name, v0.units,
|
| - all_values,
|
| - important=v0.important,
|
| - same_page_merge_policy=v0.same_page_merge_policy)
|
| + 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]
|
| - all_values = []
|
| + 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_values = []
|
| + none_value_reason = None
|
| for v in values:
|
| - all_values.extend(v.values)
|
| - if not group_by_name_suffix:
|
| - name = v0.name
|
| - else:
|
| - name = v0.name_suffix
|
| + if v.values is None:
|
| + merged_values = None
|
| + none_value_reason = none_values.MERGE_FAILURE_REASON
|
| + break
|
| + merged_values.extend(v.values)
|
| return ListOfStringValues(
|
| - None, name, v0.units,
|
| - all_values,
|
| + page, name, v0.units,
|
| + merged_values,
|
| important=v0.important,
|
| - same_page_merge_policy=v0.same_page_merge_policy)
|
| + same_page_merge_policy=v0.same_page_merge_policy,
|
| + none_value_reason=none_value_reason)
|
|
|