Home | History | Annotate | Download | only in bootperf-bin
      1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """Routines for printing boot time performance test results."""
      6 
      7 import resultset
      8 
      9 
     10 def PrintRawData(reader, dirlist, keytype, keylist):
     11   """Print 'bootperf' results in "raw data" format.
     12 
     13   @param reader Function for reading results from results
     14                 directories.
     15   @param dirlist List of directories to read results from.
     16   @param keytype Selector specifying the desired key set (e.g.
     17                  the boot time keyset, the disk stats keyset, etc.)
     18   @param keylist List of event keys to be printed in the report.
     19 
     20   """
     21   for dir_ in dirlist:
     22     results = reader(dir_)
     23     keyset = results.KeySet(keytype)
     24     for i in range(0, keyset.num_iterations):
     25       if len(dirlist) > 1:
     26         line = "%s %3d" % (results.name, i)
     27       else:
     28         line = "%3d" % i
     29       if keylist is not None:
     30         markers = keylist
     31       else:
     32         markers = keyset.markers
     33       for stat in markers:
     34         (_, v) = keyset.PrintableStatistic(keyset.RawData(stat)[i])
     35         line += " %5s" % str(v)
     36       print line
     37 
     38 
     39 def PrintStatisticsSummary(reader, dirlist, keytype, keylist):
     40   """Print 'bootperf' results in "summary of averages" format.
     41 
     42   @param reader Function for reading results from results
     43                 directories.
     44   @param dirlist List of directories to read results from.
     45   @param keytype Selector specifying the desired key set (e.g.
     46                  the boot time keyset, the disk stats keyset, etc.)
     47   @param keylist List of event keys to be printed in the report.
     48 
     49   """
     50   if (keytype == resultset.TestResultSet.BOOTTIME_KEYSET or
     51       keytype == resultset.TestResultSet.FIRMWARE_KEYSET):
     52     header = "%5s %3s  %5s %3s  %s" % (
     53         "time", "s%", "dt", "s%", "event")
     54     tformat = "%5s %2d%%  %5s %2d%%  %s"
     55   else:
     56     header = "%7s %3s  %7s %3s  %s" % (
     57         "diskrd", "s%", "delta", "s%", "event")
     58     tformat = "%7s %2d%%  %7s %2d%%  %s"
     59   havedata = False
     60   for dir_ in dirlist:
     61     results = reader(dir_)
     62     keyset = results.KeySet(keytype)
     63     if keylist is not None:
     64       markers = keylist
     65     else:
     66       markers = keyset.markers
     67     if havedata:
     68       print
     69     if len(dirlist) > 1:
     70       print "%s" % results.name,
     71     print "(on %d cycles):" % keyset.num_iterations
     72     print header
     73     prevvalue = 0
     74     prevstat = None
     75     for stat in markers:
     76       (valueavg, valuedev) = keyset.Statistics(stat)
     77       valuepct = int(100 * valuedev / valueavg + 0.5)
     78       if prevstat:
     79         (deltaavg, deltadev) = keyset.DeltaStatistics(prevstat, stat)
     80         deltapct = int(100 * deltadev / deltaavg + 0.5)
     81       else:
     82         deltapct = valuepct
     83       (valstring, val_printed) = keyset.PrintableStatistic(valueavg)
     84       delta = val_printed - prevvalue
     85       (deltastring, _) = keyset.PrintableStatistic(delta)
     86       print tformat % (valstring, valuepct, "+" + deltastring, deltapct, stat)
     87       prevvalue = val_printed
     88       prevstat = stat
     89     havedata = True
     90