changeset 5344:f47c770756e6

moved RiResolvedMethod.dumpProfile() to CiUtil.profileAsString()
author Doug Simon <doug.simon@oracle.com>
date Wed, 02 May 2012 18:04:36 +0200
parents 20c14eb46238
children 00803ae428d2
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java
diffstat 5 files changed, 66 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java	Wed May 02 17:09:00 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java	Wed May 02 18:04:36 2012 +0200
@@ -29,7 +29,6 @@
 public interface HotSpotMethodResolved extends RiResolvedMethod, Remote {
 
     RiResolvedMethod uniqueConcreteMethod();
-    void dumpProfile();
     int vtableEntryOffset();
 
     void setCurrentTask(CompilationTask task);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java	Wed May 02 17:09:00 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java	Wed May 02 18:04:36 2012 +0200
@@ -27,14 +27,13 @@
 import java.util.*;
 import java.util.concurrent.*;
 
-import com.oracle.max.cri.ci.*;
-import com.oracle.max.cri.ri.*;
-import com.oracle.max.cri.ri.RiTypeProfile.ProfiledType;
-import com.oracle.max.criutils.*;
 import com.oracle.graal.compiler.*;
 import com.oracle.graal.hotspot.*;
 import com.oracle.graal.hotspot.counters.*;
 import com.oracle.graal.java.bytecode.*;
+import com.oracle.max.cri.ci.*;
+import com.oracle.max.cri.ri.*;
+import com.oracle.max.criutils.*;
 
 /**
  * Implementation of RiMethod for resolved HotSpot methods.
@@ -255,61 +254,6 @@
     }
 
     @Override
-    public void dumpProfile() {
-        TTY.println("profile info for %s", this);
-        TTY.println("canBeStaticallyBound: " + canBeStaticallyBound());
-        TTY.println("invocationCount: " + invocationCount());
-        RiProfilingInfo profilingInfo = this.profilingInfo();
-        for (int i = 0; i < codeSize(); i++) {
-            if (profilingInfo.getExecutionCount(i) != -1) {
-                TTY.println("  executionCount@%d: %d", i, profilingInfo.getExecutionCount(i));
-            }
-
-            if (profilingInfo.getBranchTakenProbability(i) != -1) {
-                TTY.println("  branchProbability@%d: %.3f", i, profilingInfo.getBranchTakenProbability(i));
-            }
-
-            double[] switchProbabilities = profilingInfo.getSwitchProbabilities(i);
-            if (switchProbabilities != null) {
-                TTY.print("  switchProbabilities@%d:", i);
-                for (int j = 0; j < switchProbabilities.length; j++) {
-                    TTY.print(" %.3f", switchProbabilities[j]);
-                }
-                TTY.println();
-            }
-
-            if (profilingInfo.getExceptionSeen(i) != RiExceptionSeen.FALSE) {
-                TTY.println("  exceptionSeen@%d: %s", i, profilingInfo.getExceptionSeen(i).name());
-            }
-
-            RiTypeProfile typeProfile = profilingInfo.getTypeProfile(i);
-            if (typeProfile != null) {
-                ProfiledType[] ptypes = typeProfile.getTypes();
-                if (ptypes != null) {
-                    TTY.println("  types@%d:", i);
-                    for (int j = 0; j < ptypes.length; j++) {
-                        ProfiledType ptype = ptypes[j];
-                        TTY.println("    %.3f %s", ptype.probability, ptype.type);
-                    }
-                    TTY.println("    %.3f <not recorded>", typeProfile.getNotRecordedProbability());
-                }
-            }
-        }
-
-        boolean firstDeoptReason = true;
-        for (RiDeoptReason reason: RiDeoptReason.values()) {
-            int count = profilingInfo.getDeoptimizationCount(reason);
-            if (count > 0) {
-                if (firstDeoptReason) {
-                    TTY.println("Deopt History");
-                    firstDeoptReason = false;
-                }
-                TTY.println("  %s: %d", reason.name(), count);
-            }
-        }
-    }
-
-    @Override
     public Annotation[][] getParameterAnnotations() {
         if (isConstructor()) {
             Constructor javaConstructor = toJavaConstructor();
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed May 02 17:09:00 2012 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed May 02 18:04:36 2012 +0200
@@ -147,7 +147,8 @@
         }
 
         if (GraalOptions.PrintProfilingInformation) {
-            method.dumpProfile();
+            TTY.println("Profiling info for " + method);
+            TTY.println(CiUtil.indent(CiUtil.profileAsString(method), "  "));
         }
 
         // compute the block map, setup exception handlers and get the entrypoint(s)
--- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java	Wed May 02 17:09:00 2012 +0200
+++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java	Wed May 02 18:04:36 2012 +0200
@@ -28,6 +28,7 @@
 import java.util.*;
 
 import com.oracle.max.cri.ri.*;
+import com.oracle.max.cri.ri.RiTypeProfile.ProfiledType;
 
 /**
  * Miscellaneous collection of utility methods used in the {@code CRI} project.
@@ -736,4 +737,64 @@
         }
         return result;
     }
+
+    /**
+     * Formats the profiling information associated with a given method to a string.
+     */
+    public static String profileAsString(RiResolvedMethod method) {
+        StringBuilder buf = new StringBuilder(100);
+        buf.append(String.format("canBeStaticallyBound: %b%n", method.canBeStaticallyBound())).
+            append(String.format("invocationCount: %d%n", method.invocationCount()));
+        RiProfilingInfo profilingInfo = method.profilingInfo();
+        if (profilingInfo != null) {
+            for (int i = 0; i < method.codeSize(); i++) {
+                if (profilingInfo.getExecutionCount(i) != -1) {
+                    buf.append(String.format("executionCount@%d: %d%n", i, profilingInfo.getExecutionCount(i)));
+                }
+
+                if (profilingInfo.getBranchTakenProbability(i) != -1) {
+                    buf.append(String.format("branchProbability@%d: %.3f%n", i, profilingInfo.getBranchTakenProbability(i)));
+                }
+
+                double[] switchProbabilities = profilingInfo.getSwitchProbabilities(i);
+                if (switchProbabilities != null) {
+                    buf.append(String.format("switchProbabilities@%d:", i));
+                    for (int j = 0; j < switchProbabilities.length; j++) {
+                        buf.append(String.format(" %.3f", switchProbabilities[j]));
+                    }
+                    buf.append(NEW_LINE);
+                }
+
+                if (profilingInfo.getExceptionSeen(i) != RiExceptionSeen.FALSE) {
+                    buf.append(String.format("exceptionSeen@%d: %s%n", i, profilingInfo.getExceptionSeen(i).name()));
+                }
+
+                RiTypeProfile typeProfile = profilingInfo.getTypeProfile(i);
+                if (typeProfile != null) {
+                    ProfiledType[] ptypes = typeProfile.getTypes();
+                    if (ptypes != null) {
+                        buf.append(String.format("types@%d:%n", i));
+                        for (int j = 0; j < ptypes.length; j++) {
+                            ProfiledType ptype = ptypes[j];
+                            buf.append(String.format("  %.3f %s%n", ptype.probability, ptype.type));
+                        }
+                        buf.append(String.format("  %.3f <not recorded>%n", typeProfile.getNotRecordedProbability()));
+                    }
+                }
+            }
+
+            boolean firstDeoptReason = true;
+            for (RiDeoptReason reason: RiDeoptReason.values()) {
+                int count = profilingInfo.getDeoptimizationCount(reason);
+                if (count > 0) {
+                    if (firstDeoptReason) {
+                        buf.append("deoptimization history").append(NEW_LINE);
+                        firstDeoptReason = false;
+                    }
+                    buf.append(String.format("  %s: %d%n", reason.name(), count));
+                }
+            }
+        }
+        return buf.toString();
+    }
 }
--- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java	Wed May 02 17:09:00 2012 +0200
+++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java	Wed May 02 18:04:36 2012 +0200
@@ -224,9 +224,4 @@
      * @return {@code true} if this method can be inlined
      */
     boolean canBeInlined();
-
-    /**
-     * Dumps the recorded profiling information to TTY.
-     */
-    void dumpProfile();
 }