Index: tools/telemetry/telemetry/csv_page_benchmark_results.py |
diff --git a/tools/telemetry/telemetry/csv_page_benchmark_results.py b/tools/telemetry/telemetry/csv_page_benchmark_results.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3a9995e344b3278d8e596701270e0c461245f416 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/csv_page_benchmark_results.py |
@@ -0,0 +1,79 @@ |
+# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+from telemetry.page_benchmark_results import PageBenchmarkResults |
+ |
+class CsvPageBenchmarkResults(PageBenchmarkResults): |
+ def __init__(self, results_writer, output_after_every_page): |
+ super(CsvPageBenchmarkResults, self).__init__() |
+ self._results_writer = results_writer |
+ self._did_output_header = False |
+ self._header_names_written_to_writer = None |
+ self._output_after_every_page = output_after_every_page |
+ |
+ def DidMeasurePage(self): |
+ assert self.values_for_current_page, 'Failed to call WillMeasurePage' |
+ if not self._output_after_every_page: |
+ super(CsvPageBenchmarkResults, self).DidMeasurePage() |
+ return |
+ |
+ if not self._did_output_header: |
+ self._OutputHeader() |
+ else: |
+ self._ValidateOutputNamesForCurrentPage() |
+ |
+ self._OutputValuesForPage(self.values_for_current_page) |
+ |
+ super(CsvPageBenchmarkResults, self).DidMeasurePage() |
+ |
+ def PrintSummary(self, trace_tag): |
+ if not self._output_after_every_page: |
+ self._OutputHeader() |
+ for page_values in self.all_values_for_all_pages: |
+ self._OutputValuesForPage(page_values) |
+ |
+ super(CsvPageBenchmarkResults, self).PrintSummary(trace_tag) |
+ |
+ def _ValidateOutputNamesForCurrentPage(self): |
+ assert self._did_output_header |
+ current_page_measurement_names = \ |
+ self.values_for_current_page.measurement_names |
+ if self._header_names_written_to_writer == current_page_measurement_names: |
+ return |
+ assert False, """To use CsvPageBenchmarkResults, you must add the same |
+result names for every page. In this case, first page output: |
+%s |
+ |
+Thus, all subsequent pages must output this as well. Instead, the current page |
+output: |
+%s |
+ |
+Change your test to produce the same thing each time, or modify |
+MultiPageBenchmark.results_are_the_same_on_every_page to return False. |
+""" % (repr(self._header_names_written_to_writer), |
+ repr(current_page_measurement_names)) |
+ |
+ def _OutputHeader(self): |
+ assert not self._did_output_header |
+ all_measurement_names = list( |
+ self.all_measurements_that_have_been_seen.keys()) |
+ all_measurement_names.sort() |
+ self._did_output_header = True |
+ self._header_names_written_to_writer = list(all_measurement_names) |
+ |
+ row = ['url'] |
+ for measurement_name in all_measurement_names: |
+ measurement_data = \ |
+ self.all_measurements_that_have_been_seen[measurement_name] |
+ row.append('%s (%s)' % (measurement_name, measurement_data['units'])) |
+ self._results_writer.writerow(row) |
+ |
+ def _OutputValuesForPage(self, page_values): |
+ row = [page_values.page.url] |
+ for measurement_name in self._header_names_written_to_writer: |
+ value = page_values.FindValueByMeasurementName(measurement_name) |
+ if value: |
+ row.append('%s' % value.output_value) |
+ else: |
+ row.append('-') |
+ self._results_writer.writerow(row) |