aboutsummaryrefslogtreecommitdiff
path: root/crosperf/crosperf.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/crosperf.py')
-rwxr-xr-xcrosperf/crosperf.py221
1 files changed, 113 insertions, 108 deletions
diff --git a/crosperf/crosperf.py b/crosperf/crosperf.py
index f195b13a..aace2c80 100755
--- a/crosperf/crosperf.py
+++ b/crosperf/crosperf.py
@@ -1,12 +1,11 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-# Copyright 2011 The Chromium OS Authors. All rights reserved.
+# Copyright 2011 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""The driver script for running performance benchmarks on ChromeOS."""
-from __future__ import print_function
import argparse
import atexit
@@ -14,139 +13,145 @@ import os
import signal
import sys
-from experiment_runner import ExperimentRunner
-from experiment_runner import MockExperimentRunner
-from experiment_factory import ExperimentFactory
-from experiment_file import ExperimentFile
-from settings_factory import GlobalSettings
-
# This import causes pylint to warn about "No name 'logger' in module
# 'cros_utils'". I do not understand why. The import works fine in python.
# pylint: disable=no-name-in-module
from cros_utils import logger
-
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+from experiment_runner import ExperimentRunner
+from experiment_runner import MockExperimentRunner
+from settings_factory import GlobalSettings
import test_flag
+
HAS_FAILURE = 1
ALL_FAILED = 2
def SetupParserOptions(parser):
- """Add all options to the parser."""
- parser.add_argument(
- '--dry_run',
- dest='dry_run',
- help=('Parse the experiment file and '
- 'show what will be done'),
- action='store_true',
- default=False)
- # Allow each of the global fields to be overridden by passing in
- # options. Add each global field as an option.
- option_settings = GlobalSettings('')
- for field_name in option_settings.fields:
- field = option_settings.fields[field_name]
+ """Add all options to the parser."""
parser.add_argument(
- '--%s' % field.name,
- dest=field.name,
- help=field.description,
- action='store')
+ "--dry_run",
+ dest="dry_run",
+ help=("Parse the experiment file and " "show what will be done"),
+ action="store_true",
+ default=False,
+ )
+ # Allow each of the global fields to be overridden by passing in
+ # options. Add each global field as an option.
+ option_settings = GlobalSettings("")
+ for field_name in option_settings.fields:
+ field = option_settings.fields[field_name]
+ parser.add_argument(
+ "--%s" % field.name,
+ dest=field.name,
+ help=field.description,
+ action="store",
+ )
def ConvertOptionsToSettings(options):
- """Convert options passed in into global settings."""
- option_settings = GlobalSettings('option_settings')
- for option_name in options.__dict__:
- if (options.__dict__[option_name] is not None and
- option_name in option_settings.fields):
- option_settings.SetField(option_name, options.__dict__[option_name])
- return option_settings
+ """Convert options passed in into global settings."""
+ option_settings = GlobalSettings("option_settings")
+ for option_name in options.__dict__:
+ if (
+ options.__dict__[option_name] is not None
+ and option_name in option_settings.fields
+ ):
+ option_settings.SetField(option_name, options.__dict__[option_name])
+ return option_settings
def Cleanup(experiment):
- """Handler function which is registered to the atexit handler."""
- experiment.Cleanup()
+ """Handler function which is registered to the atexit handler."""
+ experiment.Cleanup()
def CallExitHandler(signum, _):
- """Signal handler that transforms a signal into a call to exit.
+ """Signal handler that transforms a signal into a call to exit.
- This is useful because functionality registered by "atexit" will
- be called. It also means you can "catch" the signal by catching
- the SystemExit exception.
- """
- sys.exit(128 + signum)
+ This is useful because functionality registered by "atexit" will
+ be called. It also means you can "catch" the signal by catching
+ the SystemExit exception.
+ """
+ sys.exit(128 + signum)
def RunCrosperf(argv):
- parser = argparse.ArgumentParser()
-
- parser.add_argument(
- '--noschedv2',
- dest='noschedv2',
- default=False,
- action='store_true',
- help=('Do not use new scheduler. '
- 'Use original scheduler instead.'))
- parser.add_argument(
- '-l',
- '--log_dir',
- dest='log_dir',
- default='',
- help='The log_dir, default is under <crosperf_logs>/logs')
-
- SetupParserOptions(parser)
- options, args = parser.parse_known_args(argv)
-
- # Convert the relevant options that are passed in into a settings
- # object which will override settings in the experiment file.
- option_settings = ConvertOptionsToSettings(options)
- log_dir = os.path.abspath(os.path.expanduser(options.log_dir))
- logger.GetLogger(log_dir)
-
- if len(args) == 2:
- experiment_filename = args[1]
- else:
- parser.error('Invalid number arguments.')
-
- working_directory = os.getcwd()
- if options.dry_run:
- test_flag.SetTestMode(True)
-
- experiment_file = ExperimentFile(
- open(experiment_filename, encoding='utf-8'), option_settings)
- if not experiment_file.GetGlobalSettings().GetField('name'):
- experiment_name = os.path.basename(experiment_filename)
- experiment_file.GetGlobalSettings().SetField('name', experiment_name)
- experiment = ExperimentFactory().GetExperiment(experiment_file,
- working_directory, log_dir)
-
- json_report = experiment_file.GetGlobalSettings().GetField('json_report')
-
- signal.signal(signal.SIGTERM, CallExitHandler)
- atexit.register(Cleanup, experiment)
-
- if options.dry_run:
- runner = MockExperimentRunner(experiment, json_report)
- else:
- runner = ExperimentRunner(
- experiment, json_report, using_schedv2=(not options.noschedv2))
-
- ret = runner.Run()
- if ret == HAS_FAILURE:
- raise RuntimeError('One or more benchmarks failed.')
- if ret == ALL_FAILED:
- raise RuntimeError('All benchmarks failed to run.')
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ "--noschedv2",
+ dest="noschedv2",
+ default=False,
+ action="store_true",
+ help=("Do not use new scheduler. " "Use original scheduler instead."),
+ )
+ parser.add_argument(
+ "-l",
+ "--log_dir",
+ dest="log_dir",
+ default="",
+ help="The log_dir, default is under <crosperf_logs>/logs",
+ )
+
+ SetupParserOptions(parser)
+ options, args = parser.parse_known_args(argv)
+
+ # Convert the relevant options that are passed in into a settings
+ # object which will override settings in the experiment file.
+ option_settings = ConvertOptionsToSettings(options)
+ log_dir = os.path.abspath(os.path.expanduser(options.log_dir))
+ logger.GetLogger(log_dir)
+
+ if len(args) == 2:
+ experiment_filename = args[1]
+ else:
+ parser.error("Invalid number arguments.")
+
+ working_directory = os.getcwd()
+ if options.dry_run:
+ test_flag.SetTestMode(True)
+
+ experiment_file = ExperimentFile(
+ open(experiment_filename, encoding="utf-8"), option_settings
+ )
+ if not experiment_file.GetGlobalSettings().GetField("name"):
+ experiment_name = os.path.basename(experiment_filename)
+ experiment_file.GetGlobalSettings().SetField("name", experiment_name)
+ experiment = ExperimentFactory().GetExperiment(
+ experiment_file, working_directory, log_dir
+ )
+
+ json_report = experiment_file.GetGlobalSettings().GetField("json_report")
+
+ signal.signal(signal.SIGTERM, CallExitHandler)
+ atexit.register(Cleanup, experiment)
+
+ if options.dry_run:
+ runner = MockExperimentRunner(experiment, json_report)
+ else:
+ runner = ExperimentRunner(
+ experiment, json_report, using_schedv2=(not options.noschedv2)
+ )
+
+ ret = runner.Run()
+ if ret == HAS_FAILURE:
+ raise RuntimeError("One or more benchmarks failed.")
+ if ret == ALL_FAILED:
+ raise RuntimeError("All benchmarks failed to run.")
def Main(argv):
- try:
- RunCrosperf(argv)
- except Exception:
- # Flush buffers before exiting to avoid out of order printing
- sys.stdout.flush()
- # Raise exception prints out traceback
- raise
+ try:
+ RunCrosperf(argv)
+ except Exception:
+ # Flush buffers before exiting to avoid out of order printing
+ sys.stdout.flush()
+ # Raise exception prints out traceback
+ raise
-if __name__ == '__main__':
- Main(sys.argv)
+if __name__ == "__main__":
+ Main(sys.argv)