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