diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrEnabled.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrEnabled.java index 6a642b9bd2a2..f0ef9ce0012c 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrEnabled.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrEnabled.java @@ -43,3 +43,10 @@ public static boolean get() { return ImageSingletons.contains(JfrManager.class); } } + +class JfrHostedEnabled implements BooleanSupplier { + @Override + public boolean getAsBoolean() { + return ImageSingletons.contains(JfrManager.class) && ImageSingletons.lookup(JfrManager.class).hostedEnabled; + } +} diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrManager.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrManager.java index b4999e1079a7..4b70880ea76f 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrManager.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrManager.java @@ -64,8 +64,11 @@ public class JfrManager { private static final String DEFAULT_JFC_NAME = "default"; + final boolean hostedEnabled; + @Platforms(Platform.HOSTED_ONLY.class) - public JfrManager() { + public JfrManager(boolean hostedEnabled) { + this.hostedEnabled = hostedEnabled; } @Fold diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java similarity index 92% rename from substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java index d46708fc04e9..9eddc5e86b31 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanIntrospector.java @@ -22,13 +22,13 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.hosted.jfr; +package com.oracle.svm.core.jfr; import com.oracle.svm.core.annotate.Alias; import com.oracle.svm.core.annotate.RecomputeFieldValue; import com.oracle.svm.core.annotate.TargetClass; -@TargetClass(className = "com.sun.jmx.mbeanserver.MXBeanIntrospector", onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(className = "com.sun.jmx.mbeanserver.MXBeanIntrospector", onlyWith = JfrHostedEnabled.class) final class Target_com_sun_jmx_mbeanserver_MXBeanIntrospector { /* Reset caches that are used at image build time when FlightRecorder is enabled. */ @@ -38,6 +38,6 @@ final class Target_com_sun_jmx_mbeanserver_MXBeanIntrospector { private static Target_com_sun_jmx_mbeanserver_MBeanIntrospector_MBeanInfoMap mbeanInfoMap; } -@TargetClass(className = "com.sun.jmx.mbeanserver.MBeanIntrospector", innerClass = "MBeanInfoMap", onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(className = "com.sun.jmx.mbeanserver.MBeanIntrospector", innerClass = "MBeanInfoMap", onlyWith = JfrHostedEnabled.class) final class Target_com_sun_jmx_mbeanserver_MBeanIntrospector_MBeanInfoMap { } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java similarity index 93% rename from substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java index d37946d6e2f1..24e2b126cfd2 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_com_sun_jmx_mbeanserver_MXBeanLookup.java @@ -22,13 +22,13 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.hosted.jfr; +package com.oracle.svm.core.jfr; import com.oracle.svm.core.annotate.Alias; import com.oracle.svm.core.annotate.RecomputeFieldValue; import com.oracle.svm.core.annotate.TargetClass; -@TargetClass(className = "com.sun.jmx.mbeanserver.MXBeanLookup", onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(className = "com.sun.jmx.mbeanserver.MXBeanLookup", onlyWith = JfrHostedEnabled.class) final class Target_com_sun_jmx_mbeanserver_MXBeanLookup { /* Reset caches that are used at image build time when FlightRecorder is enabled. */ @@ -36,6 +36,6 @@ final class Target_com_sun_jmx_mbeanserver_MXBeanLookup { private static Target_com_sun_jmx_mbeanserver_WeakIdentityHashMap mbscToLookup; } -@TargetClass(className = "com.sun.jmx.mbeanserver.WeakIdentityHashMap", onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(className = "com.sun.jmx.mbeanserver.WeakIdentityHashMap", onlyWith = JfrHostedEnabled.class) final class Target_com_sun_jmx_mbeanserver_WeakIdentityHashMap { } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_javax_management_MBeanServerFactory.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_javax_management_MBeanServerFactory.java similarity index 95% rename from substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_javax_management_MBeanServerFactory.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_javax_management_MBeanServerFactory.java index e0e303983e36..6b3f8db777b7 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_javax_management_MBeanServerFactory.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_javax_management_MBeanServerFactory.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.hosted.jfr; +package com.oracle.svm.core.jfr; import java.util.ArrayList; @@ -32,7 +32,7 @@ import com.oracle.svm.core.annotate.RecomputeFieldValue; import com.oracle.svm.core.annotate.TargetClass; -@TargetClass(className = "javax.management.MBeanServerFactory", onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(className = "javax.management.MBeanServerFactory", onlyWith = JfrHostedEnabled.class) final class Target_javax_management_MBeanServerFactory { /* Reset caches that are used at image build time when FlightRecorder is enabled. */ diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_jdk_jfr_FlightRecorder.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_jdk_jfr_FlightRecorder.java similarity index 96% rename from substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_jdk_jfr_FlightRecorder.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_jdk_jfr_FlightRecorder.java index b69809ac973b..4126419fa4ec 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/Target_jdk_jfr_FlightRecorder.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/Target_jdk_jfr_FlightRecorder.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.hosted.jfr; +package com.oracle.svm.core.jfr; import com.oracle.svm.core.annotate.Alias; import com.oracle.svm.core.annotate.RecomputeFieldValue; @@ -30,7 +30,7 @@ import jdk.jfr.FlightRecorder; -@TargetClass(value = jdk.jfr.FlightRecorder.class, onlyWith = JfrFeature.JfrHostedEnabled.class) +@TargetClass(value = jdk.jfr.FlightRecorder.class, onlyWith = JfrHostedEnabled.class) final class Target_jdk_jfr_FlightRecorder { /* * Ignore all state of the FlightRecorder maintained when profiling the image generator itself. diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/JfrFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/JfrFeature.java index 424aa57a747e..6b5896910a6a 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/JfrFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jfr/JfrFeature.java @@ -29,19 +29,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.function.BooleanSupplier; -import com.oracle.svm.core.jfr.JfrChunkWriter; -import com.oracle.svm.core.jfr.JfrFrameTypeSerializer; -import com.oracle.svm.core.jfr.JfrGlobalMemory; -import com.oracle.svm.core.jfr.JfrManager; -import com.oracle.svm.core.jfr.JfrNativeEventWriter; -import com.oracle.svm.core.jfr.JfrNativeEventWriterData; -import com.oracle.svm.core.jfr.JfrRecorderThread; -import com.oracle.svm.core.jfr.JfrSerializerSupport; -import com.oracle.svm.core.jfr.JfrThreadLocal; -import com.oracle.svm.core.jfr.JfrThreadStateSerializer; -import com.oracle.svm.core.jfr.SubstrateJVM; import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.hosted.Feature; import org.graalvm.nativeimage.hosted.RuntimeClassInitialization; @@ -55,6 +43,20 @@ import com.oracle.svm.core.hub.DynamicHub; import com.oracle.svm.core.hub.DynamicHubSupport; import com.oracle.svm.core.jdk.RuntimeSupport; +import com.oracle.svm.core.jfr.JfrChunkWriter; +import com.oracle.svm.core.jfr.JfrFrameTypeSerializer; +import com.oracle.svm.core.jfr.JfrGlobalMemory; +import com.oracle.svm.core.jfr.JfrManager; +import com.oracle.svm.core.jfr.JfrNativeEventWriter; +import com.oracle.svm.core.jfr.JfrNativeEventWriterData; +import com.oracle.svm.core.jfr.JfrRecorderThread; +import com.oracle.svm.core.jfr.JfrSerializerSupport; +import com.oracle.svm.core.jfr.JfrThreadLocal; +import com.oracle.svm.core.jfr.JfrThreadStateSerializer; +import com.oracle.svm.core.jfr.SubstrateJVM; +import com.oracle.svm.core.jfr.traceid.JfrTraceId; +import com.oracle.svm.core.jfr.traceid.JfrTraceIdEpoch; +import com.oracle.svm.core.jfr.traceid.JfrTraceIdMap; import com.oracle.svm.core.meta.SharedType; import com.oracle.svm.core.thread.ThreadListenerFeature; import com.oracle.svm.core.thread.ThreadListenerSupport; @@ -62,9 +64,6 @@ import com.oracle.svm.core.util.VMError; import com.oracle.svm.hosted.FeatureImpl; import com.oracle.svm.hosted.FeatureImpl.DuringAnalysisAccessImpl; -import com.oracle.svm.core.jfr.traceid.JfrTraceId; -import com.oracle.svm.core.jfr.traceid.JfrTraceIdEpoch; -import com.oracle.svm.core.jfr.traceid.JfrTraceIdMap; import com.oracle.svm.util.ModuleSupport; import com.oracle.svm.util.ReflectionUtil; import com.sun.management.HotSpotDiagnosticMXBean; @@ -119,17 +118,10 @@ @AutomaticFeature public class JfrFeature implements Feature { - public static final class JfrHostedEnabled implements BooleanSupplier { - @Override - public boolean getAsBoolean() { - return ImageSingletons.contains(JfrFeature.class) && ImageSingletons.lookup(JfrFeature.class).hostedEnabled; - } - } - private final boolean hostedEnabled; public JfrFeature() { - hostedEnabled = Boolean.valueOf(getDiagnosticBean().getVMOption("FlightRecorder").getValue()); + hostedEnabled = Boolean.parseBoolean(getDiagnosticBean().getVMOption("FlightRecorder").getValue()); } @Override @@ -181,8 +173,8 @@ public void afterRegistration(AfterRegistrationAccess access) { List knownConfigurations = JFC.getConfigurations(); JVM.getJVM().createNativeJFR(); + ImageSingletons.add(JfrManager.class, new JfrManager(hostedEnabled)); ImageSingletons.add(SubstrateJVM.class, new SubstrateJVM(knownConfigurations)); - ImageSingletons.add(JfrManager.class, new JfrManager()); ImageSingletons.add(JfrSerializerSupport.class, new JfrSerializerSupport()); ImageSingletons.add(JfrTraceIdMap.class, new JfrTraceIdMap()); ImageSingletons.add(JfrTraceIdEpoch.class, new JfrTraceIdEpoch());