| #!/usr/bin/python |
| # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import re |
| |
| |
| def _EscapePerfResult(s): |
| """Escapes |s| for use in a perf result.""" |
| # Colons (:) and equal signs (=) are not allowed, and we chose an arbitrary |
| # limit of 40 chars. |
| return re.sub(':|=', '_', s[:40]) |
| |
| |
| def PrintPerfResult(measurement, trace, values, units, important=True, |
| print_to_stdout=True): |
| """Prints numerical data to stdout in the format required by perf tests. |
| |
| The string args may be empty but they must not contain any colons (:) or |
| equals signs (=). |
| |
| Args: |
| measurement: A description of the quantity being measured, e.g. "vm_peak". |
| trace: A description of the particular data point, e.g. "reference". |
| values: A list of numeric measured values. |
| units: A description of the units of measure, e.g. "bytes". |
| important: If True, the output line will be specially marked, to notify the |
| post-processor. |
| |
| Returns: |
| String of the formated perf result. |
| """ |
| important_marker = '*' if important else '' |
| |
| assert isinstance(values, list) |
| assert len(values) |
| assert '/' not in measurement |
| avg = None |
| if len(values) > 1: |
| try: |
| value = '[%s]' % ','.join([str(v) for v in values]) |
| avg = sum([float(v) for v in values]) / len(values) |
| except ValueError: |
| value = ", ".join(values) |
| else: |
| value = values[0] |
| |
| output = '%sRESULT %s: %s= %s %s' % (important_marker, |
| _EscapePerfResult(measurement), |
| _EscapePerfResult(trace), |
| value, units) |
| if avg: |
| output += '\nAvg %s: %d%s' % (measurement, avg, units) |
| if print_to_stdout: |
| print output |
| return output |