Example script to print the profiling information
--HG-- branch : bgschaid/minorAdditionsBranch
This commit is contained in:
parent
5752fd65ba
commit
c2937515ba
1 changed files with 87 additions and 0 deletions
87
bin/listProfileInformation.py
Executable file
87
bin/listProfileInformation.py
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
#! /usr/bin/python
|
||||||
|
|
||||||
|
from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
|
||||||
|
import sys
|
||||||
|
|
||||||
|
pf=ParsedParameterFile(sys.argv[1],
|
||||||
|
treatBinaryAsASCII=True)
|
||||||
|
|
||||||
|
data={}
|
||||||
|
children={}
|
||||||
|
root=None
|
||||||
|
|
||||||
|
for p in pf["profilingInfo"]:
|
||||||
|
if p["id"] in data:
|
||||||
|
print "Duplicate definition of",p["id"]
|
||||||
|
sys.exit(-1)
|
||||||
|
data[p["id"]]=p
|
||||||
|
if "parentId" in p:
|
||||||
|
if p["parentId"] in children:
|
||||||
|
children[p["parentId"]].append(p["id"])
|
||||||
|
else:
|
||||||
|
children[p["parentId"]]=[p["id"]]
|
||||||
|
else:
|
||||||
|
if root!=None:
|
||||||
|
print "Two root elements"
|
||||||
|
sys-exit(-1)
|
||||||
|
else:
|
||||||
|
root=p["id"]
|
||||||
|
|
||||||
|
def depth(i):
|
||||||
|
if i in children:
|
||||||
|
return max([depth(j) for j in children[i]])+1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
#make sure that children are printed in the correct order
|
||||||
|
for i in children:
|
||||||
|
children[i].sort()
|
||||||
|
|
||||||
|
maxdepth=depth(root)
|
||||||
|
|
||||||
|
depths={}
|
||||||
|
|
||||||
|
def nameLen(i,d=0):
|
||||||
|
depths[i]=d
|
||||||
|
maxi=len(data[i]["description"])
|
||||||
|
if i in children:
|
||||||
|
maxi=max(maxi,max([nameLen(j,d+1) for j in children[i]]))
|
||||||
|
return maxi+2
|
||||||
|
|
||||||
|
maxLen=nameLen(root)
|
||||||
|
|
||||||
|
format=" %5.1f%% (%5.1f%%) - %5.1f%% | %8d %9.4gs %9.4gs"
|
||||||
|
totalTime=data[root]["totalTime"]
|
||||||
|
|
||||||
|
header=" "*(maxLen)+" | parent (total ) - self | calls total self "
|
||||||
|
print header
|
||||||
|
print "-"*len(header)
|
||||||
|
|
||||||
|
def printItem(i):
|
||||||
|
result=""
|
||||||
|
if depths[i]>1:
|
||||||
|
result+=" "*(depths[i]-1)
|
||||||
|
if depths[i]>0:
|
||||||
|
result+="|-"
|
||||||
|
result+=data[i]["description"]
|
||||||
|
result+=" "*(maxLen-len(result)+1)+"| "
|
||||||
|
|
||||||
|
parentTime=data[i]["totalTime"]
|
||||||
|
if "parentId" in data[i]:
|
||||||
|
parentTime=data[data[i]["parentId"]]["totalTime"]
|
||||||
|
|
||||||
|
tt=data[i]["totalTime"]
|
||||||
|
ct=data[i]["childTime"]
|
||||||
|
|
||||||
|
result+=format % (100*tt/parentTime,
|
||||||
|
100*(tt-ct)/totalTime,
|
||||||
|
100*(tt-ct)/tt,
|
||||||
|
data[i]["calls"],
|
||||||
|
tt,
|
||||||
|
tt-ct)
|
||||||
|
print result
|
||||||
|
if i in children:
|
||||||
|
for c in children[i]:
|
||||||
|
printItem(c)
|
||||||
|
|
||||||
|
printItem(root)
|
Reference in a new issue