[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