diff src/share/vm/graal/graalCompilerToVM.cpp @ 13103:c0b0974dd509

moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
author Doug Simon <doug.simon@oracle.com>
date Thu, 21 Nov 2013 22:08:04 +0100
parents f6c511451e4a
children 389d40d7d99f
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Thu Nov 21 15:04:54 2013 +0100
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Thu Nov 21 22:08:04 2013 +0100
@@ -732,8 +732,6 @@
 
   set_int("instanceKlassVtableStartOffset", InstanceKlass::vtable_start_offset() * HeapWordSize);
 
-  set_long("elapsedTimerFrequency", os::elapsed_frequency());
-
   //------------------------------------------------------------------------------------------------
 
   set_address("handleDeoptStub", SharedRuntime::deopt_blob()->unpack());
@@ -827,6 +825,37 @@
   return result;
 C2V_END
 
+C2V_VMENTRY(void, notifyCompilationStatistics, (JNIEnv *jniEnv, jobject, jint id, jobject hotspot_method, jboolean osr, jint processedBytecodes, jlong time, jlong timeUnitsPerSecond, jobject installed_code))
+  CompilerStatistics* stats = GraalCompiler::instance()->stats();
+
+  elapsedTimer timer = elapsedTimer(time, timeUnitsPerSecond);
+  if (osr) {
+    stats->_osr.update(timer, processedBytecodes);
+  } else {
+    stats->_standard.update(timer, processedBytecodes);
+  }
+  Handle installed_code_handle = JNIHandles::resolve(installed_code);
+  stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle);
+  stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle);
+
+  if (CITimeEach) {
+    methodHandle method = asMethod(HotSpotResolvedJavaMethod::metaspaceMethod(hotspot_method));
+    float bytes_per_sec = 1.0 * processedBytecodes / timer.seconds();
+    tty->print_cr("%3d   seconds: %f bytes/sec: %f (bytes %d)",
+                  id, timer.seconds(), bytes_per_sec, processedBytecodes);
+  }
+C2V_END
+
+C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv *jniEnv, jobject))
+  CompilerStatistics* stats = GraalCompiler::instance()->stats();
+  stats->_standard._time.reset();
+  stats->_standard._bytes = 0;
+  stats->_standard._count = 0;
+  stats->_osr._time.reset();
+  stats->_osr._bytes = 0;
+  stats->_osr._count = 0;
+C2V_END
+
 C2V_VMENTRY(jobject, disassembleCodeBlob, (JNIEnv *jniEnv, jobject, jlong codeBlob))
   ResourceMark rm;
   HandleMark hm;
@@ -1098,6 +1127,8 @@
   {CC"getJavaField",                  CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD,                           FN_PTR(getJavaField)},
   {CC"initializeConfiguration",       CC"("HS_CONFIG")V",                                               FN_PTR(initializeConfiguration)},
   {CC"installCode0",                  CC"("HS_COMPILED_CODE HS_INSTALLED_CODE"[Z)I",                    FN_PTR(installCode0)},
+  {CC"notifyCompilationStatistics",   CC"(I"HS_RESOLVED_METHOD"ZIJJ"HS_INSTALLED_CODE")V",              FN_PTR(notifyCompilationStatistics)},
+  {CC"resetCompilationStatistics",    CC"()V",                                                          FN_PTR(resetCompilationStatistics)},
   {CC"disassembleCodeBlob",           CC"(J)"STRING,                                                    FN_PTR(disassembleCodeBlob)},
   {CC"executeCompiledMethodVarargs",  CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT,                          FN_PTR(executeCompiledMethodVarargs)},
   {CC"getDeoptedLeafGraphIds",        CC"()[J",                                                         FN_PTR(getDeoptedLeafGraphIds)},