Skip to content

Commit 6f467cd

Browse files
8295934: IGV: keep node selection when changing view or graph
Reviewed-by: thartmann, rcastanedalo
1 parent 9adb728 commit 6f467cd

File tree

17 files changed

+509
-385
lines changed

17 files changed

+509
-385
lines changed

src/utils/IdealGraphVisualizer/Bytecodes/src/main/java/com/sun/hotspot/igv/bytecodes/SelectBytecodesAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ protected void performAction(Node[] activatedNodes) {
4242
InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);
4343
if (p != null) {
4444
p.clearSelectedNodes();
45-
p.addSelectedNodes(c.getNodes());
45+
p.addSelectedNodes(c.getNodes(), true);
46+
p.centerSelectedNodes();
4647
}
4748
}
4849

src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowScene.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ public void setGraph(InputGraph g) {
9999
removeEdge(e);
100100
}
101101

102+
edgeLayer.removeChildren();
103+
mainLayer.removeChildren();
104+
102105
for (InputBlock b : g.getBlocks()) {
103106
addNode(b);
104107
}
@@ -118,33 +121,34 @@ public void setGraph(InputGraph g) {
118121
validate();
119122
}
120123

121-
public void clearSelection() {
124+
private void clearSelection() {
122125
for (BlockWidget w : selection) {
123126
w.setState(w.getState().deriveSelected(false));
124127
}
125128
selection.clear();
126129
selectionChanged();
127130
}
128131

129-
public void selectionChanged() {
132+
private void selectionChanged() {
130133
InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);
131134
if (p != null) {
132135
Set<InputNode> inputNodes = new HashSet<>();
133136
for (BlockWidget w : selection) {
134137
inputNodes.addAll(w.getBlock().getNodes());
135138
}
136139
p.clearSelectedNodes();
137-
p.addSelectedNodes(inputNodes);
140+
p.addSelectedNodes(inputNodes, true);
141+
p.centerSelectedNodes();
138142
}
139143
}
140144

141-
public void addToSelection(BlockWidget widget) {
145+
private void addToSelection(BlockWidget widget) {
142146
widget.setState(widget.getState().deriveSelected(true));
143147
selection.add(widget);
144148
selectionChanged();
145149
}
146150

147-
public void removeFromSelection(BlockWidget widget) {
151+
private void removeFromSelection(BlockWidget widget) {
148152
widget.setState(widget.getState().deriveSelected(false));
149153
selection.remove(widget);
150154
selectionChanged();

src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.sun.hotspot.igv.util.LookupHistory;
3030
import java.awt.BorderLayout;
3131
import javax.swing.JScrollPane;
32+
import javax.swing.SwingUtilities;
3233
import org.openide.ErrorManager;
3334
import org.openide.util.NbBundle;
3435
import org.openide.windows.TopComponent;
@@ -102,14 +103,16 @@ public void componentClosed() {
102103

103104
@Override
104105
public void changed(InputGraphProvider lastProvider) {
105-
if (lastProvider != null) {
106-
InputGraph graph = lastProvider.getGraph();
107-
if (graph != null) {
108-
scene.setGraph(graph);
109-
return;
106+
SwingUtilities.invokeLater(() -> {
107+
if (lastProvider != null) {
108+
InputGraph graph = lastProvider.getGraph();
109+
if (graph != null) {
110+
scene.setGraph(graph);
111+
return;
112+
}
110113
}
111-
}
112-
scene.setGraph(new InputGraph(""));
114+
scene.setGraph(new InputGraph(""));
115+
});
113116
}
114117

115118
@Override

src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/InputGraph.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,12 @@ public String getDisplayName() {
255255
}
256256

257257
public int getIndex() {
258-
return getGroup().getGraphs().indexOf(this);
258+
Group group = getGroup();
259+
if (group != null) {
260+
return group.getGraphs().indexOf(this);
261+
} else {
262+
return -1;
263+
}
259264
}
260265

261266
public Collection<InputNode> getNodes() {

src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/InputGraphProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@ public interface InputGraphProvider {
3636

3737
InputGraph getGraph();
3838

39-
void addSelectedNodes(Collection<InputNode> nodes);
39+
void centerSelectedNodes();
4040

41-
void clearSelectedNodes();
41+
void addSelectedNodes(Collection<InputNode> nodes, boolean showIfHidden);
4242

43+
void clearSelectedNodes();
4344

4445
/**
4546
* @return an iterator walking forward through the {@link InputGraph}s following the {@link #getGraph()}

src/utils/IdealGraphVisualizer/Graph/src/main/java/com/sun/hotspot/igv/graph/Diagram.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
*/
2424
package com.sun.hotspot.igv.graph;
2525

26-
import com.sun.hotspot.igv.data.*;
2726
import com.sun.hotspot.igv.data.Properties;
27+
import com.sun.hotspot.igv.data.*;
2828
import java.awt.Font;
2929
import java.util.*;
3030

@@ -268,4 +268,14 @@ public int compare(Figure a, Figure b) {
268268

269269
System.out.println("=============================================================");
270270
}
271+
272+
public Figure getRootFigure() {
273+
Properties.PropertySelector<Figure> selector = new Properties.PropertySelector<>(figures);
274+
Figure root = selector.selectSingle(new Properties.StringPropertyMatcher("name", "Root"));
275+
if (root == null) {
276+
root = selector.selectSingle(new Properties.StringPropertyMatcher("name", "Start"));
277+
}
278+
return root;
279+
}
280+
271281
}

src/utils/IdealGraphVisualizer/Util/src/main/java/com/sun/hotspot/igv/util/RangeSliderModel.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel>
4545
private int secondPosition;
4646
private List<Color> colors;
4747

48-
public RangeSliderModel(List<String> positions) {
49-
assert positions.size() > 0;
50-
this.changedEvent = new ChangedEvent<>(this);
51-
this.colorChangedEvent = new ChangedEvent<>(this);
52-
setPositions(positions);
48+
public RangeSliderModel() {
49+
changedEvent = new ChangedEvent<>(this);
50+
colorChangedEvent = new ChangedEvent<>(this);
51+
positions = new ArrayList<>();
52+
colors = new ArrayList<>();
5353
}
5454

5555
protected void setPositions(List<String> positions) {
@@ -88,10 +88,12 @@ public int getSecondPosition() {
8888
public void setPositions(int fp, int sp) {
8989
assert fp >= 0 && fp < positions.size();
9090
assert sp >= 0 && sp < positions.size();
91-
firstPosition = fp;
92-
secondPosition = sp;
93-
ensureOrder();
94-
changedEvent.fire();
91+
if (firstPosition != fp || secondPosition != sp) {
92+
firstPosition = fp;
93+
secondPosition = sp;
94+
ensureOrder();
95+
changedEvent.fire();
96+
}
9597
}
9698

9799
private void ensureOrder() {

src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/BlockQuickSearch.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public void evaluate(SearchRequest request, SearchResponse response) {
9494
}
9595
editor.clearSelectedNodes();
9696
editor.addSelectedNodes(b.getNodes(), true);
97+
editor.centerSelectedNodes();
9798
editor.requestActive();
9899
},
99100
"B" + b.getName() + (theGraph != null ? " in " + theGraph.getName() : ""))) {

0 commit comments

Comments
 (0)