aboutsummaryrefslogtreecommitdiff
path: root/scripts/maint/display_callgraph.py
blob: c9001c6d968e866efeb92165264f32bdd92ec53b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/python

import cPickle

data = cPickle.load(open("callgraph.pkl"))

# data = data['modItems']

callgraph = data['callgraph']
closure = data['closure']
sccs = data['sccs']
fn_bottle, call_bottle = data['bottlenecks']

for n_reachable, fn in sorted(list((len(r), fn) for fn, r in closure.iteritems())):
   print "%s can reach %s other functions." %(fn, n_reachable)


c = [ (len(component), component) for component in sccs ]
c.sort()

print "\n================================"

for n, component in c:
   if n < 2:
      continue
   print "Strongly connected component of size %d:"%n
   print component


print "\n================================"

print "====== Number of functions pulled into blob, by function in blob."
fn_bottle.sort()
for n, fn in fn_bottle[-30:]:
   print "%3d: %s"%(n, fn)

print "====== Number of functions pulled into blob, by call in blob."
call_bottle.sort()
for n, fn1, _, fn2 in call_bottle[-30:]:
   print "%3d: %s -> %s "%(n, fn2, fn1)