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

xoraxax at codespeak.net xoraxax at codespeak.net
Thu Nov 27 00:03:34 CET 2008


Author: xoraxax
Date: Thu Nov 27 00:03:34 2008
New Revision: 60172

Modified:
   pypy/build/benchmem/report.py
Log:
Generate smaller appprofiles table, rename share to sharable.

Modified: pypy/build/benchmem/report.py
==============================================================================
--- pypy/build/benchmem/report.py	(original)
+++ pypy/build/benchmem/report.py	Thu Nov 27 00:03:34 2008
@@ -279,7 +279,7 @@
         #        result.snapshot.filter(group=result.executable, kind=self.DATA).rss)
         # static data that is not shared with another process and was not modified by the process
         # can be easily shared with another process
-        makerow("IP-DATA share", lambda result:
+        makerow("IP-DATA sharable", lambda result:
                 result.snapshot.filter(group=result.executable, kind=self.DATA).shared_clean +
                 result.snapshot.filter(group=result.executable, kind=self.DATA).private_clean)
         #makerow("IP-DATA-private_clean", lambda result:
@@ -427,24 +427,16 @@
         self.full_resultset = resultset
         super(Appprofiles, self).__init__(resultset)
 
-    def getexecutables(self):
-        l = []
-        for r in self.resultset.results:
-            executable = r.executable_short
-            if executable not in l:
-                l.append(executable)
-        return l
-
     def run_text(self):
         tw = py.io.TerminalWriter()
         tw.sep("=", "Appprofiles memory sampling")
-        rows = self.generate_table()
+        rows = self.generate_large_table()
         tw.line(asciitable(rows))
 
     def run_rest(self, filename="table-appprofiles.txt"):
         p = py.path.local(filename)
-        rows = self.generate_table(True)
-        p.write(ReSTtable("Application Benchmarks", rows))
+        rows = self.generate_table()
+        p.write(ReSTtable("Application Benchmarks: Average and Maximum heap + dirty static data size", rows))
         print "wrote", p
 
 
@@ -455,11 +447,26 @@
         plotter.plot_appprofiles(name2result, snapshots) 
         plotter.plot_appprofiles(name2result, totals)
 
-    def generate_table(self, rest_table=False):
-        executables = self.getexecutables()
+    def generate_table(self):
+        executables = self.getexecutables(unique=True, short=True)
+        row0 = ["benchmark"] + [str(x) for x in executables]
+        rows = [row0]
+        name2results = self.resultset.getname2results()
+        name2results.sort()
+
+        for name, results in name2results:
+            row = [name]
+            for executable, result in zip(executables, results):
+                assert result.executable_short == executable, "ordering assumtion"
+                row.append("%.2f/**%s**" % (result.avg, result.max))
+            rows.append(row)
+        return rows
+
+
+    def generate_large_table(self):
+        executables = self.getexecutables(short=True)
         row0 = "interpreter benchmark duration #snapshots heapdata_min heapdata_avg heapdata_max"
-        if not rest_table:
-            row0 += "dirtyd_min dirtyd_avg dirtyd_max min_data avg_data max_data code_min code_avg code_max"
+        row0 += "dirtyd_min dirtyd_avg dirtyd_max min_data avg_data max_data code_min code_avg code_max"
         row0 = row0.split()
         rows = [row0]
         names = []
@@ -468,12 +475,11 @@
                 names.append(result.benchname)
         stats = {}
         attrs = ["min", "avg", "max"]
-        if not rest_table:
-            attrs.extend([
-                 "min_dirtied_data", "avg_dirtied_data", "max_dirtied_data",
-                 "min_data", "avg_data", "max_data",
-                 "min_code", "avg_code", "max_code",
-                 ])
+        attrs.extend([
+             "min_dirtied_data", "avg_dirtied_data", "max_dirtied_data",
+             "min_data", "avg_data", "max_data",
+             "min_code", "avg_code", "max_code",
+             ])
         for name in names:
             for result in self.resultset.results:
                 if name == result.benchname:
@@ -496,19 +502,19 @@
                         row.append(data_str)
 
                     rows.append(row)
-        if not rest_table:
-            for executable in executables:
-                for kind in (min, max):
-                    kindname = kind.__name__
-                    key = (executable, kind.__name__)
-                    row = [executable, kindname, "-", "-"]
-                    for attr in attrs:
-                        data = stats[key][attr]
-                        data_str = str(data)
-                        if "avg" in attr:
-                            data_str = "%.2f" % data
-                        row.append(data_str)
-                    rows.append(row)
+        # calculate min/max of every (interpreter, column) pair
+        for executable in executables:
+            for kind in (min, max):
+                kindname = kind.__name__
+                key = (executable, kind.__name__)
+                row = [executable, kindname, "-", "-"]
+                for attr in attrs:
+                    data = stats[key][attr]
+                    data_str = str(data)
+                    if "avg" in attr:
+                        data_str = "%.2f" % data
+                    row.append(data_str)
+                rows.append(row)
         return rows
 
 



More information about the Pypy-commit mailing list