1*1831da28Slinjiaweiimport os 2*1831da28Slinjiaweiimport argparse 3*1831da28Slinjiawei 4*1831da28Slinjiaweidef printMap(mp): 5*1831da28Slinjiawei len_key = max(map(lambda s: len(s), mp.keys())) 6*1831da28Slinjiawei len_value = max(map(lambda v: len(str(v)), mp.values())) 7*1831da28Slinjiawei pattern = "{:<" +str(len_key) + "} {:<" +str(len_value)+ "} {:<7}%" 8*1831da28Slinjiawei total = sum(mp.values()) 9*1831da28Slinjiawei for k,v in sorted(mp.items(), key=lambda x:x[1], reverse=True): 10*1831da28Slinjiawei print( 11*1831da28Slinjiawei pattern.format(k, v, round(v*100.0/total, 3)) 12*1831da28Slinjiawei ) 13*1831da28Slinjiawei 14*1831da28Slinjiawei 15*1831da28Slinjiaweidef analyzeVerilog(filename): 16cba8f453SLinJiawei mymap = {} 17cba8f453SLinJiawei last = "" 18*1831da28Slinjiawei with open(filename, "r") as f: 19cba8f453SLinJiawei line = f.readline() 20cba8f453SLinJiawei cnt = 0 21cba8f453SLinJiawei while(line): 22cba8f453SLinJiawei if "module " in line: 23cba8f453SLinJiawei if last!="" : 24cba8f453SLinJiawei mymap[last] = cnt 25*1831da28Slinjiawei last = line[7:-2] 26cba8f453SLinJiawei cnt = 1 27cba8f453SLinJiawei else: 28cba8f453SLinJiawei cnt = cnt + 1 29cba8f453SLinJiawei line = f.readline() 308a8250e2SLinJiawei mymap[last] = cnt 31*1831da28Slinjiawei printMap(mymap) 32*1831da28Slinjiawei 33*1831da28SlinjiaweilogLevels = ['ALL', 'DEBUG', 'INFO', 'WARN', 'ERROR'] 34*1831da28Slinjiawei 35*1831da28Slinjiaweidef listToStr(lst): 36*1831da28Slinjiawei acc = '' 37*1831da28Slinjiawei for l in lst: 38*1831da28Slinjiawei acc += '|' + str(l) if acc else str(l) 39*1831da28Slinjiawei return acc 40*1831da28Slinjiawei 41*1831da28Slinjiaweidef lineStrip(line): 42*1831da28Slinjiawei return line.replace('\n', '') 43*1831da28Slinjiawei 44*1831da28Slinjiaweidef getNumLogLines(filename, modules, ll=logLevels): 45*1831da28Slinjiawei cmd = "grep -E '\[({0}).*\]\[time=.*\] ({1}):' {2} | wc -l".format( 46*1831da28Slinjiawei listToStr(ll), 47*1831da28Slinjiawei listToStr(modules), 48*1831da28Slinjiawei filename 49*1831da28Slinjiawei ) 50*1831da28Slinjiawei res = os.popen(cmd) 51*1831da28Slinjiawei return int(lineStrip(res.readline()), 10) 52*1831da28Slinjiawei 53*1831da28Slinjiaweidef analyzeLog(filename): 54*1831da28Slinjiawei cmd = "grep -E '\[time=.*\]' {0} ".format(filename) + " | awk -F '(:)' {'print $1'} | awk {'print $NF'} | sort | uniq" 55*1831da28Slinjiawei res = os.popen(cmd) 56*1831da28Slinjiawei modules = list(map(lineStrip, res.readlines())) 57*1831da28Slinjiawei mymap = {} 58*1831da28Slinjiawei for m in modules: 59*1831da28Slinjiawei mymap[m] = getNumLogLines(filename, [m]) 60*1831da28Slinjiawei printMap(mymap) 61*1831da28Slinjiawei 62*1831da28Slinjiaweidef main(): 63*1831da28Slinjiawei parser = argparse.ArgumentParser() 64*1831da28Slinjiawei parser.add_argument("-v", "--verilogFile", help="verilog file path", type=str) 65*1831da28Slinjiawei parser.add_argument("-l", "--logFile", help="log file path", type=str) 66*1831da28Slinjiawei args = parser.parse_args() 67*1831da28Slinjiawei 68*1831da28Slinjiawei if args.verilogFile: 69*1831da28Slinjiawei analyzeVerilog(args.verilogFile) 70*1831da28Slinjiawei 71*1831da28Slinjiawei if args.logFile: 72*1831da28Slinjiawei analyzeLog(args.logFile) 73*1831da28Slinjiawei 74*1831da28Slinjiawei if not args.verilogFile and not args.logFile: 75*1831da28Slinjiawei parser.print_help() 76*1831da28Slinjiawei 77*1831da28Slinjiaweiif __name__ == '__main__': 78*1831da28Slinjiawei main() 79*1831da28Slinjiawei 80