[pypy-commit] lang-smalltalk storage: Fixed storage_logger.py for RPython, slightly improved dot-graph.

anton_gulenko noreply at buildbot.pypy.org
Mon Jul 7 13:16:26 CEST 2014


Author: Anton Gulenko <anton.gulenko at googlemail.com>
Branch: storage
Changeset: r859:519def1169d7
Date: 2014-07-01 16:51 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/519def1169d7/

Log:	Fixed storage_logger.py for RPython, slightly improved dot-graph.

diff --git a/spyvm/storage_logger.py b/spyvm/storage_logger.py
--- a/spyvm/storage_logger.py
+++ b/spyvm/storage_logger.py
@@ -1,5 +1,3 @@
-
-import sys
 
 # Put flags in an object to make it modifyable after compile time.
 class LoggerOptions(object):
@@ -63,7 +61,7 @@
 
 def binary_output(operation, old_storage, new_storage, classname, size):
     # Output a byte-coded log entry
-    bytes = bytearray()
+    bytes = [] # bytearray()
     
     # First 3 bytes: operation, old_storage, new_storage
     assert operation in operation_map, "Cannot handle operation %s" % operation
@@ -81,9 +79,14 @@
     bytes.append((size & mask) >> 8)
     
     # Next: classname string plus terminating null-character
+    i = 5
     if classname:
         for c in classname:
-            bytes.append(c)
+            bytes.append(ord(c))
+            i += 1
     bytes.append(0)
     
-    sys.stdout.write(bytes)
+    # No simpler way for RPython's sake.
+    import os
+    for b in bytes:
+        os.write(1, chr(b))
diff --git a/spyvm/tool/storagelog_parser.py b/spyvm/tool/storagelog_parser.py
--- a/spyvm/tool/storagelog_parser.py
+++ b/spyvm/tool/storagelog_parser.py
@@ -293,7 +293,7 @@
         return set(set_dict.values())
     
     def __add__(self, other):
-        result = StorageNode("%s_%s" % (self.name, other.name))
+        result = StorageNode("%s %s" % (self.name, other.name))
         result.incoming = self.merge_edge_sets(self.incoming, other.incoming, "origin")
         # TODO bullshit code
         for edge in result.incoming:
@@ -493,14 +493,17 @@
             incoming_cache[node.name] = incoming
             shape = ""
             label = "\nIncoming objects: %d" % incoming.objects
-            label += "\nIncoming elements: %d" % incoming.slots
-            if flags.percent and incoming.objects != 0:
-                percent_remaining_objects = " (%.1f%%)" % (remaining.objects * 100 / incoming.objects)
-                percent_remaining_slots = " (%.1f%%)" % (remaining.slots * 100 / incoming.slots)
+            label += "\nIncoming slots: %d" % incoming.slots
+            if remaining.objects == incoming.objects:
+                label += "\n(All remaining)"
             else:
-                percent_remaining_objects = percent_remaining_slots = ""
-            label += "\nRemaining objects: %d%s" % (remaining.objects, percent_remaining_objects)
-            label += "\nRemaining elements: %d%s" % (remaining.slots, percent_remaining_slots)
+                if flags.percent and incoming.objects != 0:
+                    percent_remaining_objects = " (%.1f%%)" % (remaining.objects * 100 / incoming.objects)
+                    percent_remaining_slots = " (%.1f%%)" % (remaining.slots * 100 / incoming.slots)
+                else:
+                    percent_remaining_objects = percent_remaining_slots = ""
+                label += "\nRemaining objects: %d%s" % (remaining.objects, percent_remaining_objects)
+                label += "\nRemaining slots: %d%s" % (remaining.slots, percent_remaining_slots)
         result += "%s [label=\"%s%s\"%s];" % (node.name.replace(" ", "_"), node.name, label, shape)
     
     for edge in graph.edges.values():
@@ -514,7 +517,7 @@
         
         target_node = edge.target.name.replace(" ", "_")
         source_node = edge.origin.name.replace(" ", "_")
-        result += "%s -> %s [label=\"%s\n%s\n%d slots per object\"];" % (source_node, target_node, str_objects, str_slots, total.slots / total.objects)
+        result += "%s -> %s [label=\"%s\n%s\n%.1f slots per object\"];" % (source_node, target_node, str_objects, str_slots, total.slots / total.objects)
     
     result += "}"
     return result


More information about the pypy-commit mailing list