| # 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 |