compilation-bundle/dwarf-compilation.base/contrib/libdwarf/tsearch/scripts/comparator.py

127 lines
2.6 KiB
Python

#!/usr/bin/python3
# Tries to make sense of a group of timeing runs.
# From running a debug dwarfdump.
# David Anderson March 2013.
import sys
def myreadin(name):
l = []
try:
file = open(name,"r");
except IOError as message:
print(" File could not be opened:", message,file=sys.stderr)
sys.exit(1)
while(1):
try:
rec = file.readline()
except:
break
if len(rec) < 1:
break
line = rec.strip()
if len(line) < 1:
# Ignore empty lines
continue
l += [line]
#print("line ",line)
return l
def splitup(rec):
w = rec.split()
rest = ""
ct=2
while ct < len(w):
rest = rest + " " +w[ct]
ct += 1
return (len(w),float(w[0]),float(w[1]),rest)
def computebasename(n):
s = n.split("/")
v = len(s)
if v == 1:
return n
return s[v-1]
def absdiff(a,b):
if float(a) < float(b):
return float(b) - float(a)
return float(a) - float(b)
ct = 0
print( len(sys.argv))
if len(sys.argv) <= 1:
print("Nothing to do")
sys.exit(1)
argn = 1;
filenames=[]
files=[]
filelen=0;
minrtdiff = 1.0
minsizediff = 50
while argn < len(sys.argv):
name = sys.argv[argn]
if name == "-drt":
argn += 1
minrtdiff = float(sys.argv[argn])
argn += 1
continue
if name == "-dsz":
argn += 1
minsizediff = float(sys.argv[argn])
argn += 1
continue
print("argv[",argn,"] = ", name)
r = myreadin(name)
if filelen == 0:
filelen = len(r)
else:
if filelen != len(r):
print("file len mismatch",filelen, " vs ",len(r), " on ",name)
print(len(r))
basename = computebasename(name)
filenames += [basename]
files += [r]
argn += 1
print(len(files)," files read")
lnum=0
while lnum < filelen:
fnum = 0;
basell = 0
basernt = 0.0
basesz = 0.0
basedet = ""
basename = ""
linereport="n"
while fnum < len(filenames):
name = filenames[fnum]
#print(" line ",lnum," file ",name)
lines = files[fnum]
ll,rnt,sz,det = splitup(lines[lnum])
if fnum == 0:
basename = name
basell = ll
basernt = rnt
basesz = sz
basedet = det
else:
if det != basedet:
print("mismatch line ",lnum, "file ", basename, " vs ",name)
print basedet , " vs ", det
sys.exit(1)
rntdiff = absdiff(rnt,basernt)
szdiff = absdiff(basesz,sz)
if rntdiff < minrtdiff:
if szdiff < minsizediff:
fnum = fnum + 1
continue
if linereport == "n":
linereport = "y"
print " "
print basename, basernt, basesz,
print name, rnt,sz,det
fnum += 1
lnum += 1
sys.exit(0)