Commit cb082570 authored by chrishenry@google.com's avatar chrishenry@google.com

Make CsvPageMeasurementResults not depend on

all_value_names_that_have_been_seen.

This makes CsvPageMeasurementResults more self contained and allow
special casing of TraceValue (to be introduced) in
CsvPageMeasurementResults directly rather than in PageMeasurementResults.

This should be inline with the direction we are taking towards
OutputFormatter.

BUG=392901

Review URL: https://codereview.chromium.org/381303002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283435 0039d316-1c4b-4281-b951-d872f2087c98
parent 1682af4c
...@@ -27,7 +27,7 @@ class CsvPageMeasurementResults( ...@@ -27,7 +27,7 @@ class CsvPageMeasurementResults(
return return
if not self._did_output_header: if not self._did_output_header:
self._OutputHeader() self._OutputHeader(values)
else: else:
self._ValidateOutputNamesForCurrentPage() self._ValidateOutputNamesForCurrentPage()
self._OutputValuesForPage(values[0].page, values) self._OutputValuesForPage(values[0].page, values)
...@@ -39,9 +39,9 @@ class CsvPageMeasurementResults( ...@@ -39,9 +39,9 @@ class CsvPageMeasurementResults(
if self._output_after_every_page: if self._output_after_every_page:
return return
self._OutputHeader()
values = merge_values.MergeLikeValuesFromSamePage( values = merge_values.MergeLikeValuesFromSamePage(
self.all_page_specific_values) self.all_page_specific_values)
self._OutputHeader(values)
value_groups_by_page = merge_values.GroupStably( value_groups_by_page = merge_values.GroupStably(
values, lambda value: value.page.url) values, lambda value: value.page.url)
for values_for_page in value_groups_by_page: for values_for_page in value_groups_by_page:
...@@ -61,17 +61,32 @@ added: ...@@ -61,17 +61,32 @@ added:
%s %s
""" % (current_page_value_names - header_names_written_to_writer) """ % (current_page_value_names - header_names_written_to_writer)
def _OutputHeader(self): def _OutputHeader(self, values):
"""Output the header rows.
This will retrieve the header string from the given values. As a
results, you would typically pass it all of the recorded values at
the end of the entire telemetry run. In cases where each page
produces the same set of value names, you may call this method
with that set of values.
Args:
values: A set of values from which to extract the header string,
which is the value name and the units.
"""
assert not self._did_output_header assert not self._did_output_header
all_value_names = list( representative_value_names = {}
self.all_value_names_that_have_been_seen) for value in values:
all_value_names.sort() if value.name not in representative_value_names:
representative_value_names[value.name] = value
self._did_output_header = True self._did_output_header = True
self._header_names_written_to_writer = list(all_value_names) self._header_names_written_to_writer = list(
representative_value_names.keys())
self._header_names_written_to_writer.sort()
row = ['page_name'] row = ['page_name']
for value_name in all_value_names: for value_name in self._header_names_written_to_writer:
units = self.GetUnitsForValueName(value_name) units = representative_value_names[value_name].units
row.append('%s (%s)' % (value_name, units)) row.append('%s (%s)' % (value_name, units))
self._results_writer.writerow(row) self._results_writer.writerow(row)
self._output_stream.flush() self._output_stream.flush()
......
...@@ -15,7 +15,7 @@ class PageMeasurementResults(page_test_results.PageTestResults): ...@@ -15,7 +15,7 @@ class PageMeasurementResults(page_test_results.PageTestResults):
self._current_page = None self._current_page = None
self._page_specific_values_for_current_page = None self._page_specific_values_for_current_page = None
self._representative_values_for_each_value_name = {} self._representative_value_for_each_value_name = {}
self._all_summary_values = [] self._all_summary_values = []
self._all_page_specific_values = [] self._all_page_specific_values = []
...@@ -30,13 +30,6 @@ class PageMeasurementResults(page_test_results.PageTestResults): ...@@ -30,13 +30,6 @@ class PageMeasurementResults(page_test_results.PageTestResults):
def current_page(self): def current_page(self):
return self._current_page return self._current_page
@property
def all_value_names_that_have_been_seen(self):
return list(self._representative_values_for_each_value_name.keys())
def GetUnitsForValueName(self, value_name):
return self._representative_values_for_each_value_name[value_name].units
@property @property
def all_page_specific_values(self): def all_page_specific_values(self):
return self._all_page_specific_values return self._all_page_specific_values
...@@ -70,13 +63,10 @@ class PageMeasurementResults(page_test_results.PageTestResults): ...@@ -70,13 +63,10 @@ class PageMeasurementResults(page_test_results.PageTestResults):
def _ValidateValue(self, value): def _ValidateValue(self, value):
assert isinstance(value, value_module.Value) assert isinstance(value, value_module.Value)
if value.name not in self._representative_value_for_each_value_name:
if value.name not in self._representative_values_for_each_value_name: self._representative_value_for_each_value_name[value.name] = value
self._representative_values_for_each_value_name[value.name] = value representative_value = self._representative_value_for_each_value_name[
representative_value = self._representative_values_for_each_value_name[
value.name] value.name]
assert value.IsMergableWith(representative_value) assert value.IsMergableWith(representative_value)
def DidMeasurePage(self): def DidMeasurePage(self):
......
...@@ -73,19 +73,6 @@ class PageMeasurementResultsTest(unittest.TestCase): ...@@ -73,19 +73,6 @@ class PageMeasurementResultsTest(unittest.TestCase):
lambda: results.AddValue(scalar.ScalarValue( lambda: results.AddValue(scalar.ScalarValue(
self.pages[0], 'url', 'string', 'foo'))) self.pages[0], 'url', 'string', 'foo')))
def test_value_names_that_have_been_seen(self):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
results.AddValue(scalar.ScalarValue(self.pages[0], 'a', 'a_units', 3))
results.AddValue(scalar.ScalarValue(self.pages[0], 'b', 'b_units', 3))
results.AddSummaryValue(scalar.ScalarValue(None, 'c', 'c_units', 3))
results.DidMeasurePage()
self.assertEquals(set(['a', 'b', 'c']),
set(results.all_value_names_that_have_been_seen))
self.assertEquals('a_units', results.GetUnitsForValueName('a'))
self.assertEquals('b_units', results.GetUnitsForValueName('b'))
self.assertEquals('c_units', results.GetUnitsForValueName('c'))
def test_add_summary_value_with_page_specified(self): def test_add_summary_value_with_page_specified(self):
results = NonPrintingPageMeasurementResults() results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0]) results.WillMeasurePage(self.pages[0])
...@@ -106,8 +93,6 @@ class PageMeasurementResultsTest(unittest.TestCase): ...@@ -106,8 +93,6 @@ class PageMeasurementResultsTest(unittest.TestCase):
lambda: results.AddValue(scalar.ScalarValue( lambda: results.AddValue(scalar.ScalarValue(
self.pages[1], 'a', 'foobgrobbers', 3))) self.pages[1], 'a', 'foobgrobbers', 3)))
self.assertEquals(['a'], results.all_value_names_that_have_been_seen)
def test_type_change(self): def test_type_change(self):
results = NonPrintingPageMeasurementResults() results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0]) results.WillMeasurePage(self.pages[0])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment