The Sol Programming Language!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

71 lines
1.8 KiB

import sys
from collections import defaultdict
f = open('gclog.txt', 'r')
incs = defaultdict(lambda: 0)
decs = defaultdict(lambda: 0)
refs = defaultdict(lambda: 0)
seenrefs = {}
types = {}
lineno = 0
for line in f:
lineno += 1
if lineno % 10000 == 0:
print 'Processing line', lineno
if line[0] == '=':
continue
parts = line.split('\t')
if parts[2] == 'INCREF':
incs[parts[1]] += 1
refs[parts[4]] += 1
types[parts[4]] = parts[3]
seenrefs[parts[4]] = parts[7]
elif parts[2] == 'DECREF':
decs[parts[1]] += 1
refs[parts[4]] -= 1
types[parts[4]] = parts[3]
seenrefs[parts[4]] = parts[7]
incpairs = incs.items()
decpairs = decs.items()
refpairs = refs.items()
incpairs.sort(key=lambda it: it[1], reverse=True)
decpairs.sort(key=lambda it: it[1], reverse=True)
refpairs.sort(key=lambda it: it[1], reverse=True)
for k in seenrefs:
seenrefs[k] = int(seenrefs[k])
totincs = sum((i[1] for i in incpairs))
totdecs = sum((i[1] for i in decpairs))
totliving = sum((i[1] for i in refpairs))
totsol = sum(seenrefs.itervalues())
out = open('gcstat.txt', 'w')
sys.stdout = out
print '=== Totals ==='
print '= Increfs:', totincs
print '= Decrefs:', totdecs
print '= Diff:', totincs - totdecs
print '= Living (our estimate):', totliving
print '= Living (according to Sol):', totsol
print '=== Functions, sorted by increments ==='
print '= %-30s%-8s%-8s'%('name', 'incs', 'decs')
for func, inccnt in incpairs:
print '%-32s%-8d%-8d'%(func, inccnt, decs[func])
print '=== Functions, sorted by decrements ==='
print '= %-30s%-8s%-8s'%('name', 'decs', 'incs')
for func, deccnt in decpairs:
print '%-32s%-8d%-8d'%(func, deccnt, incs[func])
print '=== Objects alive at cleanup ==='
print '= %-14s%-16s%-8s%-8s'%('addr', 'type', 'refs', 'solrefs')
for addr, refcnt in refpairs:
print '%-16s%-16s%-8d%-8d'%(addr, types[addr], refcnt, seenrefs[addr])