blob: 36e9db88b2e72704cdc03232784c375d0833b6a3 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 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.
"""Produces a dot file showing dependency relationships between modules.
The dot file contains a text-based representation of a directed graph that
explains why given module names were included in a trace_viewer config.
Example usage:
$ ./why_imported core.analysis.analysis_view > ~/analysis_view.dot
This can then be converted to a graphical representation with the dot tool:
$ dot -Grankdir=LR -Tpng ~/analysis_view.dot -o ~/analysis_view.png
"""
import sys
import optparse
from trace_viewer import trace_viewer_project
def Main(args):
project = trace_viewer_project.TraceViewerProject()
parser = optparse.OptionParser(
usage='%prog <options> moduleNames', epilog=__doc__)
parser.add_option(
'--config', type='choice', choices=project.GetConfigNames())
options, args = parser.parse_args(args)
if options.config:
names = ['trace_viewer',
project.GetModuleNameForConfigName(options.config)]
load_sequence = project.CalcLoadSequenceForModuleNames(names)
else:
load_sequence = None
print project.GetDominatorGraphForModulesNamed(args, load_sequence)
if __name__ == '__main__':
sys.exit(Main(sys.argv[1:]))