# 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 reading performance results from a directory. The directory should match the format created by the 'bootperf' script; see comments in that script for a summary of the layout. """ import fnmatch import os import re import resultset _PERF_KEYVAL_PATTERN = re.compile("(.*){perf}=(.*)\n") def _ReadKeyvalFile(results, file_): """Read an autotest keyval file, and process the results. The `file_` parameter is a file object with contents in autotest perf keyval format: <keyname>{perf}=<value> Each iteration of the test is terminated with a single blank line, including the last iteration. Each iteration's results are added to the `results` parameter, which should be an instance of TestResultSet. @param results A TestResultSet where the result data will be collected. @param file_ File object for the results file to be read. """ kvd = {} for line in iter(file_): if line == "\n": results.AddIterationResults(kvd) kvd = {} continue m = _PERF_KEYVAL_PATTERN.match(line) if m is None: continue kvd[m.group(1)] = m.group(2) _RESULTS_PATH = "summary/platform_BootPerfServer/results/keyval" def ReadResultsDirectory(dir_): """Process results from a 'bootperf' output directory. The accumulated results are returned in a newly created TestResultSet object. @param dir_ The directory containing the test results keyval file. """ res_set = resultset.TestResultSet(dir_) dirlist = fnmatch.filter(os.listdir(dir_), "run.???") dirlist.sort() for rundir in dirlist: keyval_path = os.path.join(dir_, rundir, _RESULTS_PATH) try: kvf = open(keyval_path) except IOError: continue _ReadKeyvalFile(res_set, kvf) res_set.FinalizeResults() return res_set