127 lines
4.8 KiB
Python
127 lines
4.8 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import os
|
|
import argparse
|
|
import json
|
|
|
|
DEBUG_CRITICAL = 0
|
|
DEBUG_ERROR = 1
|
|
DEBUG_WARNING = 2
|
|
DEBUG_INFO = 3
|
|
DEBUG_VERBOSE = 4
|
|
|
|
|
|
class XTalosError(Exception):
|
|
"""error related to xtalos invocation"""
|
|
|
|
|
|
def options_from_config(options, config_file):
|
|
"""override options from a json config file; returns the dictionary
|
|
- options: a dictionary with default options
|
|
- config_file: path to a json config file
|
|
"""
|
|
|
|
with open(config_file, 'r') as config:
|
|
conf = json.load(config)
|
|
for optname, value in options.items():
|
|
options[optname] = conf.get(optname, value)
|
|
return options
|
|
|
|
|
|
class XtalosOptions(argparse.ArgumentParser):
|
|
|
|
def __init__(self, **kwargs):
|
|
argparse.ArgumentParser.__init__(self, **kwargs)
|
|
defaults = {}
|
|
|
|
self.add_argument("--pid", dest="processID",
|
|
help="process ID of the process we launch")
|
|
defaults["processID"] = None
|
|
|
|
self.add_argument("-x", "--xperf", dest="xperf_path",
|
|
help="location of xperf tool, defaults to"
|
|
" 'xperf.exe'")
|
|
defaults["xperf_path"] = "xperf.exe"
|
|
|
|
self.add_argument("-e", "--etl_filename", dest="etl_filename",
|
|
help="Name of the .etl file to work with."
|
|
" Defaults to 'output.etl'")
|
|
defaults["etl_filename"] = "test.etl"
|
|
|
|
self.add_argument("-d", "--debug",
|
|
type=int, dest="debug_level",
|
|
help="debug level for output from tool (0-5, 5"
|
|
" being everything), defaults to 1")
|
|
defaults["debug_level"] = 1
|
|
|
|
self.add_argument("-o", "--output-file", dest="outputFile",
|
|
help="Filename to write all output to, default"
|
|
" is stdout")
|
|
defaults["outputFile"] = 'etl_output.csv'
|
|
|
|
self.add_argument("-r", "--providers", dest="xperf_providers",
|
|
action="append",
|
|
help="xperf providers to collect data from")
|
|
defaults["xperf_providers"] = []
|
|
|
|
self.add_argument("--user-providers", dest="xperf_user_providers",
|
|
action="append",
|
|
help="user mode xperf providers to collect data"
|
|
" from")
|
|
defaults["xperf_user_providers"] = []
|
|
|
|
self.add_argument("-s", "--stackwalk", dest="xperf_stackwalk",
|
|
action="append",
|
|
help="xperf stackwalk arguments to collect")
|
|
defaults["xperf_stackwalk"] = []
|
|
|
|
self.add_argument("-c", "--config-file", dest="configFile",
|
|
help="Name of the json config file with test run"
|
|
" and browser information")
|
|
defaults["configFile"] = None
|
|
|
|
self.add_argument("-w", "--whitelist-file", dest="whitelist_file",
|
|
help="Name of whitelist file")
|
|
defaults["whitelist_file"] = None
|
|
|
|
self.add_argument("-i", "--all-stages", dest="all_stages",
|
|
action="store_true",
|
|
help="Include all stages in file I/O output,"
|
|
"not just startup")
|
|
defaults["all_stages"] = False
|
|
|
|
self.add_argument("-t", "--all-threads", dest="all_threads",
|
|
action="store_true",
|
|
help="Include all threads in file I/O output,"
|
|
" not just main")
|
|
defaults["all_threads"] = False
|
|
|
|
self.add_argument("-a", "--approot", dest="approot",
|
|
help="Provide the root directory of the application"
|
|
" we are testing to find related files (i.e."
|
|
" dependentlibs.list)")
|
|
defaults["approot"] = None
|
|
|
|
self.add_argument("--error-filename", dest="error_filename",
|
|
help="Filename to store the failures detected"
|
|
" while runnning the test")
|
|
defaults["error_filename"] = None
|
|
|
|
self.set_defaults(**defaults)
|
|
|
|
def verifyOptions(self, options):
|
|
|
|
# override options from config file
|
|
if options.configFile:
|
|
options_from_config(options.__dict__, options.configFile)
|
|
|
|
# ensure xperf path exists
|
|
options.xperf_path = os.path.abspath(options.xperf_path)
|
|
if not os.path.exists(options.xperf_path):
|
|
print("ERROR: xperf_path '%s' does not exist" % options.xperf_path)
|
|
return None
|
|
|
|
return options
|