From 5cc64cc27a58e824a6b0e5a331e30544847f50d8 Mon Sep 17 00:00:00 2001 From: Emmy Date: Tue, 29 Aug 2023 09:52:41 +0000 Subject: [PATCH] 8309463: IGV: Dynamic graph layout algorithm Reviewed-by: tholenstein, rcastanedalo, chagedorn --- .../com/sun/hotspot/igv/graph/Figure.java | 13 + .../hotspot/igv/graph/FigureConnection.java | 12 + .../HierarchicalLayout/pom.xml | 7 +- .../HierarchicalLayoutManager.java | 119 +- .../HierarchicalStableLayoutManager.java | 1471 +++++++++++++++++ .../igv/hierarchicallayout/LayoutEdge.java | 44 + .../igv/hierarchicallayout/LayoutNode.java | 53 + .../sun/hotspot/igv/settings/Settings.java | 3 +- .../com/sun/hotspot/igv/util/Statistics.java | 40 + .../sun/hotspot/igv/view/DiagramScene.java | 17 +- .../hotspot/igv/view/DiagramViewModel.java | 13 + .../hotspot/igv/view/EditorTopComponent.java | 16 + .../actions/EnableStableSeaLayoutAction.java | 49 + .../hotspot/igv/view/images/stable_sea.png | Bin 0 -> 2111 bytes 14 files changed, 1767 insertions(+), 90 deletions(-) create mode 100644 src/utils/IdealGraphVisualizer/HierarchicalLayout/src/main/java/com/sun/hotspot/igv/hierarchicallayout/HierarchicalStableLayoutManager.java create mode 100644 src/utils/IdealGraphVisualizer/HierarchicalLayout/src/main/java/com/sun/hotspot/igv/hierarchicallayout/LayoutEdge.java create mode 100644 src/utils/IdealGraphVisualizer/HierarchicalLayout/src/main/java/com/sun/hotspot/igv/hierarchicallayout/LayoutNode.java create mode 100644 src/utils/IdealGraphVisualizer/Util/src/main/java/com/sun/hotspot/igv/util/Statistics.java create mode 100644 src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/actions/EnableStableSeaLayoutAction.java create mode 100644 src/utils/IdealGraphVisualizer/View/src/main/resources/com/sun/hotspot/igv/view/images/stable_sea.png diff --git a/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/Figure.java b/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/Figure.java index 9cc917dedcf..f02b4657cea 100644 --- a/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/Figure.java +++ b/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/Figure.java @@ -384,6 +384,19 @@ public class Figure extends Properties.Entity implements Vertex { return new Dimension(width, height); } + @Override + public boolean equals(Object o) { + if (!(o instanceof Figure)) { + return false; + } + return getInputNode().equals(((Figure) o).getInputNode()); + } + + @Override + public int hashCode() { + return getInputNode().hashCode(); + } + @Override public String toString() { return idString; diff --git a/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/FigureConnection.java b/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/FigureConnection.java index ac2c88f6913..186a6b63f17 100644 --- a/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/FigureConnection.java +++ b/src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/FigureConnection.java @@ -156,5 +156,17 @@ public class FigureConnection implements Connection { return true; } + @Override + public boolean equals(Object o) { + if (!(o instanceof FigureConnection)) { + return false; + } + + return getInputSlot().getFigure().equals(((FigureConnection)o).getInputSlot().getFigure()) + && getOutputSlot().getFigure().equals(((FigureConnection)o).getOutputSlot().getFigure()) + && getInputSlot().getPosition() == ((FigureConnection)o).getInputSlot().getPosition() + && getOutputSlot().getPosition() == ((FigureConnection) o).getOutputSlot().getPosition(); + } + } diff --git a/src/utils/IdealGraphVisualizer/HierarchicalLayout/pom.xml b/src/utils/IdealGraphVisualizer/HierarchicalLayout/pom.xml index be9cb1d882f..4a99ff829d5 100644 --- a/src/utils/IdealGraphVisualizer/HierarchicalLayout/pom.xml +++ b/src/utils/IdealGraphVisualizer/HierarchicalLayout/pom.xml @@ -1,6 +1,6 @@