# HG changeset patch # User Peter Hofer # Date 1310570453 -7200 # Node ID 064ebe531f9e3414707a0db94cd01a0b616f4687 # Parent 93b74afbd379fc34192e0410b1996826eafb9f83 IdealGraphVisualizer: modify RemoveFilter to optionally remove all nodes that became orphans as result of the remove and add a JavaScript removeIncludeOrphans() filter function diff -r 93b74afbd379 -r 064ebe531f9e src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/RemoveFilter.java --- a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/RemoveFilter.java Wed Jul 13 15:09:54 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/RemoveFilter.java Wed Jul 13 17:20:53 2011 +0200 @@ -25,9 +25,7 @@ import com.sun.hotspot.igv.graph.Diagram; import com.sun.hotspot.igv.graph.Figure; -import com.sun.hotspot.igv.graph.InputSlot; import com.sun.hotspot.igv.graph.Selector; -import com.sun.hotspot.igv.data.Properties; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -52,48 +50,26 @@ } public void apply(Diagram diagram) { - for (RemoveRule r : rules) { + List
selected = r.getSelector().selected(diagram); + Set
toRemove = new HashSet
(selected); - List
list = r.getSelector().selected(diagram); - Set
figuresToRemove = new HashSet
(); - - List
protectedFigures = null; - if (r.getRemoveAllWithoutPredecessor()) { - protectedFigures = diagram.getRootFigures(); + if (r.getRemoveOrphans()) { + boolean changed; + do { + changed = false; + for (Figure f : diagram.getFigures()) { + if (!toRemove.contains(f)) { + if (toRemove.containsAll(f.getPredecessors()) && toRemove.containsAll(f.getSuccessors())) { + toRemove.add(f); + changed = true; + } + } + } + } while (changed); } - for (Figure f : list) { - if (r.getRemoveOnlyInputs()) { - List inputSlots = new ArrayList(); - for (InputSlot is : f.getInputSlots()) { - inputSlots.add(is); - } - for (InputSlot is : inputSlots) { - f.removeSlot(is); - } - - f.createInputSlot(); - } else { - figuresToRemove.add(f); - } - } - - if (r.getRemoveAllWithoutPredecessor()) { - boolean progress = true; - while (progress) { - List
rootFigures = diagram.getRootFigures(); - progress = false; - for (Figure f : rootFigures) { - if (!protectedFigures.contains(f)) { - figuresToRemove.add(f); - progress = true; - } - } - } - } - - diagram.removeAllFigures(figuresToRemove); + diagram.removeAllFigures(toRemove); } } @@ -104,29 +80,23 @@ public static class RemoveRule { private Selector selector; - private boolean removeAllWithoutPredecessor; - private boolean removeOnlyInputs; + private boolean removeOrphans; - public RemoveRule(Selector selector, boolean b) { - this(selector, b, false); + public RemoveRule(Selector selector) { + this(selector, false); } - public RemoveRule(Selector selector, boolean removeAllWithoutPredecessor, boolean removeOnlyInputs) { + public RemoveRule(Selector selector, boolean removeOrphans) { this.selector = selector; - this.removeOnlyInputs = removeOnlyInputs; - this.removeAllWithoutPredecessor = removeAllWithoutPredecessor; + this.removeOrphans = removeOrphans; } public Selector getSelector() { return selector; } - public boolean getRemoveOnlyInputs() { - return removeOnlyInputs; - } - - public boolean getRemoveAllWithoutPredecessor() { - return removeAllWithoutPredecessor; + public boolean getRemoveOrphans() { + return removeOrphans; } } } diff -r 93b74afbd379 -r 064ebe531f9e src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/helper.js --- a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/helper.js Wed Jul 13 15:09:54 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/helper.js Wed Jul 13 17:20:53 2011 +0200 @@ -35,7 +35,13 @@ function remove(property, regexp) { var f = new RemoveFilter(""); - f.addRule(new RemoveFilter.RemoveRule(new MatcherSelector(new Properties.RegexpPropertyMatcher(property, regexp)), false, false)); + f.addRule(new RemoveFilter.RemoveRule(new MatcherSelector(new Properties.RegexpPropertyMatcher(property, regexp)))); + f.apply(graph); +} + +function removeIncludingOrphans(property, regexp) { + var f = new RemoveFilter(""); + f.addRule(new RemoveFilter.RemoveRule(new MatcherSelector(new Properties.RegexpPropertyMatcher(property, regexp)), true)); f.apply(graph); } diff -r 93b74afbd379 -r 064ebe531f9e src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/filters/onlyControlFlow.filter --- a/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/filters/onlyControlFlow.filter Wed Jul 13 15:09:54 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/filters/onlyControlFlow.filter Wed Jul 13 17:20:53 2011 +0200 @@ -20,5 +20,5 @@ ), false ) ); -f.addRule( new RemoveFilter.RemoveRule(new MatcherSelector(new Properties.RegexpPropertyMatcher("name", "Phi|Store.")), false)); +f.addRule(new RemoveFilter.RemoveRule(new MatcherSelector(new Properties.RegexpPropertyMatcher("name", "Phi|Store.")))); f.apply(graph); \ No newline at end of file