1b122baf563564a1d478804fb882fcba242a9949eChris Craik# Copyright (c) 2014 The Chromium Authors. All rights reserved. 2b122baf563564a1d478804fb882fcba242a9949eChris Craik# Use of this source code is governed by a BSD-style license that can be 3b122baf563564a1d478804fb882fcba242a9949eChris Craik# found in the LICENSE file. 4b122baf563564a1d478804fb882fcba242a9949eChris Craik 5b122baf563564a1d478804fb882fcba242a9949eChris Craikimport codecs 68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiimport argparse 7b122baf563564a1d478804fb882fcba242a9949eChris Craikimport os 8b122baf563564a1d478804fb882fcba242a9949eChris Craikimport sys 9b122baf563564a1d478804fb882fcba242a9949eChris Craik 104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport tracing_project 118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom py_vulcanize import generate 12b122baf563564a1d478804fb882fcba242a9949eChris Craik 13b122baf563564a1d478804fb882fcba242a9949eChris Craik 144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairdef Main(argv): 15b122baf563564a1d478804fb882fcba242a9949eChris Craik 168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi parser = argparse.ArgumentParser( 178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi usage='%(prog)s <options>', 188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi epilog=('Produces a standalone HTML import that contains the\n' 198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'trace viewer.')) 20b122baf563564a1d478804fb882fcba242a9949eChris Craik 21ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik project = tracing_project.TracingProject() 22b122baf563564a1d478804fb882fcba242a9949eChris Craik project.AddConfigNameOptionToParser(parser) 23b122baf563564a1d478804fb882fcba242a9949eChris Craik 248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi parser.add_argument('--no-min', default=False, action='store_true', 258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi help='skip minification') 268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi parser.add_argument('--report-sizes', default=False, action='store_true', 278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi help='Explain what makes tracing big.') 288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi parser.add_argument('--report-deps', default=False, action='store_true', 298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi help='Print a dot-formatted deps graph.') 308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi parser.add_argument('--output', 318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi help='Where to put the generated result. If not given, ' 328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi '$TRACING/tracing/bin/trace_viewer.html is used.') 338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi args = parser.parse_args(argv[1:]) 35b122baf563564a1d478804fb882fcba242a9949eChris Craik 36ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik tracing_dir = os.path.relpath( 37ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik os.path.join(os.path.dirname(__file__), '..', '..')) 388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if args.output: 398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi output_filename = args.output 40b122baf563564a1d478804fb882fcba242a9949eChris Craik else: 41b122baf563564a1d478804fb882fcba242a9949eChris Craik output_filename = os.path.join( 428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi tracing_dir, 'tracing/bin/trace_viewer_%s.html' % args.config_name) 43b122baf563564a1d478804fb882fcba242a9949eChris Craik 44b122baf563564a1d478804fb882fcba242a9949eChris Craik with codecs.open(output_filename, 'w', encoding='utf-8') as f: 45b122baf563564a1d478804fb882fcba242a9949eChris Craik WriteTraceViewer( 46b122baf563564a1d478804fb882fcba242a9949eChris Craik f, 478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi config_name=args.config_name, 488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi minify=not args.no_min, 498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi report_sizes=args.report_sizes, 508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi report_deps=args.report_deps) 51b122baf563564a1d478804fb882fcba242a9949eChris Craik 52b122baf563564a1d478804fb882fcba242a9949eChris Craik return 0 53b122baf563564a1d478804fb882fcba242a9949eChris Craik 54b122baf563564a1d478804fb882fcba242a9949eChris Craik 55b122baf563564a1d478804fb882fcba242a9949eChris Craikdef WriteTraceViewer(output_file, 56b122baf563564a1d478804fb882fcba242a9949eChris Craik config_name=None, 57b122baf563564a1d478804fb882fcba242a9949eChris Craik minify=False, 58b122baf563564a1d478804fb882fcba242a9949eChris Craik report_sizes=False, 59b122baf563564a1d478804fb882fcba242a9949eChris Craik report_deps=False, 60b122baf563564a1d478804fb882fcba242a9949eChris Craik output_html_head_and_body=True, 61b122baf563564a1d478804fb882fcba242a9949eChris Craik extra_search_paths=None, 62b122baf563564a1d478804fb882fcba242a9949eChris Craik extra_module_names_to_load=None): 63ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik project = tracing_project.TracingProject() 64b122baf563564a1d478804fb882fcba242a9949eChris Craik if extra_search_paths: 65b122baf563564a1d478804fb882fcba242a9949eChris Craik for p in extra_search_paths: 66b122baf563564a1d478804fb882fcba242a9949eChris Craik project.source_paths.append(p) 67ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik if config_name is None: 68b122baf563564a1d478804fb882fcba242a9949eChris Craik config_name = project.GetDefaultConfigName() 69b122baf563564a1d478804fb882fcba242a9949eChris Craik 70ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik module_names = [project.GetModuleNameForConfigName(config_name)] 71b122baf563564a1d478804fb882fcba242a9949eChris Craik if extra_module_names_to_load: 72b122baf563564a1d478804fb882fcba242a9949eChris Craik module_names += extra_module_names_to_load 734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair vulcanizer = project.CreateVulcanizer() 754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair load_sequence = vulcanizer.CalcLoadSequenceForModuleNames( 76ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik module_names) 77b122baf563564a1d478804fb882fcba242a9949eChris Craik 78b122baf563564a1d478804fb882fcba242a9949eChris Craik if report_deps: 794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair sys.stdout.write(vulcanizer.GetDepsGraphFromModuleNames(module_names)) 80b122baf563564a1d478804fb882fcba242a9949eChris Craik 81b122baf563564a1d478804fb882fcba242a9949eChris Craik generate.GenerateStandaloneHTMLToFile( 82ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik output_file, load_sequence, 83ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik minify=minify, report_sizes=report_sizes, 84ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik output_html_head_and_body=output_html_head_and_body) 85