aboutsummaryrefslogtreecommitdiff
path: root/stm32/unittest/lib/python/sum_profiles.py
diff options
context:
space:
mode:
Diffstat (limited to 'stm32/unittest/lib/python/sum_profiles.py')
-rwxr-xr-xstm32/unittest/lib/python/sum_profiles.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/stm32/unittest/lib/python/sum_profiles.py b/stm32/unittest/lib/python/sum_profiles.py
new file mode 100755
index 0000000..19eea13
--- /dev/null
+++ b/stm32/unittest/lib/python/sum_profiles.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+""" sum_profiles """
+
+def sum_profiles(fin, frames):
+ data = {}
+ total_time = 0.0
+ active = False
+
+ for line in fin:
+ if (not active): active = line.startswith("Start Profile Data")
+ elif line.startswith("End Profile Data"): active = False
+ else:
+ words = line.strip().split()
+ if (len(words) == 3):
+ part = words[0]
+ time_str = words[1]
+ time = float(time_str)
+ total_time += time
+ if (not part in data): data[part] = 0.0
+ data[part] += time
+ # end else
+ # end for line
+
+ data_sorted = [(p, data[p]) for p in sorted(data, key=data.get, reverse=True)]
+
+ print("Total time = {:.1f} ms".format(total_time))
+ if (frames):
+ print("{:.1f} ms per frame".format(total_time / frames))
+ print("")
+
+ for part, time in data_sorted:
+ percent = int(100*(time / total_time))
+ print('{:2d}% - {:10.3f} - {}'.format(percent, time, part))
+
+ return(data)
+ # end sum_profiles()
+
+
+########################################
+if __name__ == "__main__":
+ import argparse
+
+ #### Options
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument("-f", "--frames", action="store", type=int, default=0,
+ help="Number of frames")
+ argparser.add_argument("file", metavar="FILE", help="file to read")
+ args = argparser.parse_args()
+
+ fin = open(args.file, "r")
+ sum_profiles(fin, args.frames)