# HG changeset patch # User Doug Simon # Date 1400063859 -7200 # Node ID 19ec9885ce6e27caf998044f00ec606bd47de7b3 # Parent 83c69954bbaadc5c028c229f1cf6eda142f28913 added metric to count the input graph sizes for phases diff -r 83c69954bbaa -r 19ec9885ce6e graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java Wed May 14 11:19:38 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java Wed May 14 12:37:39 2014 +0200 @@ -28,6 +28,7 @@ import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.debug.DebugMemUseTracker.Closeable; import com.oracle.graal.debug.internal.*; +import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; /** @@ -39,9 +40,26 @@ private CharSequence name; - private final DebugTimer phaseTimer; - private final DebugMetric phaseMetric; - private final DebugMemUseTracker phaseMemUseTracker; + /** + * Records time spent in {@link #apply(StructuredGraph, Object, boolean)}. + */ + private final DebugTimer timer; + + /** + * Counts calls to {@link #apply(StructuredGraph, Object, boolean)}. + */ + private final DebugMetric executionCount; + + /** + * Accumulates the {@linkplain Graph#getNodeCount() live node count} of all graphs sent to + * {@link #apply(StructuredGraph, Object, boolean)}. + */ + private final DebugMetric inputNodesCount; + + /** + * Records memory usage within {@link #apply(StructuredGraph, Object, boolean)}. + */ + private final DebugMemUseTracker memUseTracker; private static final Pattern NAME_PATTERN = Pattern.compile("[A-Z][A-Za-z0-9]+"); @@ -51,17 +69,19 @@ } protected BasePhase() { - phaseTimer = Debug.timer("PhaseTime_%s", getClass()); - phaseMetric = Debug.metric("PhaseCount_%s", getClass()); - phaseMemUseTracker = Debug.memUseTracker("PhaseMemUse_%s", getClass()); + timer = Debug.timer("PhaseTime_%s", getClass()); + executionCount = Debug.metric("PhaseCount_%s", getClass()); + memUseTracker = Debug.memUseTracker("PhaseMemUse_%s", getClass()); + inputNodesCount = Debug.metric("PhaseNodes_%s", getClass()); } protected BasePhase(String name) { assert checkName(name); this.name = name; - phaseTimer = Debug.timer("PhaseTime_%s", getClass()); - phaseMetric = Debug.metric("PhaseCount_%s", getClass()); - phaseMemUseTracker = Debug.memUseTracker("PhaseMemUse_%s", getClass()); + timer = Debug.timer("PhaseTime_%s", getClass()); + executionCount = Debug.metric("PhaseCount_%s", getClass()); + memUseTracker = Debug.memUseTracker("PhaseMemUse_%s", getClass()); + inputNodesCount = Debug.metric("PhaseNodes_%s", getClass()); } protected CharSequence getDetailedName() { @@ -73,9 +93,10 @@ } public final void apply(final StructuredGraph graph, final C context, final boolean dumpGraph) { - try (TimerCloseable a = phaseTimer.start(); Scope s = Debug.scope(getClass(), this); Closeable c = phaseMemUseTracker.start()) { + try (TimerCloseable a = timer.start(); Scope s = Debug.scope(getClass(), this); Closeable c = memUseTracker.start()) { BasePhase.this.run(graph, context); - phaseMetric.increment(); + executionCount.increment(); + inputNodesCount.add(graph.getNodeCount()); if (dumpGraph && Debug.isDumpEnabled()) { Debug.dump(graph, "After phase %s", getName()); }