Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / value / list_of_string_values.py
1 # Copyright 2014 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 from telemetry import value as value_module
6
7 class ListOfStringValues(value_module.Value):
8   def __init__(self, page, name, units, values,
9                important=True, same_page_merge_policy=value_module.CONCATENATE):
10     super(ListOfStringValues, self).__init__(page, name, units, important)
11     assert len(values) > 0
12     assert isinstance(values, list)
13     for v in values:
14       assert isinstance(v, basestring)
15     self.values = values
16     self.same_page_merge_policy = same_page_merge_policy
17
18   def __repr__(self):
19     if self.page:
20       page_name = self.page.url
21     else:
22       page_name = None
23     if self.same_page_merge_policy == value_module.CONCATENATE:
24       merge_policy = 'CONCATENATE'
25     else:
26       merge_policy = 'PICK_FIRST'
27     return ('ListOfStringValues(%s, %s, %s, %s, ' +
28             'important=%s, same_page_merge_policy=%s)') % (
29               page_name,
30               self.name, self.units,
31               repr(self.values),
32               self.important,
33               merge_policy)
34
35   def GetBuildbotDataType(self, output_context):
36     if self._IsImportantGivenOutputIntent(output_context):
37       return 'default'
38     return 'unimportant'
39
40   def GetBuildbotValue(self):
41     return self.values
42
43   def GetRepresentativeNumber(self):
44     return None
45
46   def GetRepresentativeString(self):
47     return repr(self.values)
48
49   def IsMergableWith(self, that):
50     return (super(ListOfStringValues, self).IsMergableWith(that) and
51             self.same_page_merge_policy == that.same_page_merge_policy)
52
53   @classmethod
54   def MergeLikeValuesFromSamePage(cls, values):
55     assert len(values) > 0
56     v0 = values[0]
57
58     if v0.same_page_merge_policy == value_module.PICK_FIRST:
59       return ListOfStringValues(
60           v0.page, v0.name, v0.units,
61           values[0].values,
62           important=v0.important,
63           same_page_merge_policy=v0.same_page_merge_policy)
64
65     assert v0.same_page_merge_policy == value_module.CONCATENATE
66     all_values = []
67     for v in values:
68       all_values.extend(v.values)
69     return ListOfStringValues(
70         v0.page, v0.name, v0.units,
71         all_values,
72         important=v0.important,
73         same_page_merge_policy=v0.same_page_merge_policy)
74
75   @classmethod
76   def MergeLikeValuesFromDifferentPages(cls, values,
77                                         group_by_name_suffix=False):
78     assert len(values) > 0
79     v0 = values[0]
80     all_values = []
81     for v in values:
82       all_values.extend(v.values)
83     if not group_by_name_suffix:
84       name = v0.name
85     else:
86       name = v0.name_suffix
87     return ListOfStringValues(
88         None, name, v0.units,
89         all_values,
90         important=v0.important,
91         same_page_merge_policy=v0.same_page_merge_policy)