changeset 17147:7a3f6543d383

added timer for NodeClass initializer (-Dgraal.debug.timer.NodeClassCreation=true)
author Doug Simon <doug.simon@oracle.com>
date Thu, 18 Sep 2014 12:22:35 +0200
parents 2e4bd9de8682
children 3837c6aa9fd0
files graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java
diffstat 1 files changed, 19 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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<? extends Node> originalNodeClass = (Class<? extends Node>) gen.value();
-                        value = (NodeClass) allClasses.get(originalNodeClass);
-                        assert value != null;
-                        if (value.genClass == null) {
-                            value.genClass = (Class<? extends Node>) c;
+                try (TimerCloseable t = NodeClassCreation.start()) {
+                    value = (NodeClass) allClasses.get(key);
+                    if (value == null) {
+                        GeneratedNode gen = c.getAnnotation(GeneratedNode.class);
+                        if (gen != null) {
+                            Class<? extends Node> originalNodeClass = (Class<? extends Node>) gen.value();
+                            value = (NodeClass) allClasses.get(originalNodeClass);
+                            assert value != null;
+                            if (value.genClass == null) {
+                                value.genClass = (Class<? extends Node>) 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;
                 }
             }
         }