blob: fc0098d2251125a2245d971d2cf326aa58c531ef [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
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080021
22class MyIndentedHelpFormatter(optparse.IndentedHelpFormatter):
23 def format_description(self, description):
24 return description
25
26
27def SetupParserOptions(parser):
28 """Add all options to the parser."""
29 parser.add_option("--dry_run",
30 dest="dry_run",
31 help=("Parse the experiment file and "
32 "show what will be done"),
33 action="store_true",
34 default=False)
35 # Allow each of the global fields to be overridden by passing in
36 # options. Add each global field as an option.
37 option_settings = GlobalSettings("")
38 for field_name in option_settings.fields:
39 field = option_settings.fields[field_name]
40 parser.add_option("--%s" % field.name,
41 dest=field.name,
42 help=field.description,
43 action="store")
44
45
46def ConvertOptionsToSettings(options):
47 """Convert options passed in into global settings."""
48 option_settings = GlobalSettings("option_settings")
49 for option_name in options.__dict__:
50 if (options.__dict__[option_name] is not None and
51 option_name in option_settings.fields):
52 option_settings.SetField(option_name, options.__dict__[option_name])
53 return option_settings
54
55
56def Cleanup(experiment):
57 """Handler function which is registered to the atexit handler."""
58 experiment.Cleanup()
59
60
61def Main(argv):
62 parser = optparse.OptionParser(usage=Help().GetUsage(),
63 description=Help().GetHelp(),
64 formatter=MyIndentedHelpFormatter(),
cmtice98a53692014-04-16 14:48:47 -070065 version="%prog 3.0")
Luis Lozanof81680c2013-03-15 14:44:13 -070066
Han Shen43494292015-09-14 10:26:40 -070067 parser.add_option("--noschedv2",
68 dest="noschedv2",
69 default=False,
Han Shenba649282015-08-05 17:19:55 -070070 action="store_true",
Han Shen43494292015-09-14 10:26:40 -070071 help=("Do not use new scheduler. "
72 "Use original scheduler instead."))
Luis Lozanof81680c2013-03-15 14:44:13 -070073 parser.add_option("-l", "--log_dir",
74 dest="log_dir",
75 default="",
76 help="The log_dir, default is under <crosperf_logs>/logs")
77
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080078 SetupParserOptions(parser)
79 options, args = parser.parse_args(argv)
80
81 # Convert the relevant options that are passed in into a settings
82 # object which will override settings in the experiment file.
83 option_settings = ConvertOptionsToSettings(options)
Luis Lozanof81680c2013-03-15 14:44:13 -070084 log_dir = os.path.abspath(os.path.expanduser(options.log_dir))
85 logger.GetLogger(log_dir)
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080086
87 if len(args) == 2:
88 experiment_filename = args[1]
89 else:
90 parser.error("Invalid number arguments.")
91
92 working_directory = os.getcwd()
Ahmad Sharif4467f002012-12-20 12:09:49 -080093 if options.dry_run:
94 test_flag.SetTestMode(True)
95
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -080096 experiment_file = ExperimentFile(open(experiment_filename, "rb"),
97 option_settings)
Ahmad Sharif822c55d2012-02-08 20:55:47 -080098 if not experiment_file.GetGlobalSettings().GetField("name"):
99 experiment_name = os.path.basename(experiment_filename)
100 experiment_file.GetGlobalSettings().SetField("name", experiment_name)
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -0800101 experiment = ExperimentFactory().GetExperiment(experiment_file,
Luis Lozanof81680c2013-03-15 14:44:13 -0700102 working_directory,
103 log_dir)
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -0800104
Caroline Ticeef4ca8a2015-08-25 12:53:38 -0700105 json_report = experiment_file.GetGlobalSettings().GetField("json_report")
106
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -0800107 atexit.register(Cleanup, experiment)
108
109 if options.dry_run:
110 runner = MockExperimentRunner(experiment)
111 else:
Caroline Ticeef4ca8a2015-08-25 12:53:38 -0700112 runner = ExperimentRunner(experiment, json_report,
Han Shene205d902015-09-15 11:04:05 -0700113 using_schedv2=(not options.noschedv2))
Han Shenba649282015-08-05 17:19:55 -0700114
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -0800115 runner.Run()
116
117if __name__ == "__main__":
118 Main(sys.argv)