On Tue, 6 Jul 2021 06:19:07 GMT, Denghui Dong <dd...@openjdk.org> wrote:

>> Hi,
>> 
>> Could I have a review of this improvement that eliminates 'is_large' check 
>> if the event size range is certain?
>> 
>> JDK-8246260 introduced event large checks to reduce the recording size.
>> This check could be eliminated at compile/build time when one of the 
>> following conditions is satisfied:
>> 1. if the max size is < 128
>> 2. if the min size is >= 128
>> 
>> The max size and the min size could be computed for the most native events 
>> at the generation phase.
>> 
>> And I think this improvement may also be done for JDK events.
>
> Denghui Dong has refreshed the contents of this pull request, and previous 
> commits have been removed. The incremental views will show differences 
> compared to the previous content of the PR.

diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp 
b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp
index 54a4680ced8..893aaebdbd6 100644
--- a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp
+++ b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp
@@ -362,3 +362,11 @@ JVM_END
 JVM_ENTRY_NO_ENV(jboolean, jfr_set_handler(JNIEnv * env, jobject jvm, jobject 
clazz, jobject handler))
   return JfrJavaSupport::set_handler(clazz, handler, thread);
 JVM_END
+
+JVM_ENTRY_NO_ENV(void, jfr_emit(JNIEnv* env, jobject jvm))
+  for (int i = 0; i < 100; i++) {
+    EventTest e;
+    e.set_dummy(1);
+    e.commit();
+  }
+JVM_END
diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp 
b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp
index 19a676c4a22..7da213c80c1 100644
--- a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp
+++ b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp
@@ -152,6 +152,8 @@ jboolean JNICALL jfr_set_handler(JNIEnv* env, jobject jvm, 
jobject clazz, jobjec
 
 jlong JNICALL jfr_get_type_id_from_string(JNIEnv* env, jobject jvm, jstring 
type);
 
+void JNICALL jfr_emit(JNIEnv*, jobject jvm);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp 
b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp
index db137776f65..1aab7909f6e 100644
--- a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp
+++ b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp
@@ -90,7 +90,8 @@ JfrJniMethodRegistration::JfrJniMethodRegistration(JNIEnv* 
env) {
       (char*)"getChunkStartNanos", (char*)"()J", (void*)jfr_chunk_start_nanos,
       (char*)"getHandler", (char*)"(Ljava/lang/Class;)Ljava/lang/Object;", 
(void*)jfr_get_handler,
       (char*)"setHandler", 
(char*)"(Ljava/lang/Class;Ljdk/jfr/internal/handlers/EventHandler;)Z", 
(void*)jfr_set_handler,
-      (char*)"getTypeId", (char*)"(Ljava/lang/String;)J", 
(void*)jfr_get_type_id_from_string
+      (char*)"getTypeId", (char*)"(Ljava/lang/String;)J", 
(void*)jfr_get_type_id_from_string,
+      (char*)"emit", (char*)"()V", (void*)jfr_emit,
     };
 
     const size_t method_array_length = sizeof(method) / 
sizeof(JNINativeMethod);
diff --git a/src/hotspot/share/jfr/metadata/metadata.xml 
b/src/hotspot/share/jfr/metadata/metadata.xml
index 1a19b763314..633c6e3f1f1 100644
--- a/src/hotspot/share/jfr/metadata/metadata.xml
+++ b/src/hotspot/share/jfr/metadata/metadata.xml
@@ -1081,6 +1081,10 @@
     <Field type="uint" name="stallCount" label="Stall Count" description="The 
number of Java threads stalled by the GC locker" />
   </Event>
 
+  <Event name="Test" category="Test" label="Dummy">
+    <Field type="uint" name="dummy" label="Dummy" description="Dummy" />
+  </Event>
+
   <Type name="DeoptimizationReason" label="Deoptimization Reason">
     <Field type="string" name="reason" label="Reason" />
   </Type>
diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java 
b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java
index a88b428dac3..bd28e5b4015 100644
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java
@@ -597,4 +597,6 @@ public final class JVM {
      * @return the id, or a negative value if it does not exists.
      */
     public native long getTypeId(String name);
+
+    public native void emit();
 }


It's a simple benchmark, I wrote a native function to emit 100 same native 
events.

package org.sample;

import jdk.jfr.Event;
import jdk.jfr.Recording;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import jdk.jfr.internal.JVM;

@State(Scope.Benchmark)
public class MyBenchmark {


    @Benchmark
    @Fork(value=1, jvmArgs = {"--add-exports", 
"jdk.jfr/jdk.jfr.internal=ALL-UNNAMED"})
    @Warmup(iterations = 5, time = 1)
    public void testEmit(Blackhole bh) {
        JVM.getJVM().emit();
    }
}

-------------

PR: https://git.openjdk.java.net/jdk/pull/4670

Reply via email to