1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
import pylab
from xml.dom.minidom import parse, Node
import sys
import numpy as np
import shutil
import os
DPI = 75
def getText(nodelist):
rc = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc
def main(argv):
input_fname = sys.argv[1]
dom = parse(input_fname)
outdir = sys.argv[2]
res = dom.getElementsByTagName("results")[0]
tools = [e for e in res.childNodes if e.nodeType == Node.ELEMENT_NODE]
# get the pybindgen revno
pbg_env = dom.getElementsByTagName("environment")[0].getElementsByTagName("pybindgen")[0]
pbg_txt = getText(pbg_env.childNodes).split("\n")
for l in pbg_txt:
k, s, v = l.partition(':')
k = k.strip()
if k == 'revno':
v = v.strip()
revno = v
break
num_tests = len(tools[0].getElementsByTagName("test"))
shutil.rmtree(outdir, True)
os.mkdir(outdir)
shutil.copy2(input_fname, outdir)
figures = []
sizes = [float(t.getAttribute('module-file-size')) for t in tools]
labels= [t.tagName for t in tools]
ind = range(len(sizes))
pylab.bar(ind, sizes)
pylab.xticks([0.5+x for x in ind], labels)
pylab.title("Extension module file size (B)")
fname = "sizes.png"
pylab.savefig(os.path.join(outdir, fname), dpi=DPI)
figures.append(fname)
for t in range(num_tests):
pylab.figure()
labels = []
values = []
for x, tool in enumerate(tools):
labels.append(tool.tagName)
values.append(float(tool.getElementsByTagName("test")[t].getAttribute('time')))
ind = range(len(values))
pylab.bar(ind, values)
pylab.xticks([0.5+x for x in ind], labels)
desc = tools[0].getElementsByTagName("test")[t].getAttribute("description")
pylab.title(desc)
fname = "%s.png" % (desc)
pylab.savefig(os.path.join(outdir, fname), dpi=DPI)
figures.append(fname)
index_html = file("%s/index.html" % outdir, "wt")
print >> index_html, """
<html>
<head>
<title> PyBindGen Benchmarks </title>
</head>
<body>
<div>Details in the <a href=\"%s\">Raw XML file</a>.
<a href=\"http://bazaar.launchpad.net/~gjc/pybindgen/trunk/files/%s/benchmarks/\">Source files for the benchmarks</a>.
</div>
""" % (os.path.basename(input_fname), revno)
for fig in figures:
print >> index_html, """
<div>
<img src=\"%s\"/>
</div>
""" % (fig,)
print >> index_html, """
</body>
"""
index_html.close()
if __name__ == '__main__':
main(sys.argv)
|