# HG changeset patch # User Andreas Woess # Date 1447187660 -3600 # Node ID a647534602a6b70deb64b9d96c2798d7e36e1e0e # Parent 9c1d40221bf91903bd8fa0c2cd5db923b9bc3165 minor debug code cleanup diff -r 9c1d40221bf9 -r a647534602a6 truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Debug.java --- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Debug.java Tue Nov 10 19:59:37 2015 +0100 +++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Debug.java Tue Nov 10 21:34:20 2015 +0100 @@ -28,20 +28,68 @@ import java.io.UnsupportedEncodingException; import java.nio.file.Paths; import java.util.Collection; +import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; import com.oracle.truffle.api.nodes.GraphPrintVisitor; +import com.oracle.truffle.api.object.DynamicObject; +import com.oracle.truffle.api.object.Property; import com.oracle.truffle.object.debug.GraphvizShapeVisitor; import com.oracle.truffle.object.debug.IGVShapeVisitor; import com.oracle.truffle.object.debug.JSONShapeVisitor; +import com.oracle.truffle.object.debug.ShapeProfiler; class Debug { private static Collection allShapes; - static void registerShape(ShapeImpl newShape) { + static void trackShape(ShapeImpl newShape) { allShapes.add(newShape); } + static void trackObject(DynamicObject obj) { + ShapeProfiler.getInstance().track(obj); + } + + static Iterable getAllShapes() { + return allShapes; + } + + static String dumpObject(DynamicObject object, int level, int levelStop) { + List properties = object.getShape().getPropertyListInternal(true); + StringBuilder sb = new StringBuilder(properties.size() * 10); + sb.append("{\n"); + for (Property property : properties) { + indent(sb, level + 1); + + sb.append(property.getKey()); + sb.append('[').append(property.getLocation()).append(']'); + Object value = property.get(object, false); + if (value instanceof DynamicObject) { + if (level < levelStop) { + value = dumpObject((DynamicObject) value, level + 1, levelStop); + } else { + value = value.toString(); + } + } + sb.append(": "); + sb.append(value); + if (property != properties.get(properties.size() - 1)) { + sb.append(","); + } + sb.append("\n"); + } + indent(sb, level); + sb.append("}"); + return sb.toString(); + } + + private static StringBuilder indent(StringBuilder sb, int level) { + for (int i = 0; i < level; i++) { + sb.append(' '); + } + return sb; + } + static { if (ObjectStorageOptions.DumpShapes) { allShapes = new ConcurrentLinkedQueue<>(); @@ -68,7 +116,7 @@ private void dumpDOT() throws FileNotFoundException, UnsupportedEncodingException { try (PrintWriter out = new PrintWriter(getOutputFile("dot"), "UTF-8")) { GraphvizShapeVisitor visitor = new GraphvizShapeVisitor(); - for (ShapeImpl shape : allShapes) { + for (ShapeImpl shape : getAllShapes()) { shape.accept(visitor); } out.println(visitor); @@ -79,7 +127,7 @@ try (PrintWriter out = new PrintWriter(getOutputFile("json"), "UTF-8")) { out.println("{\"shapes\": ["); boolean first = true; - for (ShapeImpl shape : allShapes) { + for (ShapeImpl shape : getAllShapes()) { if (!first) { out.println(","); } @@ -97,7 +145,7 @@ GraphPrintVisitor printer = new GraphPrintVisitor(); printer.beginGroup("shapes"); IGVShapeVisitor visitor = new IGVShapeVisitor(printer); - for (ShapeImpl shape : allShapes) { + for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { printer.beginGraph(DebugShapeVisitor.getId(shape)); shape.accept(visitor); @@ -105,7 +153,7 @@ } } printer.beginGraph("all shapes"); - for (ShapeImpl shape : allShapes) { + for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { shape.accept(visitor); } diff -r 9c1d40221bf9 -r a647534602a6 truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java --- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java Tue Nov 10 19:59:37 2015 +0100 +++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java Tue Nov 10 21:34:20 2015 +0100 @@ -29,8 +29,6 @@ import com.oracle.truffle.api.object.Property; import com.oracle.truffle.api.object.Shape; import com.oracle.truffle.object.Locations.ValueLocation; -import com.oracle.truffle.object.debug.ShapeProfiler; -import java.util.List; public abstract class DynamicObjectImpl extends DynamicObject implements Cloneable { private ShapeImpl shape; @@ -43,7 +41,7 @@ setShape(shape); if (ObjectStorageOptions.Profile) { - trackObject(this); + Debug.trackObject(this); } } @@ -207,39 +205,7 @@ } public String debugDump(int level, int levelStop) { - List properties = this.getShape().getPropertyListInternal(true); - StringBuilder sb = new StringBuilder(properties.size() * 10); - sb.append("{\n"); - for (Property property : properties) { - indent(sb, level + 1); - - sb.append(property.getKey()); - sb.append('[').append(property.getLocation()).append(']'); - Object value = property.get(this, false); - if (value instanceof DynamicObjectImpl) { - if (level < levelStop) { - value = ((DynamicObjectImpl) value).debugDump(level + 1, levelStop); - } else { - value = value.toString(); - } - } - sb.append(": "); - sb.append(value); - if (property != properties.get(properties.size() - 1)) { - sb.append(","); - } - sb.append("\n"); - } - indent(sb, level); - sb.append("}"); - return sb.toString(); - } - - private static StringBuilder indent(StringBuilder sb, int level) { - for (int i = 0; i < level; i++) { - sb.append(' '); - } - return sb; + return Debug.dumpObject(this, level, levelStop); } @Override @@ -333,10 +299,6 @@ return getShape().getLayout().getStrategy().updateShape(this); } - private static void trackObject(DynamicObject obj) { - ShapeProfiler.getInstance().track(obj); - } - @Override public final DynamicObject copy(Shape currentShape) { return cloneWithShape(currentShape); diff -r 9c1d40221bf9 -r a647534602a6 truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java --- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java Tue Nov 10 19:59:37 2015 +0100 +++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java Tue Nov 10 21:34:20 2015 +0100 @@ -154,7 +154,9 @@ this.extraData = objectType.createShapeData(this); shapeCount.inc(); - debugRegisterShape(this); + if (ObjectStorageOptions.DumpShapes) { + Debug.trackShape(this); + } } protected ShapeImpl(Layout layout, ShapeImpl parent, ObjectType operations, Object sharedData, PropertyMap propertyMap, Transition transition, Allocator allocator, int id) { @@ -1126,12 +1128,6 @@ } } - private static void debugRegisterShape(ShapeImpl newShape) { - if (ObjectStorageOptions.DumpShapes) { - Debug.registerShape(newShape); - } - } - /** * Match all filter. */