aboutsummaryrefslogtreecommitdiff
path: root/crosperf/benchmark_run.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/benchmark_run.py')
-rw-r--r--crosperf/benchmark_run.py59
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)