#!/usr/bin/env python

"""
A simple bench runner which delegates to the ./dotest.py test driver to run the
benchmarks defined in the list named 'benches'.

You need to hand edit 'benches' to modify/change the command lines passed to the
test driver.

Use the following to get only the benchmark results in your terminal output:

    ./bench.py -e /Volumes/data/lldb/svn/regression/build/Debug/lldb -x '-F Driver::MainLoop()' 2>&1 | grep -P '^lldb.*benchmark:'

See also bench-history.
"""

import os, sys
import re
from optparse import OptionParser

# dotest.py invocation with no '-e exe-path' uses lldb as the inferior program,
# unless there is a mentioning of custom executable program.
benches = [
    # Measure startup delays creating a target, setting a breakpoint, and run to breakpoint stop.
    './dotest.py -v +b %E %X -n -p TestStartupDelays.py',

    # Measure 'frame variable' response after stopping at a breakpoint.
    './dotest.py -v +b %E %X -n -p TestFrameVariableResponse.py',

    # Measure stepping speed after stopping at a breakpoint.
    './dotest.py -v +b %E %X -n -p TestSteppingSpeed.py',

    # Measure expression cmd response with a simple custom executable program.
    './dotest.py +b -n -p TestExpressionCmd.py',

    # Attach to a spawned process then run disassembly benchmarks.
    './dotest.py -v +b -n %E -p TestDoAttachThenDisassembly.py'
]

def main():
    """Read the items from 'benches' and run the command line one by one."""
    parser = OptionParser(usage="""\
%prog [options]
Run the standard benchmarks defined in the list named 'benches'.\
""")
    parser.add_option('-e', '--executable',
                      type='string', action='store',
                      dest='exe',
                      help='The target program launched by lldb.')
    parser.add_option('-x', '--breakpoint-spec',
                      type='string', action='store',
                      dest='break_spec',
                      help='The lldb breakpoint spec for the target program.')

    # Parses the options, if any.
    opts, args = parser.parse_args()
                          
    print "Starting bench runner...."

    for item in benches:
        command = item.replace('%E',
                               '-e "%s"' % opts.exe if opts.exe else '')
        command = command.replace('%X',
                               '-x "%s"' % opts.break_spec if opts.break_spec else '')
        print "Running %s" % (command)
        os.system(command)

    print "Bench runner done."

if __name__ == '__main__':
    main()
