1#!/usr/bin/env python 2# Copyright 2015 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6"""Produces a dot file showing dependency relationships between modules. 7 8The dot file contains a text-based representation of a directed graph that 9explains why given module names were included in a trace_viewer config. 10 11Example usage: 12$ ./why_imported ui.analysis.analysis_view > ~/analysis_view.dot 13 14This can then be converted to a graphical representation with the dot tool: 15$ dot -Grankdir=LR -Tpng ~/analysis_view.dot -o ~/analysis_view.png 16""" 17 18import sys 19import optparse 20 21from tracing import tracing_project 22 23def Main(args): 24 project = tracing_project.TracingProject() 25 26 parser = optparse.OptionParser( 27 usage='%prog <options> moduleNames', epilog=__doc__) 28 parser.add_option( 29 '--config', type='choice', choices=project.GetConfigNames()) 30 options, args = parser.parse_args(args) 31 32 if options.config: 33 names = ['tracing', 34 project.GetModuleNameForConfigName(options.config)] 35 load_sequence = project.CalcLoadSequenceForModuleNames(names) 36 else: 37 parser.parse_err('Unsupported') 38 print project.GetDominatorGraphForModulesNamed(args, load_sequence) 39 40 41if __name__ == '__main__': 42 sys.exit(Main(sys.argv[1:])) 43