1#!/usr/bin/env python3 2""" sum_profiles """ 3 4def sum_profiles(fin, frames): 5 data = {} 6 total_time = 0.0 7 active = False 8 9 for line in fin: 10 if (not active): active = line.startswith("Start Profile Data") 11 elif line.startswith("End Profile Data"): active = False 12 else: 13 words = line.strip().split() 14 if (len(words) == 3): 15 part = words[0] 16 time_str = words[1] 17 time = float(time_str) 18 total_time += time 19 if (not part in data): data[part] = 0.0 20 data[part] += time 21 # end else 22 # end for line 23 24 data_sorted = [(p, data[p]) for p in sorted(data, key=data.get, reverse=True)] 25 26 print("Total time = {:.1f} ms".format(total_time)) 27 if (frames): 28 print("{:.1f} ms per frame".format(total_time / frames)) 29 print("") 30 31 for part, time in data_sorted: 32 percent = int(100*(time / total_time)) 33 print('{:2d}% - {:10.3f} - {}'.format(percent, time, part)) 34 35 return(data) 36 # end sum_profiles() 37 38 39######################################## 40if __name__ == "__main__": 41 import argparse 42 43 #### Options 44 argparser = argparse.ArgumentParser() 45 argparser.add_argument("-f", "--frames", action="store", type=int, default=0, 46 help="Number of frames") 47 argparser.add_argument("file", metavar="FILE", help="file to read") 48 args = argparser.parse_args() 49 50 fin = open(args.file, "r") 51 sum_profiles(fin, args.frames) 52