OLD | NEW |
| (Empty) |
1 # Copyright (c) 2012 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 from telemetry.page_benchmark_results import PageBenchmarkResults | |
5 | |
6 class CsvPageBenchmarkResults(PageBenchmarkResults): | |
7 def __init__(self, results_writer, output_after_every_page): | |
8 super(CsvPageBenchmarkResults, self).__init__() | |
9 self._results_writer = results_writer | |
10 self._did_output_header = False | |
11 self._header_names_written_to_writer = None | |
12 self._output_after_every_page = output_after_every_page | |
13 | |
14 def DidMeasurePage(self): | |
15 assert self.values_for_current_page, 'Failed to call WillMeasurePage' | |
16 if not self._output_after_every_page: | |
17 super(CsvPageBenchmarkResults, self).DidMeasurePage() | |
18 return | |
19 | |
20 if not self._did_output_header: | |
21 self._OutputHeader() | |
22 else: | |
23 self._ValidateOutputNamesForCurrentPage() | |
24 | |
25 self._OutputValuesForPage(self.values_for_current_page) | |
26 | |
27 super(CsvPageBenchmarkResults, self).DidMeasurePage() | |
28 | |
29 def PrintSummary(self, trace_tag): | |
30 if not self._output_after_every_page: | |
31 self._OutputHeader() | |
32 for page_values in self.page_results: | |
33 self._OutputValuesForPage(page_values) | |
34 | |
35 super(CsvPageBenchmarkResults, self).PrintSummary(trace_tag) | |
36 | |
37 def _ValidateOutputNamesForCurrentPage(self): | |
38 assert self._did_output_header | |
39 current_page_measurement_names = \ | |
40 set(self.values_for_current_page.measurement_names) | |
41 header_names_written_to_writer = \ | |
42 set(self._header_names_written_to_writer) | |
43 if header_names_written_to_writer == current_page_measurement_names: | |
44 return | |
45 assert False, """To use CsvPageBenchmarkResults, you must add the same | |
46 result names for every page. In this case, first page output: | |
47 %s | |
48 | |
49 Thus, all subsequent pages must output this as well. Instead, the current page | |
50 output: | |
51 %s | |
52 | |
53 Change your test to produce the same thing each time, or modify | |
54 MultiPageBenchmark.results_are_the_same_on_every_page to return False. | |
55 """ % (repr(header_names_written_to_writer), | |
56 repr(current_page_measurement_names)) | |
57 | |
58 def _OutputHeader(self): | |
59 assert not self._did_output_header | |
60 all_measurement_names = list( | |
61 self.all_measurements_that_have_been_seen.keys()) | |
62 all_measurement_names.sort() | |
63 self._did_output_header = True | |
64 self._header_names_written_to_writer = list(all_measurement_names) | |
65 | |
66 row = ['url'] | |
67 for measurement_name in all_measurement_names: | |
68 measurement_data = \ | |
69 self.all_measurements_that_have_been_seen[measurement_name] | |
70 row.append('%s (%s)' % (measurement_name, measurement_data['units'])) | |
71 self._results_writer.writerow(row) | |
72 | |
73 def _OutputValuesForPage(self, page_values): | |
74 row = [page_values.page.url] | |
75 for measurement_name in self._header_names_written_to_writer: | |
76 value = page_values.FindValueByMeasurementName(measurement_name) | |
77 if value: | |
78 row.append('%s' % value.output_value) | |
79 else: | |
80 row.append('-') | |
81 self._results_writer.writerow(row) | |
OLD | NEW |