[ATOM-15781] Add statistics for individual passes.

This commit is contained in:
Cynthia Lin
2021-06-16 16:55:26 -07:00
committed by Cynthia Lin
parent 9720984c61
commit 4d9957d0c4
@@ -14,16 +14,17 @@ from genericpath import isdir
from argparse import ArgumentParser
import json
from pathlib import Path
import os
import time
# this allows us to add additional data if necessary, e.g. frame_test_timestamps.json
is_timestamp_file = lambda file: file.name.startswith('frame') and file.name.endswith('_timestamps.json')
ns_to_ms = lambda time: time / 1e6
def main(logs_dir):
count = 0
total = 0
maximum = 0
frame_count = 0
frame_time_total = 0
frame_time_max = 0
pass_stats = {}
print(f'Analyzing frame timestamp logs in {logs_dir}')
@@ -34,22 +35,38 @@ def main(logs_dir):
data = json.loads(file.read_text())
entries = data['ClassData']['timestampEntries']
timestamps = [entry['timestampResultInNanoseconds'] for entry in entries]
frame_time = sum(timestamps)
frame_time = 0
for entry in entries:
name = entry['passName']
time_ns = entry['timestampResultInNanoseconds']
pass_entry = pass_stats.get(name, {'max': 0, 'total': 0})
pass_entry['max'] = max(time_ns, pass_entry['max'])
pass_entry['total'] += time_ns
pass_stats[name] = pass_entry
frame_time += time_ns
frame_time_total += frame_time
frame_name = file.name.split('_')[0]
print(f'- Total time for frame {frame_name}: {ns_to_ms(frame_time)}ms')
maximum = max(maximum, frame_time)
total += frame_time
count += 1
frame_time_max = max(frame_time, frame_time_max)
frame_count += 1
if count < 1:
if frame_count < 1:
print(f'No logs were found in {base_dir}')
exit(1)
print(f'Avg. time across {count} frames: {ns_to_ms(total / count)}ms')
print(f'Max frame time: {ns_to_ms(maximum)}ms')
frame_avg = frame_time_total / frame_count
print(f'Avg time across {frame_count} frames: {ns_to_ms(frame_avg)}ms')
print(f'Max frame time: {ns_to_ms(frame_time_max)}ms')
print('Pass statistics:')
for name, stat in pass_stats.items():
avg_ms = ns_to_ms(stat['total'] / frame_count)
max_ms = ns_to_ms(stat['max'])
print(f'- {name}: {avg_ms}ms avg, {max_ms}ms max')
if __name__ == '__main__':
parser = ArgumentParser(description='Gathers statistics from a group of pass timestamp logs')