1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env python
- """
- Script to Summarize statistics in the scan-build output.
- Statistics are enabled by passing '-internal-stats' option to scan-build
- (or '-analyzer-stats' to the analyzer).
- """
- import string
- from operator import itemgetter
- import sys
- if __name__ == '__main__':
- if len(sys.argv) < 2:
- print >> sys.stderr, 'Usage: ', sys.argv[0],\
- 'scan_build_output_file'
- sys.exit(-1)
- f = open(sys.argv[1], 'r')
- Time = 0.0
- TotalTime = 0.0
- MaxTime = 0.0
- Warnings = 0
- Count = 0
- FunctionsAnalyzed = 0
- ReachableBlocks = 0
- ReachedMaxSteps = 0
- NumSteps = 0
- NumInlinedCallSites = 0
- NumBifurcatedCallSites = 0
- MaxCFGSize = 0
- Mode = 1
- for line in f:
- if ("Miscellaneous Ungrouped Timers" in line) :
- Mode = 1
- if (("Analyzer Total Time" in line) and (Mode == 1)) :
- s = line.split()
- Time = Time + float(s[6])
- Count = Count + 1
- if (float(s[6]) > MaxTime) :
- MaxTime = float(s[6])
- if ((("warning generated." in line) or ("warnings generated" in line)) and Mode == 1) :
- s = line.split()
- Warnings = Warnings + int(s[0])
- if (("The # of functions analysed (as top level)" in line) and (Mode == 1)) :
- s = line.split()
- FunctionsAnalyzed = FunctionsAnalyzed + int(s[0])
- if (("The % of reachable basic blocks" in line) and (Mode == 1)) :
- s = line.split()
- ReachableBlocks = ReachableBlocks + int(s[0])
- if (("The # of times we reached the max number of steps" in line) and (Mode == 1)) :
- s = line.split()
- ReachedMaxSteps = ReachedMaxSteps + int(s[0])
- if (("The maximum number of basic blocks in a function" in line) and (Mode == 1)) :
- s = line.split()
- if (MaxCFGSize < int(s[0])) :
- MaxCFGSize = int(s[0])
- if (("The # of steps executed" in line) and (Mode == 1)) :
- s = line.split()
- NumSteps = NumSteps + int(s[0])
- if (("The # of times we inlined a call" in line) and (Mode == 1)) :
- s = line.split()
- NumInlinedCallSites = NumInlinedCallSites + int(s[0])
- if (("The # of times we split the path due to imprecise dynamic dispatch info" in line) and (Mode == 1)) :
- s = line.split()
- NumBifurcatedCallSites = NumBifurcatedCallSites + int(s[0])
- if ((") Total" in line) and (Mode == 1)) :
- s = line.split()
- TotalTime = TotalTime + float(s[6])
- print "TU Count %d" % (Count)
- print "Time %f" % (Time)
- print "Warnings %d" % (Warnings)
- print "Functions Analyzed %d" % (FunctionsAnalyzed)
- print "Reachable Blocks %d" % (ReachableBlocks)
- print "Reached Max Steps %d" % (ReachedMaxSteps)
- print "Number of Steps %d" % (NumSteps)
- print "Number of Inlined calls %d (bifurcated %d)" % (NumInlinedCallSites, NumBifurcatedCallSites)
- print "MaxTime %f" % (MaxTime)
- print "TotalTime %f" % (TotalTime)
- print "Max CFG Size %d" % (MaxCFGSize)
|