blob: 0e6e00fd6f794d6d9ed624dcae979a4320116cbc [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 os
import sys
import traceback
import perf_insights
from perf_insights import local_directory_corpus_driver
from perf_insights import get_trace_handles_query
from perf_insights import map_runner
from perf_insights.results import json_output_formatter
def Main(argv):
parser = argparse.ArgumentParser(
description='Local bulk trace processing')
parser.add_argument('trace_directory')
parser.add_argument('--query')
parser.add_argument('map_file')
parser.add_argument('-j', '--jobs', type=int, default=1)
parser.add_argument('-o', '--output-file')
parser.add_argument('-s', '--stop-on-error',
action='store_true')
args = parser.parse_args(argv[1:])
if not os.path.exists(args.trace_directory):
parser.error('trace_directory does not exist')
if not os.path.exists(args.map_file):
parser.error('map does not exist')
corpus_driver = local_directory_corpus_driver.LocalDirectoryCorpusDriver(
os.path.abspath(os.path.expanduser(args.trace_directory)))
if args.query is None:
query = get_trace_handles_query.GetTraceHandlesQuery.FromString('True')
else:
query = get_trace_handles_query.GetTraceHandlesQuery.FromString(
args.query)
if args.output_file:
ofile = open(args.output_file, 'w')
else:
ofile = sys.stdout
output_formatter = json_output_formatter.JSONOutputFormatter(ofile)
try:
trace_handles = corpus_driver.GetTraceHandlesMatchingQuery(query)
runner = map_runner.MapRunner(trace_handles, args.map_file,
stop_on_error=args.stop_on_error)
results = runner.Run(jobs=args.jobs, output_formatters=[output_formatter])
if not results.had_failures:
return 0
else:
return 255
finally:
if ofile != sys.stdout:
ofile.close()