| # This script takes csvs produced by parse_logs.py and combines them |
| # into a single CSV file |
| |
| import ast |
| import csv |
| import sys |
| from collections import defaultdict |
| |
| assert len(sys.argv) == 3 |
| |
| RESULTS = defaultdict(dict) |
| |
| for side, f in zip(["static", "dynamic"], sys.argv[1:]): |
| with open(f) as f: |
| reader = csv.DictReader(f) |
| for row in reader: |
| RESULTS[(row["bench"], row["name"])][side] = row |
| |
| fields = ["frame_time", "graph_breaks"] |
| |
| out = csv.DictWriter( |
| sys.stdout, |
| ["bench", "name"] + [f"delta_{n}" for n in fields] + ["static_url", "dynamic_url"], |
| dialect="excel", |
| ) |
| out.writeheader() |
| |
| for (bench, name), sides in RESULTS.items(): |
| if "static" not in sides: |
| continue |
| if "dynamic" not in sides: |
| continue |
| if not name: |
| out.writerow( |
| { |
| "static_url": sides["static"]["explain"], |
| "dynamic_url": sides["dynamic"]["explain"], |
| } |
| ) |
| continue |
| row = {"bench": bench, "name": name} |
| for f in fields: |
| try: |
| static = ast.literal_eval(sides["static"][f]) |
| dynamic = ast.literal_eval(sides["dynamic"][f]) |
| except SyntaxError: |
| continue |
| row[f"delta_{f}"] = dynamic - static |
| out.writerow(row) |