[pypy-svn] r59586 - pypy/build/benchmem
fijal at codespeak.net
fijal at codespeak.net
Fri Oct 31 00:57:55 CET 2008
Author: fijal
Date: Fri Oct 31 00:57:54 2008
New Revision: 59586
Modified:
pypy/build/benchmem/report_graphic.py
Log:
More support for drawing graphs (I think this is it for today)
Modified: pypy/build/benchmem/report_graphic.py
==============================================================================
--- pypy/build/benchmem/report_graphic.py (original)
+++ pypy/build/benchmem/report_graphic.py Fri Oct 31 00:57:54 2008
@@ -11,6 +11,7 @@
CODE = runbench.Mappings.CODE
DATA = runbench.Mappings.DATA
BASE = ''
+SHOW = False
def process_baseint_sizes(results):
lgt = len(results)
@@ -27,6 +28,9 @@
inv=True).
filter(group=HEAP, inv=True).private for result in
results])
+ return plot_baseint_sizes(heap_private, ip_code, ip_data, rest, results)
+
+def plot_basint_sizes(heap_private, ip_code, ip_data, rest, results):
# XXX add axes scaling
WIDTH = .1
p0 = pylab.bar(ind, heap_private, WIDTH, color='r')
@@ -38,25 +42,65 @@
pylab.legend([p0[0], p1[0], p2[0], p3[0]],
['heap private', 'ip code', 'ip data', 'rest'])
pylab.savefig(BASE + "base_size.ps")
+ if SHOW:
+ pylab.show()
return ip_code + ip_data + heap_private + rest
-#def process_objsizes(results):
-# for name, result in xxxx
+def process_objsizes(resultset):
+ def incremental_private(result):
+ return (result.snapshots[1].heap_private() -
+ result.snapshots[0].heap_private())
+
+ names = [name for name, _ in resultset.getname2results()]
+ results = resultset.getname2results()
+ benchresults = [[] for _ in range(len(results[0]))]
+ executables = [result.executable for result in results[0][1]]
+ for _, results in results:
+ for i, result in enumerate(results):
+ benchresults[i].append(incremental_private(result))
+ plot_objsizes(benchresults, names, executables)
-def main(filename):
- resultset = runbench.ResultSet()
- resultset.parse(py.path.local(filename))
- totals = process_baseint_sizes(resultset.filter(benchtype="basesize").
- results)
-# process_objsizes(resultset.filter(benchtype="objsize").results)
+
+def plot_objsizes(benchresults, names, executables):
+ # XXX implement saner colorization
+ colors = ['r', 'g', 'b', 'black', 'white', 'cyan', 'magenta', 'yellow'
+ 'purple', 'grey']
+ lgt = len(benchresults[0])
+ baseindices = numpy.array([float(i)/lgt for i in range(lgt)])
+ basewidth = (baseindices[1] - baseindices[0])
+ skip = (basewidth * .5) / len(benchresults)
+ bars = []
+ for i, benchresult in enumerate(benchresults):
+ bars.append(pylab.bar(baseindices + skip * i, benchresult, skip,
+ color=colors[i]))
+ # XXX I'm completely unsure how to make a reasonable
+ pylab.legend([bar[0] for bar in bars], executables)
+ pylab.savefig(BASE + "objsizes.ps")
+ if SHOW:
+ pylab.show()
+
+def process_appprofiles(resultset, totals):
+ pass
#for name, results in resultset.filter(benchtype="appprofiles").getname2results():
# for result in results:
# lgt = len(result.snapshots)
# x = [float(i)/lgt for i in range(lgt)]
# y = [snapshot.private for snapshot in result.snapshots]
- # title(name)
- # plot(x, y)
- # show()
+ # pylab.title(name)
+ # pylab.plot(x, y)
+ #
+ # if SHOW:
+ # pylab.show()
+
+
+def main(filename):
+ resultset = runbench.ResultSet()
+ resultset.parse(py.path.local(filename))
+ totals = process_baseint_sizes(resultset.filter(benchtype="basesize").
+ results)
+ process_objsizes(resultset.filter(benchtype="objsizes"))
+ process_appprofiles(resultset.filter(benchtype="appprofiles"),
+ totals)
if __name__ == '__main__':
if len(sys.argv) > 3:
More information about the Pypy-commit
mailing list