# HG changeset patch # User Christian Humer # Date 1426885779 -3600 # Node ID 933bfa4995c844328985b518bf78819e9a7c8ab8 # Parent ec6093a28cf34610979e196b0d5a65c29ae66eb2 Truffle: some tweaks to the PrintTruffleExpansionHistogram. diff -r ec6093a28cf3 -r 933bfa4995c8 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/HistogramInlineInvokePlugin.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/HistogramInlineInvokePlugin.java Fri Mar 20 19:00:50 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/HistogramInlineInvokePlugin.java Fri Mar 20 22:09:39 2015 +0100 @@ -26,9 +26,11 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; import com.oracle.graal.graphbuilderconf.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; +import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.truffle.*; public class HistogramInlineInvokePlugin implements InlineInvokePlugin { @@ -47,7 +49,7 @@ public InlineInfo getInlineInfo(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args, JavaType returnType) { InlineInfo inlineInfo = delegate.getInlineInfo(b, method, args, returnType); if (inlineInfo != null) { - currentStatistic = new MethodStatistic(currentStatistic, inlineInfo.methodToInline, graph.getNodeCount(), graph.getNodes(MethodCallTargetNode.TYPE).count()); + currentStatistic = new MethodStatistic(currentStatistic, inlineInfo.methodToInline, countNodes(), countCalls()); } return inlineInfo; } @@ -56,13 +58,25 @@ delegate.postInline(inlinedTargetMethod); if (currentStatistic != null) { - currentStatistic.applyNodeCountAfter(graph.getNodeCount()); - currentStatistic.applyCallsAfter(graph.getNodes(MethodCallTargetNode.TYPE).count()); + currentStatistic.applyNodeCountAfter(countNodes()); + currentStatistic.applyCallsAfter(countCalls()); accept(currentStatistic); currentStatistic = currentStatistic.getParent(); } } + private int countNodes() { + return graph.getNodes().filter(node -> isNonTrivial(node)).count(); + } + + private int countCalls() { + return graph.getNodes(MethodCallTargetNode.TYPE).count(); + } + + private static boolean isNonTrivial(Node node) { + return !(node instanceof VirtualState || node instanceof VirtualObjectNode || node instanceof BeginNode || node instanceof DeoptimizeNode); + } + private void accept(MethodStatistic current) { ResolvedJavaMethod method = current.getMethod(); HistogramInlineInvokePlugin.MethodStatistics statistics = histogram.get(method); @@ -74,12 +88,12 @@ } public void print(OptimizedCallTarget target, PrintStream out) { - out.printf("Truffle expansion histogram for %s", target); + out.printf("Truffle expansion histogram for %s%n", target); out.println(" Invocations = Number of expanded invocations"); - out.println(" Nodes = Number of Graal nodes created for this method during partial evaluation."); + out.println(" Nodes = Number of non-trival Graal nodes created for this method during partial evaluation."); out.println(" Calls = Number of not expanded calls created for this method during partial evaluation."); out.printf(" %-11s |Nodes %5s %5s %5s %8s |Calls %5s %5s %5s %8s | Method Name%n", "Invocations", "Sum", "Min", "Max", "Avg", "Sum", "Min", "Max", "Avg"); - histogram.values().stream().sorted().forEach(statistics -> statistics.print(out)); + histogram.values().stream().filter(statistics -> statistics.shallowCount.getSum() > 0).sorted().forEach(statistics -> statistics.print(out)); } private static class MethodStatistics implements Comparable { @@ -95,7 +109,7 @@ } public void print(PrintStream out) { - out.printf(" %11d | %5d %5d %5d %8.2f | %5d %5d %5d %8.2f | %s%n", // + out.printf(" %11d | %5d %5d %5d %8.2f | %5d %5d %5d %8.2f | %s%n", // count, shallowCount.getSum(), shallowCount.getMin(), shallowCount.getMax(), // shallowCount.getAverage(), callCount.getSum(), callCount.getMin(), callCount.getMax(), // callCount.getAverage(), method.format("%h.%n(%p)"));