Author: Carl Friedrich Bolz <[email protected]>
Branch: extradoc
Changeset: r4328:2498bd7a2914
Date: 2012-07-23 14:58 +0200
http://bitbucket.org/pypy/extradoc/changeset/2498bd7a2914/

Log:    refactoring

diff --git a/talk/vmil2012/example/rdatasize.py 
b/talk/vmil2012/example/rdatasize.py
--- a/talk/vmil2012/example/rdatasize.py
+++ b/talk/vmil2012/example/rdatasize.py
@@ -1,61 +1,51 @@
 import sys
+from collections import defaultdict
 
 word_to_kib = 1024 / 4.
 
+def cond_incr(d, key, obj, seen, incr=1):
+    if obj not in seen:
+        seen.add(obj)
+        d[key] += incr
+    d["naive_" + key] += incr
+
 def main(argv):
     infile = argv[1]
     seen = set()
     seen_numbering = set()
     # all in words
-    num_storages = 0
-    num_snapshots = 0
-    naive_num_snapshots = 0
-    size_estimate_numbering = 0
-    naive_estimate_numbering = 0
-    optimal_numbering = 0
+    results = defaultdict(float)
     size_estimate_virtuals = 0
-    num_consts = 0
     naive_consts = 0
     with file(infile) as f:
         for line in f:
             if line.startswith("Log storage"):
-                num_storages += 1
+                results['num_storages'] += 1
                 continue
             if not line.startswith("\t"):
                 continue
             line = line[1:]
             if line.startswith("jitcode/pc"):
                 _, address = line.split(" at ")
-                if address not in seen:
-                    seen.add(address)
-                    num_snapshots += 1 # gc, jitcode, pc, prev
-                naive_num_snapshots += 1
+                cond_incr(results, "num_snapshots", address, seen)
             elif line.startswith("numb"):
                 content, address = line.split(" at ")
                 size =  line.count("(") / 2.0 + 3 # gc, len, prev
-                if content not in seen_numbering:
-                    seen_numbering.add(content)
-                    optimal_numbering += size
-                if address not in seen:
-                    seen.add(address)
-                    size_estimate_numbering += size
-                naive_estimate_numbering += size
+                cond_incr(results, "optimal_numbering", content, 
seen_numbering, size)
+                cond_incr(results, "size_estimate_numbering", address, seen, 
size)
             elif line.startswith("const "):
                 address, _ = line[len("const "):].split("/")
-                if address not in seen:
-                    seen.add(address)
-                    num_consts += 1
-                naive_consts += 1
-    kib_snapshots = num_snapshots * 4. / word_to_kib
-    naive_kib_snapshots = naive_num_snapshots * 4. / word_to_kib
-    kib_numbering = size_estimate_numbering / word_to_kib
-    naive_kib_numbering = naive_estimate_numbering / word_to_kib
-    kib_consts = num_consts * 4 / word_to_kib
-    naive_kib_consts = naive_consts * 4 / word_to_kib
-    print "storages:", num_storages
+                cond_incr(results, "num_consts", address, seen)
+    kib_snapshots = results['num_snapshots'] * 4. / word_to_kib # gc, jitcode, 
pc, prev
+    naive_kib_snapshots = results['naive_num_snapshots'] * 4. / word_to_kib
+    kib_numbering = results['size_estimate_numbering'] / word_to_kib
+    naive_kib_numbering = results['naive_size_estimate_numbering'] / 
word_to_kib
+    kib_consts = results['num_consts'] * 4 / word_to_kib
+    naive_kib_consts = results['naive_num_consts'] * 4 / word_to_kib
+    print "storages:", results['num_storages']
     print "snapshots: %sKiB vs %sKiB" % (kib_snapshots, naive_kib_snapshots)
     print "numberings: %sKiB vs %sKiB" % (kib_numbering, naive_kib_numbering)
-    print "optimal: %s" % (optimal_numbering / word_to_kib)
+    print "optimal: %s" % (results['optimal_numbering'] / word_to_kib)
     print "consts:  %sKiB vs %sKiB" % (kib_consts, naive_kib_consts)
     print "--"
     print "total:  %sKiB vs %sKiB" % (kib_snapshots+kib_numbering+kib_consts,
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to