summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/performance_tests/perftest.py
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-08-12 09:27:39 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-08-12 09:27:39 +0200
commit3749d61e1f7a59f5ec5067e560af1eb610c82015 (patch)
tree73dc228333948738bbe02976cacca8cd382bc978 /Tools/Scripts/webkitpy/performance_tests/perftest.py
parentb32b4dcd9a51ab8de6afc53d9e17f8707e1f7a5e (diff)
downloadqtwebkit-3749d61e1f7a59f5ec5067e560af1eb610c82015.tar.gz
Imported WebKit commit a77350243e054f3460d1137301d8b3faee3d2052 (http://svn.webkit.org/repository/webkit/trunk@125365)
New snapshot with build fixes for latest API changes in Qt and all WK1 Win MSVC fixes upstream
Diffstat (limited to 'Tools/Scripts/webkitpy/performance_tests/perftest.py')
-rw-r--r--Tools/Scripts/webkitpy/performance_tests/perftest.py60
1 files changed, 37 insertions, 23 deletions
diff --git a/Tools/Scripts/webkitpy/performance_tests/perftest.py b/Tools/Scripts/webkitpy/performance_tests/perftest.py
index 8aac78f3d..b111c9b4b 100644
--- a/Tools/Scripts/webkitpy/performance_tests/perftest.py
+++ b/Tools/Scripts/webkitpy/performance_tests/perftest.py
@@ -103,8 +103,6 @@ class PerfTest(object):
# Following is for html5.html
re.compile(re.escape("""Blocked access to external URL http://www.whatwg.org/specs/web-apps/current-work/"""))]
- _statistics_keys = ['avg', 'median', 'stdev', 'min', 'max']
-
def _should_ignore_line_in_parser_test_result(self, line):
if not line:
return True
@@ -113,48 +111,65 @@ class PerfTest(object):
return True
return False
+ _description_regex = re.compile(r'^Description: (?P<description>.*)$', re.IGNORECASE)
+ _result_classes = ['Time', 'JS Heap', 'FastMalloc']
+ _result_class_regex = re.compile(r'^(?P<resultclass>' + r'|'.join(_result_classes) + '):')
+ _statistics_keys = ['avg', 'median', 'stdev', 'min', 'max', 'unit']
+ _score_regex = re.compile(r'^(?P<key>' + r'|'.join(_statistics_keys) + r')\s+(?P<value>[0-9\.]+)\s*(?P<unit>.*)')
+
def parse_output(self, output):
- got_a_result = False
test_failed = False
results = {}
- score_regex = re.compile(r'^(?P<key>' + r'|'.join(self._statistics_keys) + r')\s+(?P<value>[0-9\.]+)\s*(?P<unit>.*)')
- description_regex = re.compile(r'^Description: (?P<description>.*)$', re.IGNORECASE)
+ ordered_results_keys = []
+ test_name = re.sub(r'\.\w+$', '', self._test_name)
description_string = ""
- unit = "ms"
-
+ result_class = ""
for line in re.split('\n', output.text):
- description = description_regex.match(line)
+ description = self._description_regex.match(line)
if description:
description_string = description.group('description')
continue
- score = score_regex.match(line)
+ result_class_match = self._result_class_regex.match(line)
+ if result_class_match:
+ result_class = result_class_match.group('resultclass')
+ continue
+
+ score = self._score_regex.match(line)
if score:
- results[score.group('key')] = float(score.group('value'))
- if score.group('unit'):
- unit = score.group('unit')
+ key = score.group('key')
+ value = float(score.group('value'))
+ unit = score.group('unit')
+ name = test_name
+ if result_class != 'Time':
+ name += ':' + result_class.replace(' ', '')
+ if name not in ordered_results_keys:
+ ordered_results_keys.append(name)
+ results.setdefault(name, {})
+ results[name]['unit'] = unit
+ results[name][key] = value
continue
if not self._should_ignore_line_in_parser_test_result(line):
test_failed = True
_log.error(line)
- if test_failed or set(self._statistics_keys) != set(results.keys()):
+ if test_failed or set(self._statistics_keys) != set(results[test_name].keys()):
return None
- results['unit'] = unit
-
- test_name = re.sub(r'\.\w+$', '', self._test_name)
- self.output_statistics(test_name, results, description_string)
-
- return {test_name: results}
+ for result_name in ordered_results_keys:
+ if result_name == test_name:
+ self.output_statistics(result_name, results[result_name], description_string)
+ else:
+ self.output_statistics(result_name, results[result_name])
+ return results
- def output_statistics(self, test_name, results, description_string):
+ def output_statistics(self, test_name, results, description_string=None):
unit = results['unit']
if description_string:
_log.info('DESCRIPTION: %s' % description_string)
- _log.info('RESULT %s= %s %s' % (test_name.replace('/', ': '), results['avg'], unit))
- _log.info(', '.join(['%s= %s %s' % (key, results[key], unit) for key in self._statistics_keys[1:]]))
+ _log.info('RESULT %s= %s %s' % (test_name.replace(':', ': ').replace('/', ': '), results['avg'], unit))
+ _log.info(', '.join(['%s= %s %s' % (key, results[key], unit) for key in self._statistics_keys[1:5]]))
class ChromiumStylePerfTest(PerfTest):
@@ -165,7 +180,6 @@ class ChromiumStylePerfTest(PerfTest):
def parse_output(self, output):
test_failed = False
- got_a_result = False
results = {}
for line in re.split('\n', output.text):
resultLine = ChromiumStylePerfTest._chromium_style_result_regex.match(line)