diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp index 401e1572cf6..d93ddc0f0e0 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp @@ -276,9 +276,7 @@ JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_period(JNIEnv* env, jobject jvm, } JfrEventId typed_event_id = (JfrEventId)type; assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant"); - if (periodMillis > 0) { - JfrEventSetting::set_enabled(typed_event_id, true); // ensure sampling event is enabled - } + JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0); if (EventExecutionSample::eventId == type) { JfrThreadSampling::set_java_sample_period(periodMillis); } else { diff --git a/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp b/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp index a4f3fca2153..1422287506b 100644 --- a/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp +++ b/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp @@ -293,14 +293,18 @@ static const uint MAX_NR_OF_NATIVE_SAMPLES = 1; void JfrThreadSampleClosure::commit_events(JfrSampleType type) { if (JAVA_SAMPLE == type) { assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant"); - for (uint i = 0; i < _added_java; ++i) { - _events[i].commit(); + if (EventExecutionSample::is_enabled()) { + for (uint i = 0; i < _added_java; ++i) { + _events[i].commit(); + } } } else { assert(NATIVE_SAMPLE == type, "invariant"); assert(_added_native > 0 && _added_native <= MAX_NR_OF_NATIVE_SAMPLES, "invariant"); - for (uint i = 0; i < _added_native; ++i) { - _events_native[i].commit(); + if (EventNativeMethodSample::is_enabled()) { + for (uint i = 0; i < _added_native; ++i) { + _events_native[i].commit(); + } } } } diff --git a/src/hotspot/share/jfr/recorder/service/jfrEvent.hpp b/src/hotspot/share/jfr/recorder/service/jfrEvent.hpp index 7c1e953f4e8..4dc963f5f20 100644 --- a/src/hotspot/share/jfr/recorder/service/jfrEvent.hpp +++ b/src/hotspot/share/jfr/recorder/service/jfrEvent.hpp @@ -63,24 +63,20 @@ class JfrEvent { private: jlong _start_time; jlong _end_time; - bool _started; bool _untimed; bool _should_commit; bool _evaluated; protected: JfrEvent(EventStartTime timing=TIMED) : _start_time(0), _end_time(0), - _started(false), _untimed(timing == UNTIMED), + _untimed(timing == UNTIMED), _should_commit(false), _evaluated(false) #ifdef ASSERT , _verifier() #endif { - if (T::is_enabled()) { - _started = true; - if (TIMED == timing && !T::isInstant) { - set_starttime(JfrTicks::now()); - } + if (!T::isInstant && !_untimed && is_enabled()) { + set_starttime(JfrTicks::now()); } } @@ -146,20 +142,17 @@ class JfrEvent { return T::hasStackTrace; } - bool is_started() const { - return _started; + bool is_started() { + return is_instant() || _start_time != 0 || _untimed; } bool should_commit() { - if (!_started) { + if (!is_enabled()) { return false; } if (_untimed) { return true; } - if (_evaluated) { - return _should_commit; - } _should_commit = evaluate(); _evaluated = true; return _should_commit; @@ -167,11 +160,16 @@ class JfrEvent { private: bool should_write() { - return _started && (_evaluated ? _should_commit : evaluate()); + if (_evaluated) { + return _should_commit; + } + if (!is_enabled()) { + return false; + } + return evaluate(); } bool evaluate() { - assert(_started, "invariant"); if (_start_time == 0) { set_starttime(JfrTicks::now()); } else if (_end_time == 0) {