[pypy-svn] r77444 - pypy/trunk/pypy/jit/tool

antocuni at codespeak.net antocuni at codespeak.net
Tue Sep 28 14:55:14 CEST 2010


Author: antocuni
Date: Tue Sep 28 14:55:13 2010
New Revision: 77444

Modified:
   pypy/trunk/pypy/jit/tool/loopviewer.py
Log:
add the possibility to print a summary of the operations contained in the loop



Modified: pypy/trunk/pypy/jit/tool/loopviewer.py
==============================================================================
--- pypy/trunk/pypy/jit/tool/loopviewer.py	(original)
+++ pypy/trunk/pypy/jit/tool/loopviewer.py	Tue Sep 28 14:55:13 2010
@@ -1,30 +1,48 @@
 #!/usr/bin/env python
-""" Usage: loopviewer.py [loopnum] loopfile
+"""
+Parse and display the traces produced by pypy-c-jit when PYPYLOG is set.
 """
 
 import autopath
 import py
 import sys
+import optparse
+from pprint import pprint
 from pypy.tool import logparser
 from pypy.jit.metainterp.test.oparser import parse
 from pypy.jit.metainterp.history import ConstInt
 from pypy.rpython.lltypesystem import llmemory, lltype
 
-def main(loopnum, loopfile):
+def main(loopfile, options):
+    print 'Loading loop:'
     log = logparser.parse_log_file(loopfile)
+    print
     loops = logparser.extract_category(log, "jit-log-opt-")
-    inp = loops[loopnum]
+    inp = loops[options.loopnum]
     loop = parse(inp, no_namespace=True)
-    loop.show()
+    if not options.quiet:
+        loop.show()
+    if options.summary:
+        print 'Summary:'
+        print_summary(loop.summary())
+
+def print_summary(summary):
+    keys = sorted(summary)
+    for key in keys:
+        print '%4d' % summary[key], key
 
 if __name__ == '__main__':
-    if len(sys.argv) == 2:
-        loopnum = -1
-        loopfile = sys.argv[1]
-    elif len(sys.argv) == 3:
-        loopnum = int(sys.argv[1])
-        loopfile = sys.argv[2]
-    else:
-        print __doc__
-        sys.exit(1)
-    main(loopnum, loopfile)
+    parser = optparse.OptionParser(usage="%prog loopfile [options]")
+    parser.add_option('-n', '--loopnum', dest='loopnum', default=-1, metavar='N', type=int,
+                      help='show the loop number N [default: last]')
+    parser.add_option('-s', '--summary', dest='summary', action='store_true', default=False,
+                      help='print a summary of the operations in the loop')
+    parser.add_option('-q', '--quiet', dest='quiet', action='store_true', default=False,
+                      help='do not show the graphical representation of the loop')
+    
+    options, args = parser.parse_args()
+    if len(args) != 1:
+        parser.print_help()
+        sys.exit(2)
+
+    main(args[0], options)



More information about the Pypy-commit mailing list