57 строки
1.8 KiB
Python
57 строки
1.8 KiB
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
|