[pypy-svn] r58425 - pypy/build/benchmem

hpk at codespeak.net hpk at codespeak.net
Thu Sep 25 12:18:51 CEST 2008


Author: hpk
Date: Thu Sep 25 12:18:51 2008
New Revision: 58425

Modified:
   pypy/build/benchmem/report.py
Log:
unscramble code a bit (but gnuplot still doesnt produce results for me)



Modified: pypy/build/benchmem/report.py
==============================================================================
--- pypy/build/benchmem/report.py	(original)
+++ pypy/build/benchmem/report.py	Thu Sep 25 12:18:51 2008
@@ -42,54 +42,66 @@
                         ])
         tw.line(asciitable(rows))
 
-def _process_rows(reader, starthook, endhook):
-    for name, results in reader.name2results.items():
-        starthook(name)
-        row0 = ["num"] + [result.executable for result in results]
-       
-        numsnapshosts = len(results[0].snapshots)
-        rows = [row0]
-        for i in range(numsnapshosts):
-            row = [i]
-            for result in results:
-                row.append(result.snapshots[i].private)
-            rows.append(row)
-        endhook(rows)
-
-def checkpointdetails(reader):
-    tw = py.io.TerminalWriter()
-    def starthook(name):
-        tw.sep("=", "private RSS at checkpoints: %s" %(name,))
-    _process_rows(reader, starthook, lambda rows: tw.line(asciitable(rows)))
-
-def gnuplot_output(reader):
-    output = []
-    pythons = []
-
-    def endhook(rows):
-        if not pythons:
-            pythons.extend(rows[0][1:])
-        output.append(rows[2][1:])
-    
-    _process_rows(reader, lambda name : None, endhook)
-    runbench.mydir.join("gnuplotdata").write(
-        "\n".join([" ".join([str(j) for j in i]) for i in output]))
-    
-    def new_cmd(num, name):
-        s = ("plot 'gnuplotdata' using ($%d) with histograms title '%s'" %
-             (num + 1,name))
-        if num > 0:
-            s = "re" + s
-        return s
-
-    plotcmds = "\n".join([new_cmd(i, name) for i, name in enumerate(pythons)])
-    runbench.mydir.join("gnuplotcmd").write(
-        """set terminal postscript color
-        set output 'output.ps'
-        %s
-        """ % plotcmds
-     )
-    os.system("gnuplot gnuplotcmd")
+class TableReporter:
+    def __init__(self, reader):
+        self.reader = reader 
+
+    begin = report = end = lambda x: None  # hooks
+
+    def run(self):
+        self.begin()
+        for name, results in reader.name2results.items():
+            row0 = ["num"] + [result.executable for result in results]
+            numsnapshosts = len(results[0].snapshots)
+            rows = [row0]
+            for i in range(numsnapshosts):
+                row = [i]
+                for result in results:
+                    row.append(result.snapshots[i].private)
+                rows.append(row)
+            self.report(name, rows)
+        self.end()
+
+class CheckpointDetails(TableReporter):
+    def begin(self):
+        self.tw = py.io.TerminalWriter()
+
+    def report(self, name, rows):
+        self.tw.sep("=", "private RSS at checkpoints: %s" %(name,))
+        self.tw.line(asciitable(rows))
+
+class Gnuplot(TableReporter):
+    def begin(self):
+        self.output = []
+        self.pythons = []
+
+    def report(self, name, rows):
+        if not self.pythons:
+            self.pythons.extend(rows[0][1:])
+        self.output.append(rows[2][1:])
+   
+    def end(self):
+        pythons = self.pythons
+        output = self.output
+        
+        runbench.mydir.join("gnuplotdata").write(
+            "\n".join([" ".join([str(j) for j in i]) for i in output]))
+        
+        def new_cmd(num, name):
+            s = ("plot 'gnuplotdata' using ($%d) with histograms title '%s'" %
+                 (num + 1,name))
+            if num > 0:
+                s = "re" + s
+            return s
+
+        plotcmds = "\n".join([new_cmd(i, name) for i, name in enumerate(pythons)])
+        runbench.mydir.join("gnuplotcmd").write(
+            """set terminal postscript color
+            set output 'output.ps'
+            %s
+            """ % plotcmds
+         )
+        os.system("gnuplot gnuplotcmd")
 
 if __name__ == "__main__":
     options, args = parser.parse_args()
@@ -99,8 +111,8 @@
     reader.parse(benchlog)
 
     #maxtable_overview(reader)
-    checkpointdetails(reader)
-    gnuplot_output(reader)
+    CheckpointDetails(reader).run()
+    Gnuplot(reader).run()
 
     #for name, results in reader.name2results.items():
     #    tw.sep("=", name)



More information about the Pypy-commit mailing list