Index: tools/telemetry/telemetry/page/csv_page_measurement_results.py |
diff --git a/tools/telemetry/telemetry/page/csv_page_measurement_results.py b/tools/telemetry/telemetry/page/csv_page_measurement_results.py |
index 0fafbbbcba50a88d36694ddc316d727b5579732b..b57a143a647718b093975053a4973c17088e1100 100644 |
--- a/tools/telemetry/telemetry/page/csv_page_measurement_results.py |
+++ b/tools/telemetry/telemetry/page/csv_page_measurement_results.py |
@@ -4,6 +4,7 @@ |
import csv |
from telemetry.page import page_measurement_results |
+from telemetry.value import merge_values |
class CsvPageMeasurementResults( |
page_measurement_results.PageMeasurementResults): |
@@ -16,9 +17,10 @@ class CsvPageMeasurementResults( |
self._output_after_every_page = output_after_every_page |
def DidMeasurePage(self): |
- assert self.values_for_current_page, 'Failed to call WillMeasurePage' |
+ assert self.page_specific_values_for_current_page |
- if (not self.values_for_current_page.values or |
+ values = self.page_specific_values_for_current_page |
+ if (not values or |
not self._output_after_every_page): |
# Do not output if no results were added on this page or if output flag |
# is not set. |
@@ -30,25 +32,35 @@ class CsvPageMeasurementResults( |
else: |
self._ValidateOutputNamesForCurrentPage() |
- self._OutputValuesForPage(self.values_for_current_page) |
+ self._OutputValuesForPage(values[0].page, values) |
super(CsvPageMeasurementResults, self).DidMeasurePage() |
def PrintSummary(self): |
- if not self._output_after_every_page: |
- self._OutputHeader() |
- for page_values in self.page_results: |
- self._OutputValuesForPage(page_values) |
+ if self._output_after_every_page: |
+ super(CsvPageMeasurementResults, self).PrintSummary() |
+ return |
+ |
+ self._OutputHeader() |
+ |
+ values = merge_values.MergeLikeValuesFromSamePage( |
+ self.all_page_specific_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) |
super(CsvPageMeasurementResults, self).PrintSummary() |
def _ValidateOutputNamesForCurrentPage(self): |
assert self._did_output_header |
- current_page_measurement_names = \ |
- set(self.values_for_current_page.measurement_names) |
+ current_page_value_names = set([ |
+ value.name for value in self.page_specific_values_for_current_page]) |
header_names_written_to_writer = \ |
set(self._header_names_written_to_writer) |
- if header_names_written_to_writer == current_page_measurement_names: |
+ if header_names_written_to_writer == current_page_value_names: |
return |
assert False, """To use CsvPageMeasurementResults, you must add the same |
result names for every page. In this case, first page output: |
@@ -61,31 +73,34 @@ output: |
Change your test to produce the same thing each time, or modify |
PageMeasurement.results_are_the_same_on_every_page to return False. |
""" % (repr(header_names_written_to_writer), |
- repr(current_page_measurement_names)) |
+ repr(current_page_value_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() |
+ all_value_names = list( |
+ self.all_value_names_that_have_been_seen) |
+ all_value_names.sort() |
self._did_output_header = True |
- self._header_names_written_to_writer = list(all_measurement_names) |
+ self._header_names_written_to_writer = list(all_value_names) |
row = ['page_name'] |
- 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'])) |
+ for value_name in all_value_names: |
+ units = self.GetUnitsForValueName(value_name) |
+ row.append('%s (%s)' % (value_name, units)) |
self._results_writer.writerow(row) |
self._output_stream.flush() |
- def _OutputValuesForPage(self, page_values): |
- row = [page_values.page.display_name] |
- for measurement_name in self._header_names_written_to_writer: |
- value = page_values.FindValueByMeasurementName(measurement_name) |
- if value: |
- row.append('%s' % value.output_value) |
+ def _OutputValuesForPage(self, page, page_values): |
+ 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._header_names_written_to_writer: |
+ 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() |
+ self._output_stream.flush() |