changeset 1451:cfbab7c4f410

7902168: JMH should print warnings when JVM support is not guaranteed
author shade
date Fri, 04 May 2018 14:03:48 +0200
parents 9df26c5f8b4b
children 639f52f8a155
files jmh-core/src/main/java/org/openjdk/jmh/runner/SupportedVMs.java jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java
diffstat 2 files changed, 73 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jmh-core/src/main/java/org/openjdk/jmh/runner/SupportedVMs.java	Fri May 04 14:03:48 2018 +0200
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018, Red Hat Inc. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jmh.runner;
+
+
+/**
+ * JMH VM support tester
+ */
+public class SupportedVMs {
+
+    static final String[] FULL_SUPPORT = {
+            "OpenJDK",
+            "HotSpot",
+    };
+
+    static final String[] EXPERIMENTAL_SUPPORT = {
+            "Zing",
+            "GraalVM",
+    };
+
+    public static Level supportLevel(String name) {
+        for (String vmName : FULL_SUPPORT) {
+            if (name.contains(vmName)) return Level.FULL;
+        }
+        for (String vmName : EXPERIMENTAL_SUPPORT) {
+            if (name.contains(vmName)) return Level.EXPERIMENTAL;
+        }
+        return Level.NONE;
+    }
+
+    public enum Level {
+        FULL,
+        EXPERIMENTAL,
+        NONE,
+    }
+}
--- a/jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java	Fri May 04 14:02:30 2018 +0200
+++ b/jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java	Fri May 04 14:03:48 2018 +0200
@@ -34,6 +34,7 @@
 import org.openjdk.jmh.results.format.ResultFormatFactory;
 import org.openjdk.jmh.results.format.ResultFormatType;
 import org.openjdk.jmh.runner.IterationType;
+import org.openjdk.jmh.runner.SupportedVMs;
 import org.openjdk.jmh.runner.options.TimeValue;
 import org.openjdk.jmh.runner.options.VerboseMode;
 import org.openjdk.jmh.util.Utils;
@@ -63,6 +64,20 @@
 
         println("# JMH version: " + params.getJmhVersion());
         println("# VM version: JDK " + params.getJdkVersion() + ", " + params.getVmName() + ", " + params.getVmVersion());
+
+        switch (SupportedVMs.supportLevel(params.getVmName())) {
+            case FULL:
+                break;
+            case EXPERIMENTAL:
+                println("# *** WARNING: JMH support for this VM is experimental. Be extra careful with the produced data.");
+                break;
+            case NONE:
+                println("# *** WARNING: This VM is not supported by JMH. The produced benchmark data can be completely wrong.");
+                break;
+            default:
+                throw new IllegalStateException("Unknown support level");
+        }
+
         println("# VM invoker: " + params.getJvm());
         println("# VM options: " + opts);