diff options
Diffstat (limited to 'tools/parsebench.py')
-rwxr-xr-x | tools/parsebench.py | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/tools/parsebench.py b/tools/parsebench.py index 96c36d6..6897b57 100755 --- a/tools/parsebench.py +++ b/tools/parsebench.py @@ -10,8 +10,8 @@ import itertools def parse_one_line(line): row = line.rstrip().split(":") - assert row[0].startswith("mergeoutput.") - iteration = int(row[0][12:]) + assert row[0].startswith("bench-") + iteration = int(row[0][6:]) stage = row[2].strip() data = ast.literal_eval(row[3].strip()) return (iteration, stage, data) @@ -30,35 +30,63 @@ def main(): print "</body>" print "</html>" +scale = 0.25 + def parse_one_file(filename): lines = [parse_one_line(line) for line in open(filename)] iterations = itertools.groupby(lines, lambda x: x[0]) print "<h1>%s</h1>" % (filename,) print "<div>" - legend = [] + firsttime = True + + stageorderdict = {} + stageorder = [] + stages = {} + itemorder = {} + + for (i, iteration) in iterations: + for (_, stage, data) in iteration: + if stage not in stages: + stageorderdict[stage] = len(stageorderdict) + stageorder.append(stage) + stages[stage] = {} + itemorder[stage] = [] + for (item, useconds) in data: + if item not in stages[stage]: + itemorder[stage].append(item) + stages[stage][item] = len(stages[stage]) + + iterations = itertools.groupby(lines, lambda x: x[0]) for (i, iteration) in iterations: - print "<table><tr>" - for (stagen, (_, stage, data)) in enumerate(iteration): - if i == 0: - legend.append("<div><span>%s</span>" % (stage,)) + print >>sys.stderr, (i, iteration) + sys.stdout.write("<div style='margin-bottom: 1em;'>") + for (_, stage, data) in iteration: data = list(data) for (itemn, (item, useconds)) in enumerate(data): seconds = useconds / 1000000 - step = 50 / (len(data) - 1) - print "<td style='width: %dpx; padding: 0; background-color: hsl(%d, 90%%, %d%%);' title='%s:%s %d'>" % (seconds/4, stagen * 90, itemn * step + 40, stage, item, seconds) - if i == 0: - legend.append("<span style='background-color: hsl(%d, 90%%, %d%%);'>%s</span>" % (stagen * 90, itemn * step + 40, item)) + shades = stages[stage] + step = 50 / (len(shades) - 1) + shade = shades[item] + stagen = stageorderdict[stage] + print "<div class='element' style='display: inline-block; margin: 0; width: %dpx; padding: 0; background-color: hsl(%d, 90%%, %d%%);' title='%s:%s %d'>" % (int(seconds*scale), stagen * 90, shade * step + 40, stage, item, seconds) print " " - print "</td>" - if i == 0: - legend.append("</div>") - print "</tr></table>" + sys.stdout.write("</div>") + sys.stdout.write("</div>") print "</div>" print "<div style='height: 30px;'>" print "</div>" print "<div>" - for row in legend: - print row + + for stage in stageorder: + print "<div><span>%s</span>" % (stage,) + shades = stages[stage] + for item in itemorder[stage]: + shade = shades[item] + step = 50 / (len(shades) - 1) + + stagen = stageorderdict[stage] + print "<span style='background-color: hsl(%d, 90%%, %d%%);'>%s</span>" % (stagen * 90, shade * step + 40, item) + print "</div>" print "</div>" main() |