blob: 749e7acab393e3585dc0b84620faadb321ef0200 [file] [log] [blame]
# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import sys
from tracing.mre import corpus_driver_cmdline
from tracing.mre import map_runner
from tracing.mre import function_handle
from tracing.mre import job as job_module
from tracing.mre import json_output_formatter
def Main(argv):
parser = argparse.ArgumentParser(
description='Bulk trace processing')
parser.add_argument('--map_function_handle')
parser.add_argument('-j', '--jobs', type=int,
default=map_runner.AUTO_JOB_COUNT)
parser.add_argument('-o', '--output-file')
parser.add_argument('-s', '--stop-on-error',
action='store_true')
if len(sys.argv) == 1:
parser.print_help()
sys.exit(0)
args = parser.parse_args(argv[1:])
corpus_driver = corpus_driver_cmdline.GetCorpusDriver(parser, args)
if args.output_file:
ofile = open(args.output_file, 'w')
else:
ofile = sys.stdout
output_formatter = json_output_formatter.JSONOutputFormatter(ofile)
try:
map_handle = None
if args.map_function_handle:
map_handle = function_handle.FunctionHandle.FromUserFriendlyString(
args.map_function_handle)
job = job_module.Job(map_handle)
except function_handle.UserFriendlyStringInvalidError:
error_lines = [
'The map_traces command-line API has changed! You must now specify the',
'filenames to load and the map function name, separated by :. For '
'example, a mapper in',
'foo.html called Foo would be written as foo.html:Foo .'
]
parser.error('\n'.join(error_lines))
try:
trace_handles = corpus_driver.GetTraceHandles()
runner = map_runner.MapRunner(trace_handles, job,
stop_on_error=args.stop_on_error,
jobs=args.jobs,
output_formatters=[output_formatter])
results = runner.Run()
if not any(result.failures for result in results):
return 0
else:
return 255
finally:
if ofile != sys.stdout:
ofile.close()