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(
return
if not self._did_output_header:
self._OutputHeader()
self._OutputHeader(values)
else:
self._ValidateOutputNamesForCurrentPage()
self._OutputValuesForPage(values[0].page, values)
......@@ -39,9 +39,9 @@ class CsvPageMeasurementResults(
if self._output_after_every_page:
return
self._OutputHeader()
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:
......@@ -61,17 +61,32 @@ added:
%s
""" % (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
all_value_names = list(
self.all_value_names_that_have_been_seen)
all_value_names.sort()
representative_value_names = {}
for value in values:
if value.name not in representative_value_names:
representative_value_names[value.name] = value
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']
for value_name in all_value_names:
units = self.GetUnitsForValueName(value_name)
for value_name in self._header_names_written_to_writer:
units = representative_value_names[value_name].units
row.append('%s (%s)' % (value_name, units))
self._results_writer.writerow(row)
self._output_stream.flush()
......
......@@ -15,7 +15,7 @@ class PageMeasurementResults(page_test_results.PageTestResults):
self._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_page_specific_values = []
......@@ -30,13 +30,6 @@ class PageMeasurementResults(page_test_results.PageTestResults):
def current_page(self):
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
def all_page_specific_values(self):
return self._all_page_specific_values
......@@ -70,13 +63,10 @@ class PageMeasurementResults(page_test_results.PageTestResults):
def _ValidateValue(self, value):
assert isinstance(value, value_module.Value)
if value.name not in self._representative_values_for_each_value_name:
self._representative_values_for_each_value_name[value.name] = value
representative_value = self._representative_values_for_each_value_name[
if value.name not in self._representative_value_for_each_value_name:
self._representative_value_for_each_value_name[value.name] = value
representative_value = self._representative_value_for_each_value_name[
value.name]
assert value.IsMergableWith(representative_value)
def DidMeasurePage(self):
......
......@@ -73,19 +73,6 @@ class PageMeasurementResultsTest(unittest.TestCase):
lambda: results.AddValue(scalar.ScalarValue(
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):
results = NonPrintingPageMeasurementResults()
results.WillMeasurePage(self.pages[0])
......@@ -106,8 +93,6 @@ class PageMeasurementResultsTest(unittest.TestCase):
lambda: results.AddValue(scalar.ScalarValue(
self.pages[1], 'a', 'foobgrobbers', 3)))
self.assertEquals(['a'], results.all_value_names_that_have_been_seen)
def test_type_change(self):
results = NonPrintingPageMeasurementResults()
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