35884a08ee00e8d14044ff8ff24cf7b2735168a4
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / value / scalar.py
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
3 # found in the LICENSE file.
4
5 import numbers
6
7 from telemetry import value as value_module
8 from telemetry.value import list_of_scalar_values
9
10
11 class ScalarValue(value_module.Value):
12   def __init__(self, page, name, units, value, important=True,
13                description=None):
14     """A single value (float or integer) result from a test.
15
16     A test that counts the number of DOM elements in a page might produce a
17     scalar value:
18        ScalarValue(page, 'num_dom_elements', 'count', num_elements)
19     """
20     super(ScalarValue, self).__init__(page, name, units, important, description)
21     assert isinstance(value, numbers.Number)
22     self.value = value
23
24   def __repr__(self):
25     if self.page:
26       page_name = self.page.url
27     else:
28       page_name = None
29     return 'ScalarValue(%s, %s, %s, %s, important=%s, description=%s)' % (
30       page_name,
31       self.name,
32       self.units,
33       self.value,
34       self.important,
35       self.description)
36
37   def GetBuildbotDataType(self, output_context):
38     if self._IsImportantGivenOutputIntent(output_context):
39       return 'default'
40     return 'unimportant'
41
42   def GetBuildbotValue(self):
43     # Buildbot's print_perf_results method likes to get lists for all values,
44     # even when they are scalar, so list-ize the return value.
45     return [self.value]
46
47   def GetRepresentativeNumber(self):
48     return self.value
49
50   def GetRepresentativeString(self):
51     return str(self.value)
52
53   @staticmethod
54   def GetJSONTypeName():
55     return 'scalar'
56
57   def AsDict(self):
58     d = super(ScalarValue, self).AsDict()
59     d['value'] = self.value
60     return d
61
62   @staticmethod
63   def FromDict(value_dict, page_dict):
64     kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
65     kwargs['value'] = value_dict['value']
66
67     return ScalarValue(**kwargs)
68
69   @classmethod
70   def MergeLikeValuesFromSamePage(cls, values):
71     assert len(values) > 0
72     v0 = values[0]
73     return list_of_scalar_values.ListOfScalarValues(
74         v0.page, v0.name, v0.units,
75         [v.value for v in values],
76         important=v0.important)
77
78   @classmethod
79   def MergeLikeValuesFromDifferentPages(cls, values,
80                                         group_by_name_suffix=False):
81     assert len(values) > 0
82     v0 = values[0]
83     if not group_by_name_suffix:
84       name = v0.name
85     else:
86       name = v0.name_suffix
87     return list_of_scalar_values.ListOfScalarValues(
88         None, name, v0.units,
89         [v.value for v in values],
90         important=v0.important)