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 reading performance results from a directory.
      6 
      7 The directory should match the format created by the 'bootperf'
      8 script; see comments in that script for a summary of the layout.
      9 
     10 """
     11 
     12 import fnmatch
     13 import os
     14 import re
     15 
     16 import resultset
     17 
     18 
     19 _PERF_KEYVAL_PATTERN = re.compile("(.*){perf}=(.*)\n")
     20 
     21 
     22 def _ReadKeyvalFile(results, file_):
     23   """Read an autotest keyval file, and process the results.
     24 
     25   The `file_` parameter is a file object with contents in autotest
     26   perf keyval format:
     27       <keyname>{perf}=<value>
     28 
     29   Each iteration of the test is terminated with a single blank line,
     30   including the last iteration.  Each iteration's results are added
     31   to the `results` parameter, which should be an instance of
     32   TestResultSet.
     33 
     34   @param results A TestResultSet where the result data will be
     35                  collected.
     36   @param file_ File object for the results file to be read.
     37 
     38   """
     39   kvd = {}
     40   for line in iter(file_):
     41     if line == "\n":
     42       results.AddIterationResults(kvd)
     43       kvd = {}
     44       continue
     45     m = _PERF_KEYVAL_PATTERN.match(line)
     46     if m is None:
     47       continue
     48     kvd[m.group(1)] = m.group(2)
     49 
     50 
     51 _RESULTS_PATH = "summary/platform_BootPerfServer/results/keyval"
     52 
     53 
     54 def ReadResultsDirectory(dir_):
     55   """Process results from a 'bootperf' output directory.
     56 
     57   The accumulated results are returned in a newly created
     58   TestResultSet object.
     59 
     60   @param dir_ The directory containing the test results keyval file.
     61 
     62   """
     63   res_set = resultset.TestResultSet(dir_)
     64   dirlist = fnmatch.filter(os.listdir(dir_), "run.???")
     65   dirlist.sort()
     66   for rundir in dirlist:
     67     keyval_path = os.path.join(dir_, rundir, _RESULTS_PATH)
     68     try:
     69       kvf = open(keyval_path)
     70     except IOError:
     71       continue
     72     _ReadKeyvalFile(res_set, kvf)
     73   res_set.FinalizeResults()
     74   return res_set
     75