[pypy-svn] r60087 - pypy/build/benchmem
hpk at codespeak.net
hpk at codespeak.net
Sun Nov 23 05:36:03 CET 2008
Author: hpk
Date: Sun Nov 23 05:36:00 2008
New Revision: 60087
Modified:
pypy/build/benchmem/report.py
Log:
generate ReST tables with title, using table-directive
Modified: pypy/build/benchmem/report.py
==============================================================================
--- pypy/build/benchmem/report.py (original)
+++ pypy/build/benchmem/report.py Sun Nov 23 05:36:00 2008
@@ -42,7 +42,7 @@
lines.append(" ".join(line))
return "\n".join(lines)
-def ReSTtable(table):
+def ReSTtable(title, table):
colmax = getmax(table)
lines = []
l = ["-" * width for width in colmax]
@@ -60,7 +60,9 @@
lines.append(sepline)
else:
lines.append(sepline)
- return "\n".join(lines)
+ linesep = "\n "
+ start = ".. table:: %s\n" %(title,)
+ return start + linesep + linesep.join(lines)
def maxtable_overview(resultset):
tw = py.io.TerminalWriter()
@@ -81,7 +83,7 @@
def __init__(self, resultset):
self.resultset = resultset.filter(benchtype=self.benchtype)
- def getexecutables(self, unique=True, short=True):
+ def getexecutables(self, unique=True, short=True, pythonfirst=True):
executables = []
for result in self.resultset.results:
if short:
@@ -89,7 +91,11 @@
else:
name = str(result.executable)
if not unique or name not in executables:
- executables.append(name)
+ if pythonfirst and name.startswith("python"):
+ executables.insert(0, name)
+ pythonfirst = False
+ else:
+ executables.append(name)
return executables
class CheckpointDetails(ReporterBase):
@@ -124,7 +130,7 @@
def run_rest(self, filename="table-objsize.txt"):
rows = self.gettable()
p = py.path.local(filename)
- p.write(str(ReSTtable(rows)))
+ p.write(ReSTtable("Memory usage of single Python objects",rows))
print "wrote", p
def gettable(self):
@@ -305,16 +311,13 @@
row.append("**%0.2f**/%.02f" %
(timing['real'], timing['user'])) #, timing['sys']))
rows.append(row)
- p.write(str(ReSTtable(rows)))
+ p.write(ReSTtable("Interpreter startup time", rows))
print "wrote", p
class BenchTimeOfInterpreters(ReporterBase):
benchtype = "benchtime"
- def getexecutables(self):
- return [r.executable for r in self.resultset.results]
-
def run_text(self):
tw = py.io.TerminalWriter()
tw.sep("=", "Timed benchmarks")
@@ -324,32 +327,39 @@
def run_rest(self, filename="table-benchtime.txt"):
p = py.path.local(filename)
rows = self.generate_table()
- p.write(str(ReSTtable(rows)))
+ p.write(ReSTtable("Popular speed benchmarks", rows))
print "wrote", p
def generate_table(self):
- executables = self.getexecutables()
- row0 = "Interpreter Benchmark Performance usertime Ratio".split()
- rows = [row0]
+
# result.mintimings -> [(name, timings_dict)]
- names = [x[0] for x in self.resultset.results[0].mintimings]
- reference = {}
- for selectname in names:
- for result in self.resultset.results:
- for name, timing in result.mintimings:
- if name == selectname and "python" in result.executable:
- reference[name] = timing['perf']
- for selectname in names:
- for result in self.resultset.results:
- for name, timing in result.mintimings:
- if name == selectname:
- rows.append([result.executable_short, name,
- "%.2f" % (timing['perf'], ), timing['user'],
- "%.2f" % (timing['perf'] / reference[name], )])
- rows.append([])
- return rows
+ # order by name
+ benchname2executable2mintimings = {}
+ for result in self.resultset.results:
+ for name,mintimings in result.mintimings:
+ d = benchname2executable2mintimings.setdefault(name, {})
+ assert result.executable_short not in d
+ d[result.executable_short] = mintimings
+ benchnames = benchname2executable2mintimings.keys()
+ benchnames.sort()
+ executables = self.getexecutables(pythonfirst=True)
+ row0 = ["name"] + executables
+ rows = [row0]
+
+ for name in benchnames:
+ row = [name]
+ reference = None
+ for executable in row0[1:]:
+ timing = benchname2executable2mintimings[name][executable]
+ perf = timing['perf']
+ if reference is None:
+ reference = perf
+ cell = "**%.2f** / %d" % (perf / reference, perf)
+ row.append(cell)
+ rows.append(row)
+ return rows
class Appprofiles(ReporterBase):
benchtype = "appprofiles"
@@ -375,7 +385,7 @@
def run_rest(self, filename="table-appprofiles.txt"):
p = py.path.local(filename)
rows = self.generate_table(True)
- p.write(str(ReSTtable(rows)))
+ p.write(ReSTtable("Application Benchmarks", rows))
print "wrote", p
@@ -449,7 +459,7 @@
def run_rest(self, filename="table-pauses.txt"):
p = py.path.local(filename)
rows = self.generate_table()
- p.write(str(ReSTtable(rows)))
+ p.write(ReSTtable("bytecode execution pauses", rows))
print "wrote", p
def run_text(self):
@@ -469,7 +479,6 @@
d = benchname2executable2result.setdefault(result.benchname, {})
assert result.executable_short not in d
d[result.executable_short] = result
-
benchnames = benchname2executable2result.keys()
benchnames.sort()
for benchname in benchnames:
More information about the Pypy-commit
mailing list