[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