blob: cfb48d7c58fd4bb25e136eeb4106d9cc11ffd0cd [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
Ahmad Sharif4467f002012-12-20 12:09:49 -080019import test_flag
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080020
21l = logger.GetLogger()
22
23
24class MyIndentedHelpFormatter(optparse.IndentedHelpFormatter):
25 def format_description(self, description):
26 return description
27
28
29def SetupParserOptions(parser):
30 """Add all options to the parser."""
31 parser.add_option("--dry_run",
32 dest="dry_run",
33 help=("Parse the experiment file and "
34 "show what will be done"),
35 action="store_true",
36 default=False)
37 # Allow each of the global fields to be overridden by passing in
38 # options. Add each global field as an option.
39 option_settings = GlobalSettings("")
40 for field_name in option_settings.fields:
41 field = option_settings.fields[field_name]
42 parser.add_option("--%s" % field.name,
43 dest=field.name,
44 help=field.description,
45 action="store")
46
47
48def ConvertOptionsToSettings(options):
49 """Convert options passed in into global settings."""
50 option_settings = GlobalSettings("option_settings")
51 for option_name in options.__dict__:
52 if (options.__dict__[option_name] is not None and
53 option_name in option_settings.fields):
54 option_settings.SetField(option_name, options.__dict__[option_name])
55 return option_settings
56
57
58def Cleanup(experiment):
59 """Handler function which is registered to the atexit handler."""
60 experiment.Cleanup()
61
62
63def Main(argv):
64 parser = optparse.OptionParser(usage=Help().GetUsage(),
65 description=Help().GetHelp(),
66 formatter=MyIndentedHelpFormatter(),
67 version="%prog 0.1")
68 SetupParserOptions(parser)
69 options, args = parser.parse_args(argv)
70
71 # Convert the relevant options that are passed in into a settings
72 # object which will override settings in the experiment file.
73 option_settings = ConvertOptionsToSettings(options)
74
75 if len(args) == 2:
76 experiment_filename = args[1]
77 else:
78 parser.error("Invalid number arguments.")
79
80 working_directory = os.getcwd()
Ahmad Sharif4467f002012-12-20 12:09:49 -080081 if options.dry_run:
82 test_flag.SetTestMode(True)
83
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080084 experiment_file = ExperimentFile(open(experiment_filename, "rb"),
85 option_settings)
Ahmad Sharif822c55d2012-02-08 20:55:47 -080086 if not experiment_file.GetGlobalSettings().GetField("name"):
87 experiment_name = os.path.basename(experiment_filename)
88 experiment_file.GetGlobalSettings().SetField("name", experiment_name)
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080089 experiment = ExperimentFactory().GetExperiment(experiment_file,
90 working_directory)
91
92 atexit.register(Cleanup, experiment)
93
94 if options.dry_run:
95 runner = MockExperimentRunner(experiment)
96 else:
97 runner = ExperimentRunner(experiment)
98 runner.Run()
99
100if __name__ == "__main__":
101 Main(sys.argv)