mirror of https://github.com/drowe67/codec2.git
80 lines
2.1 KiB
Python
Executable File
80 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
""" sum_debug_alloc
|
|
|
|
Sum lines reported from codec2-dev/src/debug_alloc.h and report
|
|
|
|
Lines like:
|
|
|
|
CALLOC: run_ldpc_decoder(112, 32)
|
|
|
|
|
|
MALLOC: other_func(238)
|
|
|
|
"""
|
|
|
|
import fileinput
|
|
|
|
by_func = {}
|
|
by_addr = {}
|
|
|
|
def new_func():
|
|
rec = {}
|
|
rec['cur'] = 0
|
|
rec['max'] = 0
|
|
return(rec)
|
|
|
|
def new_addr():
|
|
rec = {}
|
|
rec['func'] = 0 # Where allocated, may not be same as where free'd!
|
|
rec['size'] = 0
|
|
return(rec)
|
|
|
|
for line in fileinput.input():
|
|
|
|
if ((line.startswith("MALLOC:")) or (line.startswith("CALLOC:"))):
|
|
if (line.startswith("MALLOC:")):
|
|
words = line.translate( str.maketrans("()", " ") ).strip().split()
|
|
func = words[1]
|
|
addr = words[2]
|
|
size = int(words[3])
|
|
|
|
elif (line.startswith("CALLOC:")):
|
|
words = line.translate( str.maketrans("(,)", " ") ).strip().split()
|
|
func = words[1]
|
|
addr = words[2]
|
|
size = int(words[3]) * int(words[4])
|
|
|
|
#print("Alloc: {} to {} in {}".format(size, addr, func))
|
|
if (not (func in by_func)): by_func[func] = new_func()
|
|
data = by_func[func]
|
|
data['cur'] += size
|
|
if (data['cur'] > data['max']):
|
|
data['max'] = data['cur']
|
|
if (addr in by_addr):
|
|
print("Error: duplicate allocation to {} in {}".format(addr, func))
|
|
else:
|
|
by_addr[addr] = new_addr()
|
|
by_addr[addr]['func'] = func
|
|
by_addr[addr]['size'] = size
|
|
|
|
elif (line.startswith("FREE:")):
|
|
words = line.translate( str.maketrans("(,)", " ") ).strip().split()
|
|
func = words[1]
|
|
addr = words[2]
|
|
if (addr in by_addr):
|
|
func_a = by_addr[addr]['func']
|
|
by_func[func_a]['cur'] -= by_addr[addr]['size']
|
|
del(by_addr[addr])
|
|
else:
|
|
print("Error: free of unallocated location {} in {}".format(addr, func))
|
|
#print("Free: {}:{} in {} to {}".format(func_a, addr, func, by_func[func_a]['cur']))
|
|
|
|
#####
|
|
total = 0
|
|
for func, sum in by_func.items():
|
|
max = by_func[func]['max']
|
|
print("{} = {}".format(func, max))
|
|
total += max
|
|
print("Total = {}".format(total))
|