• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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