diff options
Diffstat (limited to 'crosperf/benchmark_run.py')
-rw-r--r-- | crosperf/benchmark_run.py | 59 |
1 files changed, 48 insertions, 11 deletions
diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py index bba71a36..0147599d 100644 --- a/crosperf/benchmark_run.py +++ b/crosperf/benchmark_run.py @@ -1,6 +1,8 @@ +# -*- coding: utf-8 -*- # Copyright (c) 2013 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. + """Module of benchmark runs.""" from __future__ import print_function @@ -29,8 +31,18 @@ STATUS_PENDING = 'PENDING' class BenchmarkRun(threading.Thread): """The benchmarkrun class.""" - def __init__(self, name, benchmark, label, iteration, cache_conditions, - machine_manager, logger_to_use, log_level, share_cache): + def __init__(self, + name, + benchmark, + label, + iteration, + cache_conditions, + machine_manager, + logger_to_use, + log_level, + share_cache, + dut_config, + enable_aslr=False): threading.Thread.__init__(self) self.name = name self._logger = logger_to_use @@ -43,7 +55,8 @@ class BenchmarkRun(threading.Thread): self.retval = None self.run_completed = False self.machine_manager = machine_manager - self.suite_runner = SuiteRunner(self._logger, self.log_level) + self.suite_runner = SuiteRunner( + dut_config, self._logger, self.log_level, enable_aslr=enable_aslr) self.machine = None self.cache_conditions = cache_conditions self.runs_complete = 0 @@ -72,12 +85,31 @@ class BenchmarkRun(threading.Thread): self.label.board, self.cache_conditions, self._logger, self.log_level, self.label, self.share_cache, self.benchmark.suite, self.benchmark.show_all_results, - self.benchmark.run_local) + self.benchmark.run_local, self.benchmark.cwp_dso) self.result = self.cache.ReadResult() self.cache_hit = (self.result is not None) self.cache_has_been_read = True + def PrintTop5Cmds(self, topcmds): + """Print top 5 commands into log.""" + + self._logger.LogOutput('%s' % str(self)) + self._logger.LogOutput('Top 5 commands with highest CPU usage:') + # Header. + print_line = '%20s %9s %6s %s' % ('COMMAND', 'AVG CPU%', 'COUNT', + 'HIGHEST 5') + self._logger.LogOutput(print_line) + self._logger.LogOutput('-' * 50) + if topcmds: + for topcmd in topcmds[:5]: + print_line = '%20s %9.2f %6s %s' % (topcmd['cmd'], topcmd['cpu_avg'], + topcmd['count'], topcmd['top5']) + self._logger.LogOutput(print_line) + else: + self._logger.LogOutput('[NO DATA FROM THE TOP LOG]') + self._logger.LogOutput('-' * 50) + def run(self): try: if not self.cache_has_been_read: @@ -95,7 +127,8 @@ class BenchmarkRun(threading.Thread): err = 'No cache hit.' self.result = Result.CreateFromRun( self._logger, self.log_level, self.label, self.machine, output, err, - retval, self.benchmark.test_name, self.benchmark.suite) + retval, self.benchmark.test_name, self.benchmark.suite, + self.benchmark.cwp_dso) else: self._logger.LogOutput('%s: No cache hit.' % self.name) @@ -104,6 +137,9 @@ class BenchmarkRun(threading.Thread): self.machine = self.AcquireMachine() self.cache.machine = self.machine self.result = self.RunTest(self.machine) + # TODO(denik): Add Top5 report into html. + if self.result: + self.PrintTop5Cmds(self.result.GetTopCmds()) self.cache.remote = self.machine.name self.label.chrome_version = self.machine_manager.GetChromeVersion( @@ -166,9 +202,9 @@ class BenchmarkRun(threading.Thread): machine = self.machine_manager.AcquireMachine(self.label) if machine: - self._logger.LogOutput('%s: Machine %s acquired at %s' % - (self.name, machine.name, - datetime.datetime.now())) + self._logger.LogOutput( + '%s: Machine %s acquired at %s' % (self.name, machine.name, + datetime.datetime.now())) break time.sleep(10) return machine @@ -190,7 +226,7 @@ class BenchmarkRun(threading.Thread): raise SyntaxError('perf_args must start with either record or stat') extra_test_args = [ '--profiler=custom_perf', - ("--profiler_args='perf_options=\"%s\"'" % perf_args) + ('--profiler_args=\'perf_options="%s"\'' % perf_args) ] return ' '.join(extra_test_args) else: @@ -211,7 +247,8 @@ class BenchmarkRun(threading.Thread): self.run_completed = True return Result.CreateFromRun(self._logger, self.log_level, self.label, self.machine, out, err, retval, - self.benchmark.test_name, self.benchmark.suite) + self.benchmark.test_name, self.benchmark.suite, + self.benchmark.cwp_dso) def SetCacheConditions(self, cache_conditions): self.cache_conditions = cache_conditions @@ -244,7 +281,7 @@ class MockBenchmarkRun(BenchmarkRun): self.label.board, self.cache_conditions, self._logger, self.log_level, self.label, self.share_cache, self.benchmark.suite, self.benchmark.show_all_results, - self.benchmark.run_local) + self.benchmark.run_local, self.benchmark.cwp_dso) self.result = self.cache.ReadResult() self.cache_hit = (self.result is not None) |