Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2028)

Unified Diff: bootperf-bin/perfprinter.py

Issue 4148011: Create bootperf-bin tools for running boot time tests and reporting results (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: Apply selected fixes recommended by gpylint Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bootperf-bin/bootperf ('k') | bootperf-bin/resultset.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bootperf-bin/perfprinter.py
diff --git a/bootperf-bin/perfprinter.py b/bootperf-bin/perfprinter.py
new file mode 100644
index 0000000000000000000000000000000000000000..d69637016e2e651ece00e0f6c70aaafd14540fc5
--- /dev/null
+++ b/bootperf-bin/perfprinter.py
@@ -0,0 +1,132 @@
+# 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 fnmatch
+import os
+import os.path
+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.
+
+ """
+ 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/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.
+
+ """
+ res_set = resultset.TestResultSet(dir_)
+ dirlist = fnmatch.filter(os.listdir(dir_), "run.???")
+ dirlist.sort()
+ for run in dirlist:
+ keyval_path = os.path.join(dir_, run, _RESULTS_PATH)
+ try:
+ kvf = open(keyval_path)
+ except IOError:
+ continue
+ ReadKeyvalFile(res_set, kvf)
+ res_set.FinalizeResults()
+ return res_set
+
+
+def PrintRawData(dirlist, use_timestats, keylist):
+ """Print 'bootperf' results in "raw data" format."""
+ for dir_ in dirlist:
+ if use_timestats:
+ keyset = ReadResultsDirectory(dir_).TimeKeySet()
+ else:
+ keyset = ReadResultsDirectory(dir_).DiskKeySet()
+ for i in range(0, keyset.num_iterations):
+ if len(dirlist) > 1:
+ line = "%s %3d" % (dir_, 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(dirlist, use_timestats, keylist):
+ """Print 'bootperf' results in "summary of averages" format."""
+ if use_timestats:
+ header = "%5s %3s %5s %3s %s" % (
+ "time", "s%", "dt", "s%", "event")
+ format = "%5s %2d%% %5s %2d%% %s"
+ else:
+ header = "%6s %3s %6s %3s %s" % (
+ "diskrd", "s%", "delta", "s%", "event")
+ format = "%6s %2d%% %6s %2d%% %s"
+ havedata = False
+ for dir_ in dirlist:
+ if use_timestats:
+ keyset = ReadResultsDirectory(dir_).TimeKeySet()
+ else:
+ keyset = ReadResultsDirectory(dir_).DiskKeySet()
+ if keylist is not None:
+ markers = keylist
+ else:
+ markers = keyset.markers
+ if havedata:
+ print
+ if len(dirlist) > 1:
+ print "%s" % dir_,
+ 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)
+ 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 format % (valstring, valuepct, "+" + deltastring, deltapct, stat)
+ prevvalue = val_printed
+ prevstat = stat
+ havedata = True
« no previous file with comments | « bootperf-bin/bootperf ('k') | bootperf-bin/resultset.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698