138 lines
5.1 KiB
Python
138 lines
5.1 KiB
Python
# Copyright 2012 Google Inc. All Rights Reserved.
|
|
"""This script generates a crosperf overhead-testing experiment file for MoreJS.
|
|
|
|
Use: experiment_gen.py --crosperf=/home/mrdmnd/depot2/crosperf --chromeos_root=
|
|
/home/mrdmnd/chromiumos --remote-host=chromeos-zgb3.mtv --board=x86-zgb --event=
|
|
cycles -F 10 -F 20 -c 10582 -c 10785211 --perf_options="-g"
|
|
"""
|
|
|
|
import optparse
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
HEADER = """
|
|
board: %s
|
|
remote: %s
|
|
benchmark: baseline {
|
|
iterations: %s
|
|
autotest_name: desktopui_PyAutoPerfTests
|
|
autotest_args: --args='--iterations=%s perf.PageCyclerTest.testMoreJSFile'
|
|
}"""
|
|
|
|
EXPERIMENT = """
|
|
benchmark: %s {
|
|
iterations: %s
|
|
autotest_name: desktopui_PyAutoPerfTests
|
|
autotest_args: --args='--iterations=%s perf.PageCyclerTest.testMoreJSFile' --profiler=custom_perf --profiler_args='perf_options="record -a %s %s -e %s"' \n}""" # pylint: disable-msg=C6310
|
|
|
|
DEFAULT_IMAGE = """
|
|
default {
|
|
chromeos_image: %s/src/build/images/%s/latest/chromiumos_test_image.bin
|
|
}"""
|
|
|
|
|
|
def main():
|
|
parser = optparse.OptionParser()
|
|
parser.add_option('--crosperf',
|
|
dest='crosperf_root',
|
|
action='store',
|
|
default='/home/mrdmnd/depot2/crosperf',
|
|
help='Crosperf root directory.')
|
|
parser.add_option('--chromeos_root',
|
|
dest='chromeos_root',
|
|
action='store',
|
|
default='/home/mrdmnd/chromiumos',
|
|
help='ChromiumOS root directory.')
|
|
parser.add_option('--remote',
|
|
dest='remote',
|
|
action='store',
|
|
help='Host to run test on. Required.')
|
|
parser.add_option('--board',
|
|
dest='board',
|
|
action='store',
|
|
help='Board architecture to run on. Required.')
|
|
parser.add_option('--event',
|
|
dest='event',
|
|
action='store',
|
|
help='Event to profile. Required.')
|
|
parser.add_option('-F',
|
|
dest='sampling_frequencies',
|
|
action='append',
|
|
help='A target frequency to sample at.')
|
|
parser.add_option('-c',
|
|
dest='sampling_periods',
|
|
action='append',
|
|
help='A target period to sample at. Event specific.')
|
|
parser.add_option('--benchmark-iterations',
|
|
dest='benchmark_iterations',
|
|
action='store',
|
|
default=4,
|
|
help='Number of benchmark iters')
|
|
parser.add_option('--test-iterations',
|
|
dest='test_iterations',
|
|
action='store',
|
|
default=10,
|
|
help='Number of test iters')
|
|
parser.add_option('-p',
|
|
dest='print_only',
|
|
action='store_true',
|
|
help='If enabled, will print experiment file and exit.')
|
|
parser.add_option('--perf_options',
|
|
dest='perf_options',
|
|
action='store',
|
|
help='Arbitrary flags to perf. Surround with dblquotes.')
|
|
options = parser.parse_args()[0]
|
|
if options.remote is None:
|
|
print '%s requires a remote hostname.' % sys.argv[0]
|
|
return 1
|
|
elif options.board is None:
|
|
print '%s requires a target board.' % sys.argv[0]
|
|
return 1
|
|
elif options.event is None:
|
|
print '%s requires an event to profile.' % sys.argv[0]
|
|
return 1
|
|
else:
|
|
crosperf_root = options.crosperf_root
|
|
chromeos_root = options.chromeos_root
|
|
remote = options.remote
|
|
board = options.board
|
|
event = options.event
|
|
bench_iters = options.benchmark_iterations
|
|
test_iters = options.test_iterations
|
|
perf_opts = options.perf_options
|
|
# Set up baseline test.
|
|
experiment_file = HEADER % (board, remote, bench_iters, test_iters)
|
|
# Set up experimental tests.
|
|
if options.sampling_frequencies:
|
|
for freq in options.sampling_frequencies:
|
|
test_string = str(freq) + 'Freq'
|
|
experiment_file += EXPERIMENT % (test_string, bench_iters, test_iters,
|
|
'-F %s' % freq, '' if perf_opts is None
|
|
else perf_opts, event)
|
|
if options.sampling_periods:
|
|
for period in options.sampling_periods:
|
|
test_string = str(period) + 'Period'
|
|
experiment_file += EXPERIMENT % (
|
|
test_string, bench_iters, test_iters, '-c %s' % period, '' if
|
|
perf_opts is None else perf_opts, event)
|
|
# Point to the target image.
|
|
experiment_file += DEFAULT_IMAGE % (chromeos_root, board)
|
|
if options.print_only:
|
|
print experiment_file
|
|
else:
|
|
current_time = int(round(time.time() * 1000))
|
|
file_name = 'perf_overhead_%s' % str(current_time)
|
|
with open(file_name, 'w') as f:
|
|
f.write(experiment_file)
|
|
try:
|
|
process = subprocess.Popen(['%s/crosperf' % crosperf_root, file_name])
|
|
process.communicate()
|
|
except OSError:
|
|
print 'Could not find crosperf, make sure --crosperf flag is set right.'
|
|
return 1
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
exit(main())
|