summaryrefslogtreecommitdiff
path: root/run.py
diff options
context:
space:
mode:
Diffstat (limited to 'run.py')
-rwxr-xr-xrun.py784
1 files changed, 396 insertions, 388 deletions
diff --git a/run.py b/run.py
index e74162b6..25c6ebeb 100755
--- a/run.py
+++ b/run.py
@@ -24,458 +24,466 @@ import sys
logging.basicConfig(level=logging.INFO)
def _parse_arguments(argv):
- parser = argparse.ArgumentParser(description='Build and run specific '
- 'benchamrk')
- parser.add_argument(
- '-b',
- '--bench',
- action='append',
- default=[],
- help='Select which benchmark to run')
-
- # Only one of compiler directory and llvm prebuilts version can be indicated
- # at the beginning, so set -c and -l into a exclusive group.
- group = parser.add_mutually_exclusive_group()
-
- # The toolchain setting arguments has action of 'append', so that users
- # could compare performance with several toolchain settings together.
- group.add_argument(
- '-c',
- '--compiler_dir',
- metavar='DIR',
- action='append',
- default=[],
- help='Specify path to the compiler\'s bin directory. '
- 'You shall give several paths, each with a -c, to '
- 'compare performance differences in '
- 'each compiler.')
-
- parser.add_argument(
- '-o',
- '--build_os',
- action='append',
- default=[],
- help='Specify the host OS to build the benchmark.')
-
- group.add_argument(
- '-l',
- '--llvm_prebuilts_version',
- action='append',
- default=[],
- help='Specify the version of prebuilt LLVM. When '
- 'specific prebuilt version of LLVM already '
- 'exists, no need to pass the path to compiler '
- 'directory.')
-
- parser.add_argument(
- '-f',
- '--cflags',
- action='append',
- default=[],
- help='Specify the cflags options for the toolchain. '
- 'Be sure to quote all the cflags with quotation '
- 'mark("") or use equal(=).')
- parser.add_argument(
- '--ldflags',
- action='append',
- default=[],
- help='Specify linker flags for the toolchain.')
-
- parser.add_argument(
- '-i',
- '--iterations',
- type=int,
- default=1,
- help='Specify how many iterations does the test '
- 'take.')
-
- # Arguments -s and -r are for connecting to DUT.
- parser.add_argument(
- '-s',
- '--serials',
- help='Comma separate list of device serials under '
- 'test.')
-
- parser.add_argument(
- '-r',
- '--remote',
- default='localhost',
- help='hostname[:port] if the ADB device is connected '
- 'to a remote machine. Ensure this workstation '
- 'is configured for passwordless ssh access as '
- 'users "root" or "adb"')
-
- # Arguments -frequency and -m are for device settings
- parser.add_argument(
- '--frequency',
- type=int,
- default=979200,
- help='Specify the CPU frequency of the device. The '
- 'unit is KHZ. The available value is defined in'
- 'cpufreq/scaling_available_frequency file in '
- 'device\'s each core directory. '
- 'The default value is 979200, which shows a '
- 'balance in noise and performance. Lower '
- 'frequency will slow down the performance but '
- 'reduce noise.')
-
- parser.add_argument(
- '-m',
- '--mode',
- default='little',
- help='User can specify whether \'little\' or \'big\' '
- 'mode to use. The default one is little mode. '
- 'The little mode runs on a single core of '
- 'Cortex-A53, while big mode runs on single core '
- 'of Cortex-A57.')
-
- # Configure file for benchmark test
- parser.add_argument(
- '-t',
- '--test',
- help='Specify the test settings with configuration '
- 'file.')
-
- # Whether to keep old json result or not
- parser.add_argument(
- '-k',
- '--keep',
- default='False',
- help='User can specify whether to keep the old json '
- 'results from last run. This can be useful if you '
- 'want to compare performance differences in two or '
- 'more different runs. Default is False(off).')
-
- return parser.parse_args(argv)
+ parser = argparse.ArgumentParser(description='Build and run specific '
+ 'benchamrk')
+ parser.add_argument(
+ '-b',
+ '--bench',
+ action='append',
+ default=[],
+ help='Select which benchmark to run')
+
+ # Only one of compiler directory and llvm prebuilts version can be indicated
+ # at the beginning, so set -c and -l into a exclusive group.
+ group = parser.add_mutually_exclusive_group()
+
+ # The toolchain setting arguments has action of 'append', so that users
+ # could compare performance with several toolchain settings together.
+ group.add_argument(
+ '-c',
+ '--compiler_dir',
+ metavar='DIR',
+ action='append',
+ default=[],
+ help='Specify path to the compiler\'s bin directory. '
+ 'You shall give several paths, each with a -c, to '
+ 'compare performance differences in '
+ 'each compiler.')
+
+ parser.add_argument(
+ '-o',
+ '--build_os',
+ action='append',
+ default=[],
+ help='Specify the host OS to build the benchmark.')
+
+ group.add_argument(
+ '-l',
+ '--llvm_prebuilts_version',
+ action='append',
+ default=[],
+ help='Specify the version of prebuilt LLVM. When '
+ 'specific prebuilt version of LLVM already '
+ 'exists, no need to pass the path to compiler '
+ 'directory.')
+
+ parser.add_argument(
+ '-f',
+ '--cflags',
+ action='append',
+ default=[],
+ help='Specify the cflags options for the toolchain. '
+ 'Be sure to quote all the cflags with quotation '
+ 'mark("") or use equal(=).')
+ parser.add_argument(
+ '--ldflags',
+ action='append',
+ default=[],
+ help='Specify linker flags for the toolchain.')
+
+ parser.add_argument(
+ '-i',
+ '--iterations',
+ type=int,
+ default=1,
+ help='Specify how many iterations does the test '
+ 'take.')
+
+ # Arguments -s and -r are for connecting to DUT.
+ parser.add_argument(
+ '-s',
+ '--serials',
+ help='Comma separate list of device serials under '
+ 'test.')
+
+ parser.add_argument(
+ '-r',
+ '--remote',
+ default='localhost',
+ help='hostname[:port] if the ADB device is connected '
+ 'to a remote machine. Ensure this workstation '
+ 'is configured for passwordless ssh access as '
+ 'users "root" or "adb"')
+
+ # Arguments -frequency and -m are for device settings
+ parser.add_argument(
+ '--frequency',
+ type=int,
+ default=979200,
+ help='Specify the CPU frequency of the device. The '
+ 'unit is KHZ. The available value is defined in'
+ 'cpufreq/scaling_available_frequency file in '
+ 'device\'s each core directory. '
+ 'The default value is 979200, which shows a '
+ 'balance in noise and performance. Lower '
+ 'frequency will slow down the performance but '
+ 'reduce noise.')
+
+ parser.add_argument(
+ '-m',
+ '--mode',
+ default='little',
+ help='User can specify whether \'little\' or \'big\' '
+ 'mode to use. The default one is little mode. '
+ 'The little mode runs on a single core of '
+ 'Cortex-A53, while big mode runs on single core '
+ 'of Cortex-A57.')
+
+ # Configure file for benchmark test
+ parser.add_argument(
+ '-t',
+ '--test',
+ help='Specify the test settings with configuration '
+ 'file.')
+
+ # Whether to keep old json result or not
+ parser.add_argument(
+ '-k',
+ '--keep',
+ default='False',
+ help='User can specify whether to keep the old json '
+ 'results from last run. This can be useful if you '
+ 'want to compare performance differences in two or '
+ 'more different runs. Default is False(off).')
+
+ return parser.parse_args(argv)
# Clear old log files in bench suite directory
def clear_logs():
- logging.info('Removing old logfiles...')
- for f in ['build_log', 'device_log', 'test_log']:
- logfile = os.path.join(config.bench_suite_dir, f)
- try:
- os.remove(logfile)
- except OSError:
- logging.info('No logfile %s need to be removed. Ignored.', f)
- logging.info('Old logfiles been removed.')
+ logging.info('Removing old logfiles...')
+ for f in ['build_log', 'device_log', 'test_log']:
+ logfile = os.path.join(config.bench_suite_dir, f)
+ try:
+ os.remove(logfile)
+ except OSError:
+ logging.info('No logfile %s need to be removed. Ignored.', f)
+ logging.info('Old logfiles been removed.')
# Clear old json files in bench suite directory
def clear_results():
- logging.info('Clearing old json results...')
- for bench in config.bench_list:
- result = os.path.join(config.bench_suite_dir, bench + '.json')
- try:
- os.remove(result)
- except OSError:
- logging.info('no %s json file need to be removed. Ignored.', bench)
- logging.info('Old json results been removed.')
+ logging.info('Clearing old json results...')
+ for bench in config.bench_list:
+ result = os.path.join(config.bench_suite_dir, bench + '.json')
+ try:
+ os.remove(result)
+ except OSError:
+ logging.info('no %s json file need to be removed. Ignored.', bench)
+ logging.info('Old json results been removed.')
# Use subprocess.check_call to run other script, and put logs to files
def check_call_with_log(cmd, log_file):
- log_file = os.path.join(config.bench_suite_dir, log_file)
- with open(log_file, 'a') as logfile:
- log_header = 'Log for command: %s\n' % (cmd)
- logfile.write(log_header)
- try:
- subprocess.check_call(cmd, stdout=logfile)
- except subprocess.CalledProcessError:
- logging.error('Error running %s, please check %s for more info.', cmd,
- log_file)
- raise
- logging.info('Logs for %s are written to %s.', cmd, log_file)
+ log_file = os.path.join(config.bench_suite_dir, log_file)
+ with open(log_file, 'a') as logfile:
+ log_header = 'Log for command: %s\n' % (cmd)
+ logfile.write(log_header)
+ try:
+ subprocess.check_call(cmd, stdout=logfile)
+ except subprocess.CalledProcessError:
+ logging.error('Error running %s, please check %s for more info.',
+ cmd, log_file)
+ raise
+ logging.info('Logs for %s are written to %s.', cmd, log_file)
def set_device(serials, remote, frequency):
- setting_cmd = [
- os.path.join(
- os.path.join(config.android_home, config.autotest_dir),
- 'site_utils/set_device.py')
- ]
- setting_cmd.append('-r=' + remote)
- setting_cmd.append('-q=' + str(frequency))
-
- # Deal with serials.
- # If there is no serails specified, try to run test on the only device.
- # If specified, split the serials into a list and run test on each device.
- if serials:
- for serial in serials.split(','):
- setting_cmd.append('-s=' + serial)
- check_call_with_log(setting_cmd, 'device_log')
- setting_cmd.pop()
- else:
- check_call_with_log(setting_cmd, 'device_log')
+ setting_cmd = [
+ os.path.join(
+ os.path.join(config.android_home, config.autotest_dir),
+ 'site_utils/set_device.py')
+ ]
+ setting_cmd.append('-r=' + remote)
+ setting_cmd.append('-q=' + str(frequency))
- logging.info('CPU mode and frequency set successfully!')
+ # Deal with serials.
+ # If there is no serails specified, try to run test on the only device.
+ # If specified, split the serials into a list and run test on each device.
+ if serials:
+ for serial in serials.split(','):
+ setting_cmd.append('-s=' + serial)
+ check_call_with_log(setting_cmd, 'device_log')
+ setting_cmd.pop()
+ else:
+ check_call_with_log(setting_cmd, 'device_log')
+
+ logging.info('CPU mode and frequency set successfully!')
def log_ambiguous_args():
- logging.error('The count of arguments does not match!')
- raise ValueError('The count of arguments does not match.')
+ logging.error('The count of arguments does not match!')
+ raise ValueError('The count of arguments does not match.')
# Check if the count of building arguments are log_ambiguous or not. The
# number of -c/-l, -f, and -os should be either all 0s or all the same.
def check_count(compiler, llvm_version, build_os, cflags, ldflags):
- # Count will be set to 0 if no compiler or llvm_version specified.
- # Otherwise, one of these two args length should be 0 and count will be
- # the other one.
- count = max(len(compiler), len(llvm_version))
+ # Count will be set to 0 if no compiler or llvm_version specified.
+ # Otherwise, one of these two args length should be 0 and count will be
+ # the other one.
+ count = max(len(compiler), len(llvm_version))
- # Check if number of cflags is 0 or the same with before.
- if len(cflags) != 0:
- if count != 0 and len(cflags) != count:
- log_ambiguous_args()
- count = len(cflags)
+ # Check if number of cflags is 0 or the same with before.
+ if len(cflags) != 0:
+ if count != 0 and len(cflags) != count:
+ log_ambiguous_args()
+ count = len(cflags)
- if len(ldflags) != 0:
- if count != 0 and len(ldflags) != count:
- log_ambiguous_args()
- count = len(ldflags)
+ if len(ldflags) != 0:
+ if count != 0 and len(ldflags) != count:
+ log_ambiguous_args()
+ count = len(ldflags)
- if len(build_os) != 0:
- if count != 0 and len(build_os) != count:
- log_ambiguous_args()
- count = len(build_os)
+ if len(build_os) != 0:
+ if count != 0 and len(build_os) != count:
+ log_ambiguous_args()
+ count = len(build_os)
- # If no settings are passed, only run default once.
- return max(1, count)
+ # If no settings are passed, only run default once.
+ return max(1, count)
# Build benchmark binary with toolchain settings
def build_bench(setting_no, bench, compiler, llvm_version, build_os, cflags,
ldflags):
- # Build benchmark locally
- build_cmd = ['./build_bench.py', '-b=' + bench]
- if compiler:
- build_cmd.append('-c=' + compiler[setting_no])
- if llvm_version:
- build_cmd.append('-l=' + llvm_version[setting_no])
- if build_os:
- build_cmd.append('-o=' + build_os[setting_no])
- if cflags:
- build_cmd.append('-f=' + cflags[setting_no])
- if ldflags:
- build_cmd.append('--ldflags=' + ldflags[setting_no])
-
- logging.info('Building benchmark for toolchain setting No.%d...', setting_no)
- logging.info('Command: %s', build_cmd)
-
- try:
- subprocess.check_call(build_cmd)
- except:
- logging.error('Error while building benchmark!')
- raise
+ # Build benchmark locally
+ build_cmd = ['./build_bench.py', '-b=' + bench]
+ if compiler:
+ build_cmd.append('-c=' + compiler[setting_no])
+ if llvm_version:
+ build_cmd.append('-l=' + llvm_version[setting_no])
+ if build_os:
+ build_cmd.append('-o=' + build_os[setting_no])
+ if cflags:
+ build_cmd.append('-f=' + cflags[setting_no])
+ if ldflags:
+ build_cmd.append('--ldflags=' + ldflags[setting_no])
+
+ logging.info('Building benchmark for toolchain setting No.%d...',
+ setting_no)
+ logging.info('Command: %s', build_cmd)
+
+ try:
+ subprocess.check_call(build_cmd)
+ except:
+ logging.error('Error while building benchmark!')
+ raise
def run_and_collect_result(test_cmd, setting_no, i, bench, serial='default'):
- # Run autotest script for benchmark on DUT
- check_call_with_log(test_cmd, 'test_log')
+ # Run autotest script for benchmark on DUT
+ check_call_with_log(test_cmd, 'test_log')
- logging.info('Benchmark with setting No.%d, iter.%d finished testing on '
- 'device %s.', setting_no, i, serial)
+ logging.info('Benchmark with setting No.%d, iter.%d finished testing on '
+ 'device %s.', setting_no, i, serial)
- # Rename results from the bench_result generated in autotest
- bench_result = os.path.join(config.bench_suite_dir, 'bench_result')
- if not os.path.exists(bench_result):
- logging.error('No result found at %s, '
- 'please check test_log for details.', bench_result)
- raise OSError('Result file %s not found.' % bench_result)
+ # Rename results from the bench_result generated in autotest
+ bench_result = os.path.join(config.bench_suite_dir, 'bench_result')
+ if not os.path.exists(bench_result):
+ logging.error('No result found at %s, '
+ 'please check test_log for details.', bench_result)
+ raise OSError('Result file %s not found.' % bench_result)
- new_bench_result = 'bench_result_%s_%s_%d_%d' % (bench, serial, setting_no, i)
- new_bench_result_path = os.path.join(config.bench_suite_dir, new_bench_result)
- try:
- os.rename(bench_result, new_bench_result_path)
- except OSError:
- logging.error('Error while renaming raw result %s to %s', bench_result,
- new_bench_result_path)
- raise
+ new_bench_result = 'bench_result_%s_%s_%d_%d' % (bench, serial,
+ setting_no, i)
+ new_bench_result_path = os.path.join(config.bench_suite_dir,
+ new_bench_result)
+ try:
+ os.rename(bench_result, new_bench_result_path)
+ except OSError:
+ logging.error('Error while renaming raw result %s to %s',
+ bench_result, new_bench_result_path)
+ raise
- logging.info('Benchmark result saved at %s.', new_bench_result_path)
+ logging.info('Benchmark result saved at %s.', new_bench_result_path)
def test_bench(bench, setting_no, iterations, serials, remote, mode):
- logging.info('Start running benchmark on device...')
-
- # Run benchmark and tests on DUT
- for i in xrange(iterations):
- logging.info('Iteration No.%d:', i)
- test_cmd = [
- os.path.join(
- os.path.join(config.android_home, config.autotest_dir),
- 'site_utils/test_bench.py')
- ]
- test_cmd.append('-b=' + bench)
- test_cmd.append('-r=' + remote)
- test_cmd.append('-m=' + mode)
-
- # Deal with serials.
- # If there is no serails specified, try to run test on the only device.
- # If specified, split the serials into a list and run test on each device.
- if serials:
- for serial in serials.split(','):
- test_cmd.append('-s=' + serial)
-
- run_and_collect_result(test_cmd, setting_no, i, bench, serial)
- test_cmd.pop()
- else:
- run_and_collect_result(test_cmd, setting_no, i, bench)
+ logging.info('Start running benchmark on device...')
+
+ # Run benchmark and tests on DUT
+ for i in xrange(iterations):
+ logging.info('Iteration No.%d:', i)
+ test_cmd = [
+ os.path.join(
+ os.path.join(config.android_home, config.autotest_dir),
+ 'site_utils/test_bench.py')
+ ]
+ test_cmd.append('-b=' + bench)
+ test_cmd.append('-r=' + remote)
+ test_cmd.append('-m=' + mode)
+
+ # Deal with serials. If there is no serails specified, try to run test
+ # on the only device. If specified, split the serials into a list and
+ # run test on each device.
+ if serials:
+ for serial in serials.split(','):
+ test_cmd.append('-s=' + serial)
+
+ run_and_collect_result(test_cmd, setting_no, i, bench, serial)
+ test_cmd.pop()
+ else:
+ run_and_collect_result(test_cmd, setting_no, i, bench)
def gen_json(bench, setting_no, iterations, serials):
- bench_result = os.path.join(config.bench_suite_dir, 'bench_result')
+ bench_result = os.path.join(config.bench_suite_dir, 'bench_result')
- logging.info('Generating JSON file for Crosperf...')
+ logging.info('Generating JSON file for Crosperf...')
- if not serials:
- serials = 'default'
+ if not serials:
+ serials = 'default'
- for serial in serials.split(','):
+ for serial in serials.split(','):
- # Platform will be used as device lunch combo instead
- #experiment = '_'.join([serial, str(setting_no)])
- experiment = config.product_combo
+ # Platform will be used as device lunch combo instead
+ #experiment = '_'.join([serial, str(setting_no)])
+ experiment = config.product_combo
- # Input format: bench_result_{bench}_{serial}_{setting_no}_
- input_file = '_'.join([bench_result, bench, serial, str(setting_no), ''])
- gen_json_cmd = [
- './gen_json.py', '--input=' + input_file,
- '--output=%s.json' % os.path.join(config.bench_suite_dir, bench),
- '--bench=' + bench, '--platform=' + experiment,
- '--iterations=' + str(iterations)
- ]
+ # Input format: bench_result_{bench}_{serial}_{setting_no}_
+ input_file = '_'.join([bench_result, bench,
+ serial, str(setting_no), ''])
+ gen_json_cmd = [
+ './gen_json.py', '--input=' + input_file,
+ '--output=%s.json' % os.path.join(config.bench_suite_dir, bench),
+ '--bench=' + bench, '--platform=' + experiment,
+ '--iterations=' + str(iterations)
+ ]
- logging.info('Command: %s', gen_json_cmd)
- if subprocess.call(gen_json_cmd):
- logging.error('Error while generating JSON file, please check raw data'
- 'of the results at %s.', input_file)
+ logging.info('Command: %s', gen_json_cmd)
+ if subprocess.call(gen_json_cmd):
+ logging.error('Error while generating JSON file, please check raw'
+ ' data of the results at %s.', input_file)
def gen_crosperf(infile, outfile):
- # Set environment variable for crosperf
- os.environ['PYTHONPATH'] = os.path.dirname(config.toolchain_utils)
+ # Set environment variable for crosperf
+ os.environ['PYTHONPATH'] = os.path.dirname(config.toolchain_utils)
- logging.info('Generating Crosperf Report...')
- crosperf_cmd = [
- os.path.join(config.toolchain_utils, 'generate_report.py'),
- '-i=' + infile, '-o=' + outfile, '-f'
- ]
+ logging.info('Generating Crosperf Report...')
+ crosperf_cmd = [
+ os.path.join(config.toolchain_utils, 'generate_report.py'),
+ '-i=' + infile, '-o=' + outfile, '-f'
+ ]
- # Run crosperf generate_report.py
- logging.info('Command: %s', crosperf_cmd)
- subprocess.call(crosperf_cmd)
+ # Run crosperf generate_report.py
+ logging.info('Command: %s', crosperf_cmd)
+ subprocess.call(crosperf_cmd)
- logging.info('Report generated successfully!')
- logging.info('Report Location: ' + outfile + '.html at bench'
- 'suite directory.')
+ logging.info('Report generated successfully!')
+ logging.info('Report Location: ' + outfile + '.html at bench'
+ 'suite directory.')
def main(argv):
- # Set environment variable for the local loacation of benchmark suite.
- # This is for collecting testing results to benchmark suite directory.
- os.environ['BENCH_SUITE_DIR'] = config.bench_suite_dir
-
- # Set Android type, used for the difference part between aosp and internal.
- os.environ['ANDROID_TYPE'] = config.android_type
-
- # Set ANDROID_HOME for both building and testing.
- os.environ['ANDROID_HOME'] = config.android_home
-
- # Set environment variable for architecture, this will be used in
- # autotest.
- os.environ['PRODUCT'] = config.product
-
- arguments = _parse_arguments(argv)
-
- bench_list = arguments.bench
- if not bench_list:
- bench_list = config.bench_list
-
- compiler = arguments.compiler_dir
- build_os = arguments.build_os
- llvm_version = arguments.llvm_prebuilts_version
- cflags = arguments.cflags
- ldflags = arguments.ldflags
- iterations = arguments.iterations
- serials = arguments.serials
- remote = arguments.remote
- frequency = arguments.frequency
- mode = arguments.mode
- keep = arguments.keep
-
- # Clear old logs every time before run script
- clear_logs()
-
- if keep == 'False':
- clear_results()
-
- # Set test mode and frequency of CPU on the DUT
- set_device(serials, remote, frequency)
-
- test = arguments.test
- # if test configuration file has been given, use the build settings
- # in the configuration file and run the test.
- if test:
- test_config = ConfigParser.ConfigParser(allow_no_value=True)
- if not test_config.read(test):
- logging.error('Error while reading from building '
- 'configuration file %s.', test)
- raise RuntimeError('Error while reading configuration file %s.' % test)
-
- for setting_no, section in enumerate(test_config.sections()):
- bench = test_config.get(section, 'bench')
- compiler = [test_config.get(section, 'compiler')]
- build_os = [test_config.get(section, 'build_os')]
- llvm_version = [test_config.get(section, 'llvm_version')]
- cflags = [test_config.get(section, 'cflags')]
- ldflags = [test_config.get(section, 'ldflags')]
-
- # Set iterations from test_config file, if not exist, use the one from
- # command line.
- it = test_config.get(section, 'iterations')
- if not it:
- it = iterations
- it = int(it)
-
- # Build benchmark for each single test configuration
- build_bench(0, bench, compiler, llvm_version, build_os, cflags, ldflags)
-
- test_bench(bench, setting_no, it, serials, remote, mode)
-
- gen_json(bench, setting_no, it, serials)
-
- for bench in config.bench_list:
- infile = os.path.join(config.bench_suite_dir, bench + '.json')
- if os.path.exists(infile):
+ # Set environment variable for the local loacation of benchmark suite.
+ # This is for collecting testing results to benchmark suite directory.
+ os.environ['BENCH_SUITE_DIR'] = config.bench_suite_dir
+
+ # Set Android type, used for the difference part between aosp and internal.
+ os.environ['ANDROID_TYPE'] = config.android_type
+
+ # Set ANDROID_HOME for both building and testing.
+ os.environ['ANDROID_HOME'] = config.android_home
+
+ # Set environment variable for architecture, this will be used in
+ # autotest.
+ os.environ['PRODUCT'] = config.product
+
+ arguments = _parse_arguments(argv)
+
+ bench_list = arguments.bench
+ if not bench_list:
+ bench_list = config.bench_list
+
+ compiler = arguments.compiler_dir
+ build_os = arguments.build_os
+ llvm_version = arguments.llvm_prebuilts_version
+ cflags = arguments.cflags
+ ldflags = arguments.ldflags
+ iterations = arguments.iterations
+ serials = arguments.serials
+ remote = arguments.remote
+ frequency = arguments.frequency
+ mode = arguments.mode
+ keep = arguments.keep
+
+ # Clear old logs every time before run script
+ clear_logs()
+
+ if keep == 'False':
+ clear_results()
+
+ # Set test mode and frequency of CPU on the DUT
+ set_device(serials, remote, frequency)
+
+ test = arguments.test
+ # if test configuration file has been given, use the build settings
+ # in the configuration file and run the test.
+ if test:
+ test_config = ConfigParser.ConfigParser(allow_no_value=True)
+ if not test_config.read(test):
+ logging.error('Error while reading from building '
+ 'configuration file %s.', test)
+ raise RuntimeError('Error while reading configuration file %s.'
+ % test)
+
+ for setting_no, section in enumerate(test_config.sections()):
+ bench = test_config.get(section, 'bench')
+ compiler = [test_config.get(section, 'compiler')]
+ build_os = [test_config.get(section, 'build_os')]
+ llvm_version = [test_config.get(section, 'llvm_version')]
+ cflags = [test_config.get(section, 'cflags')]
+ ldflags = [test_config.get(section, 'ldflags')]
+
+ # Set iterations from test_config file, if not exist, use the one
+ # from command line.
+ it = test_config.get(section, 'iterations')
+ if not it:
+ it = iterations
+ it = int(it)
+
+ # Build benchmark for each single test configuration
+ build_bench(0, bench, compiler, llvm_version,
+ build_os, cflags, ldflags)
+
+ test_bench(bench, setting_no, it, serials, remote, mode)
+
+ gen_json(bench, setting_no, it, serials)
+
+ for bench in config.bench_list:
+ infile = os.path.join(config.bench_suite_dir, bench + '.json')
+ if os.path.exists(infile):
+ outfile = os.path.join(config.bench_suite_dir,
+ bench + '_report')
+ gen_crosperf(infile, outfile)
+
+ # Stop script if there is only config file provided
+ return 0
+
+ # If no configuration file specified, continue running.
+ # Check if the count of the setting arguments are log_ambiguous.
+ setting_count = check_count(compiler, llvm_version, build_os,
+ cflags, ldflags)
+
+ for bench in bench_list:
+ logging.info('Start building and running benchmark: [%s]', bench)
+ # Run script for each toolchain settings
+ for setting_no in xrange(setting_count):
+ build_bench(setting_no, bench, compiler, llvm_version,
+ build_os, cflags, ldflags)
+
+ # Run autotest script for benchmark test on device
+ test_bench(bench, setting_no, iterations, serials, remote, mode)
+
+ gen_json(bench, setting_no, iterations, serials)
+
+ infile = os.path.join(config.bench_suite_dir, bench + '.json')
outfile = os.path.join(config.bench_suite_dir, bench + '_report')
gen_crosperf(infile, outfile)
- # Stop script if there is only config file provided
- return 0
-
- # If no configuration file specified, continue running.
- # Check if the count of the setting arguments are log_ambiguous.
- setting_count = check_count(compiler, llvm_version, build_os, cflags, ldflags)
-
- for bench in bench_list:
- logging.info('Start building and running benchmark: [%s]', bench)
- # Run script for each toolchain settings
- for setting_no in xrange(setting_count):
- build_bench(setting_no, bench, compiler, llvm_version, build_os, cflags,
- ldflags)
-
- # Run autotest script for benchmark test on device
- test_bench(bench, setting_no, iterations, serials, remote, mode)
-
- gen_json(bench, setting_no, iterations, serials)
-
- infile = os.path.join(config.bench_suite_dir, bench + '.json')
- outfile = os.path.join(config.bench_suite_dir, bench + '_report')
- gen_crosperf(infile, outfile)
-
if __name__ == '__main__':
- main(sys.argv[1:])
+ main(sys.argv[1:])