# HG changeset patch # User Doug Simon # Date 1411035755 -7200 # Node ID 7a3f6543d383c691bdbd4644c6357015cf926a7a # Parent 2e4bd9de8682dca2511723118ada3c1e940dc19d added timer for NodeClass initializer (-Dgraal.debug.timer.NodeClassCreation=true) diff -r 2e4bd9de8682 -r 7a3f6543d383 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Sep 17 17:06:37 2014 -0700 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Thu Sep 18 12:22:35 2014 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; +import com.oracle.graal.debug.internal.*; import com.oracle.graal.graph.Graph.DuplicationReplacement; import com.oracle.graal.graph.Node.Input; import com.oracle.graal.graph.Node.Successor; @@ -50,6 +51,8 @@ private static final Object GetNodeClassLock = new Object(); + private static final DebugTimer NodeClassCreation = Debug.timer("NodeClassCreation"); + /** * Gets the {@link NodeClass} associated with a given {@link Class}. */ @@ -64,23 +67,25 @@ // The creation of a NodeClass must be serialized as the NodeClass constructor accesses // both FieldIntrospection.allClasses and NodeClass.nextIterableId. synchronized (GetNodeClassLock) { - value = (NodeClass) allClasses.get(key); - if (value == null) { - GeneratedNode gen = c.getAnnotation(GeneratedNode.class); - if (gen != null) { - Class originalNodeClass = (Class) gen.value(); - value = (NodeClass) allClasses.get(originalNodeClass); - assert value != null; - if (value.genClass == null) { - value.genClass = (Class) c; + try (TimerCloseable t = NodeClassCreation.start()) { + value = (NodeClass) allClasses.get(key); + if (value == null) { + GeneratedNode gen = c.getAnnotation(GeneratedNode.class); + if (gen != null) { + Class originalNodeClass = (Class) gen.value(); + value = (NodeClass) allClasses.get(originalNodeClass); + assert value != null; + if (value.genClass == null) { + value.genClass = (Class) c; + } else { + assert value.genClass == c; + } } else { - assert value.genClass == c; + value = new NodeClass(key); } - } else { - value = new NodeClass(key); + Object old = allClasses.putIfAbsent(key, value); + assert old == null : old + " " + key; } - Object old = allClasses.putIfAbsent(key, value); - assert old == null : old + " " + key; } } }