changeset 20048:8af4e7e0ac9f

Make IGV more robust when parsing block information
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Fri, 27 Mar 2015 14:09:21 +0100
parents 97dbe2c74073
children 1d52d1e08a75
files src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputBlock.java src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java
diffstat 2 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputBlock.java	Fri Mar 27 14:03:46 2015 +0100
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputBlock.java	Fri Mar 27 14:09:21 2015 +0100
@@ -88,12 +88,10 @@
     }
 
     public void addNode(int id) {
-        InputNode n = graph.getNode(id);
-        assert n != null;
-        graph.setBlock(n, this);
-        final InputNode node = graph.getNode(id);
+        InputNode node = graph.getNode(id);
         assert node != null;
         assert !nodes.contains(node) : "duplicate : " + node;
+        graph.setBlock(node, this);
         nodes.add(node);
     }
 
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java	Fri Mar 27 14:03:46 2015 +0100
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java	Fri Mar 27 14:09:21 2015 +0100
@@ -687,8 +687,17 @@
             int nodeCount = readInt();
             for (int j = 0; j < nodeCount; j++) {
                 int nodeId = readInt();
-                block.addNode(nodeId);
-                graph.getNode(nodeId).getProperties().setProperty("block", name);
+                if (nodeId < 0) {
+                    continue;
+                }
+                final Properties properties = graph.getNode(nodeId).getProperties();
+                final String oldBlock = properties.get("block");
+                if(oldBlock != null) {
+                    properties.setProperty("block", oldBlock + ", " + name);
+                } else {
+                    block.addNode(nodeId);
+                    properties.setProperty("block", name);
+                }
             }
             int edgeCount = readInt();
             for (int j = 0; j < edgeCount; j++) {