OLD | NEW |
(Empty) | |
| 1 # Copyright 2013 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 |
| 5 import os |
| 6 import shutil |
| 7 import subprocess |
| 8 import sys |
| 9 |
| 10 |
| 11 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
| 12 |
| 13 |
| 14 def main(): |
| 15 if len(sys.argv) != 2: |
| 16 print 'usage: %s <output.html>' % sys.argv[0] |
| 17 return 1 |
| 18 env = os.environ.copy() |
| 19 env['GYP_GENERATORS'] = 'dump_dependency_json' |
| 20 print 'Dumping dependencies...' |
| 21 popen = subprocess.Popen( |
| 22 ['python', 'build/gyp_chromium'], |
| 23 shell=True, env=env) |
| 24 popen.communicate() |
| 25 if popen.returncode != 0: |
| 26 return popen.returncode |
| 27 print 'Finding problems...' |
| 28 popen = subprocess.Popen( |
| 29 ['python', 'tools/gyp-explain.py', '--dot', |
| 30 'chrome.gyp:browser#', 'core.gyp:webcore#'], |
| 31 stdout=subprocess.PIPE, |
| 32 shell=True) |
| 33 out, _ = popen.communicate() |
| 34 if popen.returncode != 0: |
| 35 return popen.returncode |
| 36 |
| 37 # Break into pairs to uniq to make graph less of a mess. |
| 38 print 'Simplifying...' |
| 39 deduplicated = set() |
| 40 lines = out.splitlines()[2:-1] |
| 41 for line in lines: |
| 42 line = line.strip('\r\n ;') |
| 43 pairs = line.split(' -> ') |
| 44 for i in range(len(pairs) - 1): |
| 45 deduplicated.add('%s -> %s;' % (pairs[i], pairs[i + 1])) |
| 46 graph = 'strict digraph {\n' + '\n'.join(sorted(deduplicated)) + '\n}' |
| 47 |
| 48 print 'Writing report to %s...' % sys.argv[1] |
| 49 path_count = len(out.splitlines()) |
| 50 with open(os.path.join(BASE_DIR, 'viz.js', 'viz.js')) as f: |
| 51 viz_js = f.read() |
| 52 with open(sys.argv[1], 'w') as f: |
| 53 f.write(PREFIX % path_count) |
| 54 f.write(graph) |
| 55 f.write(SUFFIX % viz_js) |
| 56 print 'Done.' |
| 57 |
| 58 |
| 59 PREFIX = r'''<!DOCTYPE html> |
| 60 <html> |
| 61 <head> |
| 62 <meta charset="utf-8"> |
| 63 <title>Undesirable Dependencies</title> |
| 64 </head> |
| 65 <body> |
| 66 <h1>Undesirable Dependencies</h1> |
| 67 <h2>browser → webcore</h2> |
| 68 <h3>%d paths</h3> |
| 69 <script type="text/vnd.graphviz" id="graph"> |
| 70 ''' |
| 71 |
| 72 |
| 73 SUFFIX = r''' |
| 74 </script> |
| 75 <script>%s</script> |
| 76 <div id="output">Rendering...</div> |
| 77 <script> |
| 78 setTimeout(function() { |
| 79 document.getElementById("output").innerHTML = |
| 80 Viz(document.getElementById("graph").innerHTML, "svg"); |
| 81 }, 1); |
| 82 </script> |
| 83 </body> |
| 84 </html> |
| 85 ''' |
| 86 |
| 87 |
| 88 if __name__ == '__main__': |
| 89 sys.exit(main()) |
OLD | NEW |