xref: /aosp_15_r20/external/clang/utils/analyzer/SumTimerInfo.py (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li#!/usr/bin/env python
2*67e74705SXin Li
3*67e74705SXin Li"""
4*67e74705SXin LiScript to Summarize statistics in the scan-build output.
5*67e74705SXin Li
6*67e74705SXin LiStatistics are enabled by passing '-internal-stats' option to scan-build
7*67e74705SXin Li(or '-analyzer-stats' to the analyzer).
8*67e74705SXin Li
9*67e74705SXin Li"""
10*67e74705SXin Li
11*67e74705SXin Liimport string
12*67e74705SXin Lifrom operator import itemgetter
13*67e74705SXin Liimport sys
14*67e74705SXin Li
15*67e74705SXin Liif __name__ == '__main__':
16*67e74705SXin Li    if len(sys.argv) < 2:
17*67e74705SXin Li        print >> sys.stderr, 'Usage: ', sys.argv[0],\
18*67e74705SXin Li                             'scan_build_output_file'
19*67e74705SXin Li        sys.exit(-1)
20*67e74705SXin Li
21*67e74705SXin Li    f = open(sys.argv[1], 'r')
22*67e74705SXin Li    Time = 0.0
23*67e74705SXin Li    TotalTime = 0.0
24*67e74705SXin Li    MaxTime = 0.0
25*67e74705SXin Li    Warnings = 0
26*67e74705SXin Li    Count = 0
27*67e74705SXin Li    FunctionsAnalyzed = 0
28*67e74705SXin Li    ReachableBlocks = 0
29*67e74705SXin Li    ReachedMaxSteps = 0
30*67e74705SXin Li    NumSteps = 0
31*67e74705SXin Li    NumInlinedCallSites = 0
32*67e74705SXin Li    NumBifurcatedCallSites = 0
33*67e74705SXin Li    MaxCFGSize = 0
34*67e74705SXin Li    Mode = 1
35*67e74705SXin Li    for line in f:
36*67e74705SXin Li        if ("Miscellaneous Ungrouped Timers" in line) :
37*67e74705SXin Li          Mode = 1
38*67e74705SXin Li        if (("Analyzer Total Time" in line) and (Mode == 1)) :
39*67e74705SXin Li          s = line.split()
40*67e74705SXin Li          Time = Time + float(s[6])
41*67e74705SXin Li          Count = Count + 1
42*67e74705SXin Li          if (float(s[6]) > MaxTime) :
43*67e74705SXin Li            MaxTime = float(s[6])
44*67e74705SXin Li        if ((("warning generated." in line) or ("warnings generated" in line)) and Mode == 1) :
45*67e74705SXin Li          s = line.split()
46*67e74705SXin Li          Warnings = Warnings + int(s[0])
47*67e74705SXin Li        if (("The # of functions analysed (as top level)" in line) and (Mode == 1)) :
48*67e74705SXin Li          s = line.split()
49*67e74705SXin Li          FunctionsAnalyzed = FunctionsAnalyzed + int(s[0])
50*67e74705SXin Li        if (("The % of reachable basic blocks" in line) and (Mode == 1)) :
51*67e74705SXin Li          s = line.split()
52*67e74705SXin Li          ReachableBlocks = ReachableBlocks + int(s[0])
53*67e74705SXin Li        if (("The # of times we reached the max number of steps" in line) and (Mode == 1)) :
54*67e74705SXin Li          s = line.split()
55*67e74705SXin Li          ReachedMaxSteps = ReachedMaxSteps + int(s[0])
56*67e74705SXin Li        if (("The maximum number of basic blocks in a function" in line) and (Mode == 1)) :
57*67e74705SXin Li          s = line.split()
58*67e74705SXin Li          if (MaxCFGSize < int(s[0])) :
59*67e74705SXin Li            MaxCFGSize = int(s[0])
60*67e74705SXin Li        if (("The # of steps executed" in line) and (Mode == 1)) :
61*67e74705SXin Li          s = line.split()
62*67e74705SXin Li          NumSteps = NumSteps + int(s[0])
63*67e74705SXin Li        if (("The # of times we inlined a call" in line) and (Mode == 1)) :
64*67e74705SXin Li          s = line.split()
65*67e74705SXin Li          NumInlinedCallSites = NumInlinedCallSites + int(s[0])
66*67e74705SXin Li        if (("The # of times we split the path due to imprecise dynamic dispatch info" in line) and (Mode == 1)) :
67*67e74705SXin Li          s = line.split()
68*67e74705SXin Li          NumBifurcatedCallSites = NumBifurcatedCallSites + int(s[0])
69*67e74705SXin Li        if ((")  Total" in line) and (Mode == 1)) :
70*67e74705SXin Li          s = line.split()
71*67e74705SXin Li          TotalTime = TotalTime + float(s[6])
72*67e74705SXin Li
73*67e74705SXin Li    print "TU Count %d" % (Count)
74*67e74705SXin Li    print "Time %f" % (Time)
75*67e74705SXin Li    print "Warnings %d" % (Warnings)
76*67e74705SXin Li    print "Functions Analyzed %d" % (FunctionsAnalyzed)
77*67e74705SXin Li    print "Reachable Blocks %d" % (ReachableBlocks)
78*67e74705SXin Li    print "Reached Max Steps %d" % (ReachedMaxSteps)
79*67e74705SXin Li    print "Number of Steps %d" % (NumSteps)
80*67e74705SXin Li    print "Number of Inlined calls %d (bifurcated %d)" % (NumInlinedCallSites, NumBifurcatedCallSites)
81*67e74705SXin Li    print "MaxTime %f" % (MaxTime)
82*67e74705SXin Li    print "TotalTime %f" % (TotalTime)
83*67e74705SXin Li    print "Max CFG Size %d" % (MaxCFGSize)
84