You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.1 KiB
138 lines
5.1 KiB
# 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())
|
|
|