Index: tools/telemetry/telemetry/results/csv_output_formatter.py |
diff --git a/tools/telemetry/telemetry/results/csv_page_measurement_results.py b/tools/telemetry/telemetry/results/csv_output_formatter.py |
similarity index 51% |
rename from tools/telemetry/telemetry/results/csv_page_measurement_results.py |
rename to tools/telemetry/telemetry/results/csv_output_formatter.py |
index 8d396354423704e09df5d9fdbac4db241c5e6c66..3c10657adc4d7599eeeb0e046d5f2e93764e2e38 100644 |
--- a/tools/telemetry/telemetry/results/csv_page_measurement_results.py |
+++ b/tools/telemetry/telemetry/results/csv_output_formatter.py |
@@ -4,30 +4,27 @@ |
import csv |
-from telemetry.results import page_measurement_results |
+from telemetry.results import output_formatter |
from telemetry.value import merge_values |
-class CsvPageMeasurementResults( |
- page_measurement_results.PageMeasurementResults): |
+class CsvOutputFormatter(output_formatter.OutputFormatter): |
def __init__(self, output_stream): |
- super(CsvPageMeasurementResults, self).__init__(output_stream) |
- self._results_writer = csv.writer(self._output_stream) |
- self._representative_value_names = None |
+ super(CsvOutputFormatter, self).__init__(output_stream) |
- def PrintSummary(self): |
- try: |
- values = merge_values.MergeLikeValuesFromSamePage( |
- self.all_page_specific_values) |
- self._OutputHeader(values) |
- value_groups_by_page = merge_values.GroupStably( |
- values, lambda value: value.page.url) |
- for values_for_page in value_groups_by_page: |
- self._OutputValuesForPage(values_for_page[0].page, values_for_page) |
- finally: |
- super(CsvPageMeasurementResults, self).PrintSummary() |
+ def Format(self, page_test_results): |
+ values = merge_values.MergeLikeValuesFromSamePage( |
+ page_test_results.all_page_specific_values) |
+ writer = csv.writer(self.output_stream) |
+ header_value_names = self._OutputHeader(values, writer) |
+ value_groups_by_page = merge_values.GroupStably( |
+ values, lambda value: value.page.url) |
+ for values_for_page in value_groups_by_page: |
+ self._OutputValuesForPage( |
+ header_value_names, values_for_page[0].page, values_for_page, |
+ writer) |
- def _OutputHeader(self, values): |
+ def _OutputHeader(self, values, csv_writer): |
"""Output the header rows. |
This will retrieve the header string from the given values. As a |
@@ -39,33 +36,39 @@ class CsvPageMeasurementResults( |
Args: |
values: A set of values from which to extract the header string, |
which is the value name and the units. |
+ writer: A csv.writer instance. |
+ |
+ Returns: |
+ The value names being output on the header, in the order of |
+ output. |
""" |
representative_values = {} |
for value in values: |
if value.name not in representative_values: |
representative_values[value.name] = value |
- self._representative_value_names = list( |
- representative_values.keys()) |
- self._representative_value_names.sort() |
+ header_value_names = list(representative_values.keys()) |
+ header_value_names.sort() |
row = ['page_name'] |
- for value_name in self._representative_value_names: |
+ for value_name in header_value_names: |
units = representative_values[value_name].units |
row.append('%s (%s)' % (value_name, units)) |
- self._results_writer.writerow(row) |
- self._output_stream.flush() |
+ csv_writer.writerow(row) |
+ self.output_stream.flush() |
+ return header_value_names |
- def _OutputValuesForPage(self, page, page_values): |
+ def _OutputValuesForPage(self, header_value_names, page, page_values, |
+ csv_writer): |
row = [page.display_name] |
values_by_value_name = {} |
for value in page_values: |
values_by_value_name[value.name] = value |
- for value_name in self._representative_value_names: |
+ for value_name in header_value_names: |
value = values_by_value_name.get(value_name, None) |
if value and value.GetRepresentativeNumber(): |
row.append('%s' % value.GetRepresentativeNumber()) |
else: |
row.append('-') |
- self._results_writer.writerow(row) |
- self._output_stream.flush() |
+ csv_writer.writerow(row) |
+ self.output_stream.flush() |