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

Unified Diff: tools/telemetry/telemetry/value/string.py

Issue 475503004: Support None value for telemetry values. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
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..b1cb6ff45eda72cd47b7d460e9b4d089e5c31b24 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.ValidateNoneValueReason(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)
« no previous file with comments | « tools/telemetry/telemetry/value/scalar_unittest.py ('k') | tools/telemetry/telemetry/value/string_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698