OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 from collections import defaultdict | 5 from collections import defaultdict |
6 | 6 |
7 from telemetry.value import merge_values | 7 from telemetry.value import merge_values |
8 | 8 |
9 class Summary(object): | 9 class Summary(object): |
10 """Computes summary values from the per-page-run values produced by a test. | 10 """Computes summary values from the per-page-run values produced by a test. |
(...skipping 14 matching lines...) Expand all Loading... |
25 ListOfScalarValues(page1, 'foo', units='ms', [1,1,1])], | 25 ListOfScalarValues(page1, 'foo', units='ms', [1,1,1])], |
26 ListOfScalarValues(page2, 'foo', units='ms', [2])] | 26 ListOfScalarValues(page2, 'foo', units='ms', [2])] |
27 ] | 27 ] |
28 | 28 |
29 In addition, it will produce a summary value: | 29 In addition, it will produce a summary value: |
30 [ | 30 [ |
31 ListOfScalarValues(page=None, 'foo', units='ms', [1,1,1,2])] | 31 ListOfScalarValues(page=None, 'foo', units='ms', [1,1,1,2])] |
32 ] | 32 ] |
33 | 33 |
34 """ | 34 """ |
35 def __init__(self, all_page_specific_values, had_errors_or_failures): | 35 def __init__(self, all_page_specific_values, had_failures): |
36 self.had_errors_or_failures = had_errors_or_failures | 36 self.had_failures = had_failures |
37 self._computed_per_page_values = [] | 37 self._computed_per_page_values = [] |
38 self._computed_summary_values = [] | 38 self._computed_summary_values = [] |
39 self._interleaved_computed_per_page_values_and_summaries = [] | 39 self._interleaved_computed_per_page_values_and_summaries = [] |
40 self._ComputePerPageValues(all_page_specific_values) | 40 self._ComputePerPageValues(all_page_specific_values) |
41 | 41 |
42 @property | 42 @property |
43 def computed_per_page_values(self): | 43 def computed_per_page_values(self): |
44 return self._computed_per_page_values | 44 return self._computed_per_page_values |
45 | 45 |
46 @property | 46 @property |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 # that name. | 93 # that name. |
94 per_page_values_by_value_name = defaultdict(list) | 94 per_page_values_by_value_name = defaultdict(list) |
95 for value in merged_page_values: | 95 for value in merged_page_values: |
96 per_page_values_by_value_name[value.name].append(value) | 96 per_page_values_by_value_name[value.name].append(value) |
97 | 97 |
98 # We already have the x values in the values array. But, we also need | 98 # We already have the x values in the values array. But, we also need |
99 # the values merged across the pages. And, we will need them indexed by | 99 # the values merged across the pages. And, we will need them indexed by |
100 # value name so that we can find them when printing out value names in | 100 # value name so that we can find them when printing out value names in |
101 # alphabetical order. | 101 # alphabetical order. |
102 merged_pages_value_by_value_name = {} | 102 merged_pages_value_by_value_name = {} |
103 if not self.had_errors_or_failures: | 103 if not self.had_failures: |
104 for value in merge_values.MergeLikeValuesFromDifferentPages( | 104 for value in merge_values.MergeLikeValuesFromDifferentPages( |
105 all_successful_page_values): | 105 all_successful_page_values): |
106 assert value.name not in merged_pages_value_by_value_name | 106 assert value.name not in merged_pages_value_by_value_name |
107 merged_pages_value_by_value_name[value.name] = value | 107 merged_pages_value_by_value_name[value.name] = value |
108 | 108 |
109 # sorted_value names will govern the order we start printing values. | 109 # sorted_value names will govern the order we start printing values. |
110 value_names = set([v.name for v in merged_page_values]) | 110 value_names = set([v.name for v in merged_page_values]) |
111 sorted_value_names = sorted(value_names) | 111 sorted_value_names = sorted(value_names) |
112 | 112 |
113 # Time to walk through the values by name, printing first the page-specific | 113 # Time to walk through the values by name, printing first the page-specific |
(...skipping 21 matching lines...) Expand all Loading... |
135 self._interleaved_computed_per_page_values_and_summaries.append( | 135 self._interleaved_computed_per_page_values_and_summaries.append( |
136 merged_pages_value) | 136 merged_pages_value) |
137 | 137 |
138 def _ComputePerPageValue( | 138 def _ComputePerPageValue( |
139 self, value, num_successful_pages_for_this_value_name): | 139 self, value, num_successful_pages_for_this_value_name): |
140 # If there were any page errors, we typically will print nothing. | 140 # If there were any page errors, we typically will print nothing. |
141 # | 141 # |
142 # Note: this branch is structured less-densely to improve legibility. | 142 # Note: this branch is structured less-densely to improve legibility. |
143 if num_successful_pages_for_this_value_name > 1: | 143 if num_successful_pages_for_this_value_name > 1: |
144 should_print = True | 144 should_print = True |
145 elif (self.had_errors_or_failures and | 145 elif (self.had_failures and |
146 num_successful_pages_for_this_value_name == 1): | 146 num_successful_pages_for_this_value_name == 1): |
147 should_print = True | 147 should_print = True |
148 else: | 148 else: |
149 should_print = False | 149 should_print = False |
150 | 150 |
151 if not should_print: | 151 if not should_print: |
152 return | 152 return |
153 | 153 |
154 # Actually save the result. | 154 # Actually save the result. |
155 self._computed_per_page_values.append(value) | 155 self._computed_per_page_values.append(value) |
156 self._interleaved_computed_per_page_values_and_summaries.append(value) | 156 self._interleaved_computed_per_page_values_and_summaries.append(value) |
OLD | NEW |