# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | |
# Use of this source code is governed by a BSD-style license that can be | |
# found in the LICENSE file. | |
"""Routines for printing boot time performance test results.""" | |
import resultset | |
def PrintRawData(reader, dirlist, keytype, keylist): | |
"""Print 'bootperf' results in "raw data" format. | |
@param reader Function for reading results from results | |
directories. | |
@param dirlist List of directories to read results from. | |
@param keytype Selector specifying the desired key set (e.g. | |
the boot time keyset, the disk stats keyset, etc.) | |
@param keylist List of event keys to be printed in the report. | |
""" | |
for dir_ in dirlist: | |
results = reader(dir_) | |
keyset = results.KeySet(keytype) | |
for i in range(0, keyset.num_iterations): | |
if len(dirlist) > 1: | |
line = "%s %3d" % (results.name, i) | |
else: | |
line = "%3d" % i | |
if keylist is not None: | |
markers = keylist | |
else: | |
markers = keyset.markers | |
for stat in markers: | |
(_, v) = keyset.PrintableStatistic(keyset.RawData(stat)[i]) | |
line += " %5s" % str(v) | |
print line | |
def PrintStatisticsSummary(reader, dirlist, keytype, keylist): | |
"""Print 'bootperf' results in "summary of averages" format. | |
@param reader Function for reading results from results | |
directories. | |
@param dirlist List of directories to read results from. | |
@param keytype Selector specifying the desired key set (e.g. | |
the boot time keyset, the disk stats keyset, etc.) | |
@param keylist List of event keys to be printed in the report. | |
""" | |
if (keytype == resultset.TestResultSet.BOOTTIME_KEYSET or | |
keytype == resultset.TestResultSet.FIRMWARE_KEYSET): | |
header = "%5s %3s %5s %3s %s" % ( | |
"time", "s%", "dt", "s%", "event") | |
tformat = "%5s %2d%% %5s %2d%% %s" | |
else: | |
header = "%7s %3s %7s %3s %s" % ( | |
"diskrd", "s%", "delta", "s%", "event") | |
tformat = "%7s %2d%% %7s %2d%% %s" | |
havedata = False | |
for dir_ in dirlist: | |
results = reader(dir_) | |
keyset = results.KeySet(keytype) | |
if keylist is not None: | |
markers = keylist | |
else: | |
markers = keyset.markers | |
if havedata: | |
if len(dirlist) > 1: | |
print "%s" % results.name, | |
print "(on %d cycles):" % keyset.num_iterations | |
print header | |
prevvalue = 0 | |
prevstat = None | |
for stat in markers: | |
(valueavg, valuedev) = keyset.Statistics(stat) | |
valuepct = int(100 * valuedev / valueavg + 0.5) | |
if prevstat: | |
(deltaavg, deltadev) = keyset.DeltaStatistics(prevstat, stat) | |
if deltaavg == 0: | |
deltaavg=1 | |
print "deltaavg is zero! (delta is %s to %s)" % (prevstat, stat) | |
deltapct = int(100 * deltadev / deltaavg + 0.5) | |
else: | |
deltapct = valuepct | |
(valstring, val_printed) = keyset.PrintableStatistic(valueavg) | |
delta = val_printed - prevvalue | |
(deltastring, _) = keyset.PrintableStatistic(delta) | |
print tformat % (valstring, valuepct, "+" + deltastring, deltapct, stat) | |
prevvalue = val_printed | |
prevstat = stat | |
havedata = True |