8154096: Extend WhiteBox API with methods which retrieve from VM information about available GC
authordfazunen
Mon, 30 May 2016 19:56:27 +0400
changeset 38727 f5f44a314a9c
parent 38726 2c99beca1dd8
child 38728 3b18de52e85a
child 38729 bc9d98606cef
8154096: Extend WhiteBox API with methods which retrieve from VM information about available GC Reviewed-by: iignatyev, kbarrett
hotspot/src/share/vm/prims/whitebox.cpp
--- a/hotspot/src/share/vm/prims/whitebox.cpp	Fri May 27 17:48:56 2016 +0300
+++ b/hotspot/src/share/vm/prims/whitebox.cpp	Mon May 30 19:56:27 2016 +0400
@@ -278,6 +278,49 @@
                                         (size_t) magnitude, (size_t) iterations);
 WB_END
 
+static const jint serial_code   = 1;
+static const jint parallel_code = 2;
+static const jint cms_code      = 4;
+static const jint g1_code       = 8;
+
+WB_ENTRY(jint, WB_CurrentGC(JNIEnv* env, jobject o, jobject obj))
+  if (UseSerialGC) {
+    return serial_code;
+  } else if (UseParallelGC || UseParallelOldGC) {
+    return parallel_code;
+  } if (UseConcMarkSweepGC) {
+    return cms_code;
+  } else if (UseG1GC) {
+    return g1_code;
+  }
+  ShouldNotReachHere();
+  return 0;
+WB_END
+
+WB_ENTRY(jint, WB_AllSupportedGC(JNIEnv* env, jobject o, jobject obj))
+#if INCLUDE_ALL_GCS
+  return serial_code | parallel_code | cms_code | g1_code;
+#else
+  return serial_code;
+#endif // INCLUDE_ALL_GCS
+WB_END
+
+WB_ENTRY(jboolean, WB_GCSelectedByErgo(JNIEnv* env, jobject o, jobject obj))
+  if (UseSerialGC) {
+    return FLAG_IS_ERGO(UseSerialGC);
+  } else if (UseParallelGC) {
+    return FLAG_IS_ERGO(UseParallelGC);
+  } else if (UseParallelOldGC) {
+    return FLAG_IS_ERGO(UseParallelOldGC);
+  } else if (UseConcMarkSweepGC) {
+    return FLAG_IS_ERGO(UseConcMarkSweepGC);
+  } else if (UseG1GC) {
+    return FLAG_IS_ERGO(UseG1GC);
+  }
+  ShouldNotReachHere();
+  return false;
+WB_END
+
 WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj))
   oop p = JNIHandles::resolve(obj);
 #if INCLUDE_ALL_GCS
@@ -1833,7 +1876,10 @@
   {CC"clearInlineCaches0",  CC"(Z)V",                 (void*)&WB_ClearInlineCaches },
   {CC"addCompilerDirective",    CC"(Ljava/lang/String;)I",
                                                       (void*)&WB_AddCompilerDirective },
-  {CC"removeCompilerDirective", CC"(I)V",             (void*)&WB_RemoveCompilerDirective },
+  {CC"removeCompilerDirective",   CC"(I)V",             (void*)&WB_RemoveCompilerDirective },
+  {CC"currentGC",                 CC"()I",            (void*)&WB_CurrentGC},
+  {CC"allSupportedGC",            CC"()I",            (void*)&WB_AllSupportedGC},
+  {CC"gcSelectedByErgo",          CC"()Z",            (void*)&WB_GCSelectedByErgo},
 };
 
 #undef CC