| Index: tools/telemetry/telemetry/results/page_test_results.py
|
| diff --git a/tools/telemetry/telemetry/results/page_test_results.py b/tools/telemetry/telemetry/results/page_test_results.py
|
| index 1d1c375658aad1d1776a50a294a74f452a0c8929..38b1a668aa2127575a127845fa812d7e8ada4bc4 100644
|
| --- a/tools/telemetry/telemetry/results/page_test_results.py
|
| +++ b/tools/telemetry/telemetry/results/page_test_results.py
|
| @@ -8,6 +8,7 @@ import logging
|
| import sys
|
| import traceback
|
|
|
| +from telemetry import value as value_module
|
|
|
| class PageTestResults(object):
|
| def __init__(self, output_stream=None):
|
| @@ -18,6 +19,10 @@ class PageTestResults(object):
|
| self.failures = []
|
| self.skipped = []
|
|
|
| + self._representative_value_for_each_value_name = {}
|
| + self._all_page_specific_values = []
|
| + self._all_summary_values = []
|
| +
|
| def __copy__(self):
|
| cls = self.__class__
|
| result = cls.__new__(cls)
|
| @@ -27,6 +32,20 @@ class PageTestResults(object):
|
| setattr(result, k, v)
|
| return result
|
|
|
| + @property
|
| + def all_page_specific_values(self):
|
| + return self._all_page_specific_values
|
| +
|
| + @property
|
| + def all_summary_values(self):
|
| + return self._all_summary_values
|
| +
|
| + @property
|
| + def pages_that_succeeded(self):
|
| + pages = set([value.page for value in self._all_page_specific_values])
|
| + pages.difference_update(self.pages_that_had_failures)
|
| + return pages
|
| +
|
| def _GetStringFromExcInfo(self, err):
|
| return ''.join(traceback.format_exception(*err))
|
|
|
| @@ -36,6 +55,23 @@ class PageTestResults(object):
|
| def StopTest(self, page):
|
| pass
|
|
|
| + def AddValue(self, value):
|
| + self.ValidateValue(value)
|
| + self._all_page_specific_values.append(value)
|
| +
|
| + def AddSummaryValue(self, value):
|
| + assert value.page is None
|
| + self.ValidateValue(value)
|
| + self._all_summary_values.append(value)
|
| +
|
| + def ValidateValue(self, value):
|
| + assert isinstance(value, value_module.Value)
|
| + 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 AddFailure(self, page, err):
|
| self.pages_that_had_failures.add(page)
|
| self.failures.append((page, self._GetStringFromExcInfo(err)))
|
| @@ -60,3 +96,17 @@ class PageTestResults(object):
|
| if self.skipped:
|
| logging.warning('Skipped pages:\n%s', '\n'.join(
|
| p.display_name for p in zip(*self.skipped)[0]))
|
| +
|
| + def FindPageSpecificValuesForPage(self, page, value_name):
|
| + values = []
|
| + for value in self.all_page_specific_values:
|
| + if value.page == page and value.name == value_name:
|
| + values.append(value)
|
| + return values
|
| +
|
| + def FindAllPageSpecificValuesNamed(self, value_name):
|
| + values = []
|
| + for value in self.all_page_specific_values:
|
| + if value.name == value_name:
|
| + values.append(value)
|
| + return values
|
|
|