1# Copyright (c) 2014 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import codecs 6import argparse 7import os 8import sys 9 10import tracing_project 11from py_vulcanize import generate 12 13 14def Main(argv): 15 16 parser = argparse.ArgumentParser( 17 usage='%(prog)s <options>', 18 epilog=('Produces a standalone HTML import that contains the\n' 19 'trace viewer.')) 20 21 project = tracing_project.TracingProject() 22 project.AddConfigNameOptionToParser(parser) 23 24 parser.add_argument('--no-min', default=False, action='store_true', 25 help='skip minification') 26 parser.add_argument('--report-sizes', default=False, action='store_true', 27 help='Explain what makes tracing big.') 28 parser.add_argument('--report-deps', default=False, action='store_true', 29 help='Print a dot-formatted deps graph.') 30 parser.add_argument('--output', 31 help='Where to put the generated result. If not given, ' 32 '$TRACING/tracing/bin/trace_viewer.html is used.') 33 34 args = parser.parse_args(argv[1:]) 35 36 tracing_dir = os.path.relpath( 37 os.path.join(os.path.dirname(__file__), '..', '..')) 38 if args.output: 39 output_filename = args.output 40 else: 41 output_filename = os.path.join( 42 tracing_dir, 'tracing/bin/trace_viewer_%s.html' % args.config_name) 43 44 with codecs.open(output_filename, 'w', encoding='utf-8') as f: 45 WriteTraceViewer( 46 f, 47 config_name=args.config_name, 48 minify=not args.no_min, 49 report_sizes=args.report_sizes, 50 report_deps=args.report_deps) 51 52 return 0 53 54 55def WriteTraceViewer(output_file, 56 config_name=None, 57 minify=False, 58 report_sizes=False, 59 report_deps=False, 60 output_html_head_and_body=True, 61 extra_search_paths=None, 62 extra_module_names_to_load=None): 63 project = tracing_project.TracingProject() 64 if extra_search_paths: 65 for p in extra_search_paths: 66 project.source_paths.append(p) 67 if config_name is None: 68 config_name = project.GetDefaultConfigName() 69 70 module_names = [project.GetModuleNameForConfigName(config_name)] 71 if extra_module_names_to_load: 72 module_names += extra_module_names_to_load 73 74 vulcanizer = project.CreateVulcanizer() 75 load_sequence = vulcanizer.CalcLoadSequenceForModuleNames( 76 module_names) 77 78 if report_deps: 79 sys.stdout.write(vulcanizer.GetDepsGraphFromModuleNames(module_names)) 80 81 generate.GenerateStandaloneHTMLToFile( 82 output_file, load_sequence, 83 minify=minify, report_sizes=report_sizes, 84 output_html_head_and_body=output_html_head_and_body) 85