blob: e00ae75de5b61511d35c0bbf46dbff3129561682 [file] [log] [blame]
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -08001#!/usr/bin/python
2
3# Copyright 2011 Google Inc. All Rights Reserved.
4
5"""The driver script for running performance benchmarks on ChromeOS."""
6
7import atexit
8import optparse
9import os
10import sys
11from experiment_runner import ExperimentRunner
12from experiment_runner import MockExperimentRunner
13from experiment_factory import ExperimentFactory
14from experiment_file import ExperimentFile
15from help import Help
16from settings_factory import GlobalSettings
17from utils import logger
18
19
20l = logger.GetLogger()
21
22
23class MyIndentedHelpFormatter(optparse.IndentedHelpFormatter):
24 def format_description(self, description):
25 return description
26
27
28def SetupParserOptions(parser):
29 """Add all options to the parser."""
30 parser.add_option("--dry_run",
31 dest="dry_run",
32 help=("Parse the experiment file and "
33 "show what will be done"),
34 action="store_true",
35 default=False)
36 # Allow each of the global fields to be overridden by passing in
37 # options. Add each global field as an option.
38 option_settings = GlobalSettings("")
39 for field_name in option_settings.fields:
40 field = option_settings.fields[field_name]
41 parser.add_option("--%s" % field.name,
42 dest=field.name,
43 help=field.description,
44 action="store")
45
46
47def ConvertOptionsToSettings(options):
48 """Convert options passed in into global settings."""
49 option_settings = GlobalSettings("option_settings")
50 for option_name in options.__dict__:
51 if (options.__dict__[option_name] is not None and
52 option_name in option_settings.fields):
53 option_settings.SetField(option_name, options.__dict__[option_name])
54 return option_settings
55
56
57def Cleanup(experiment):
58 """Handler function which is registered to the atexit handler."""
59 experiment.Cleanup()
60
61
62def Main(argv):
63 parser = optparse.OptionParser(usage=Help().GetUsage(),
64 description=Help().GetHelp(),
65 formatter=MyIndentedHelpFormatter(),
66 version="%prog 0.1")
67 SetupParserOptions(parser)
68 options, args = parser.parse_args(argv)
69
70 # Convert the relevant options that are passed in into a settings
71 # object which will override settings in the experiment file.
72 option_settings = ConvertOptionsToSettings(options)
73
74 if len(args) == 2:
75 experiment_filename = args[1]
76 else:
77 parser.error("Invalid number arguments.")
78
79 working_directory = os.getcwd()
80 experiment_file = ExperimentFile(open(experiment_filename, "rb"),
81 option_settings)
82 experiment = ExperimentFactory().GetExperiment(experiment_file,
83 working_directory)
84
85 atexit.register(Cleanup, experiment)
86
87 if options.dry_run:
88 runner = MockExperimentRunner(experiment)
89 else:
90 runner = ExperimentRunner(experiment)
91 runner.Run()
92
93if __name__ == "__main__":
94 Main(sys.argv)