On Wed, 21 Apr 2021 22:38:32 GMT, Erik Gahlin <egah...@openjdk.org> wrote:

>> Jaroslav Bachorik has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   Fix event metadata
>
> I wonder if something similar to below could be added to 
> jdk.jfr.internal.Utils:
> 
>     private static Metrics[] metrics;
>     public static Metrics getMetrics() {
>         if (metrics == null) {
>             metrics = new Metrics[] { Metrics.systemMetrics() };
>         }
>         return metrics[0];
>     }
> 
>     public static boolean shouldSkipBytecode(String eventName, Class<?> 
> superClass) {
>         if (superClass != AbstractJDKEvent.class) {
>             return false;
>         }
>         if (!eventName.startsWith("jdk.Container")) {
>             return false;
>         }
>         return getMetrics() == null;
>     }
> 
> Then we could add checks to 
> jdk.jfr.internal.JVMUpcalls::bytesForEagerInstrumentation(...)
> 
>     eventName = ei.getEventName();
>     if (Utils.shouldSkipBytecode(eventName, superClass))) {
>         return oldBytes;
>     }
> 
> and jdk.jfr.internal.JVMUpcalls:onRetransform(...)
> 
>     if (jdk.internal.event.Event.class.isAssignableFrom(clazz) && 
> !Modifier.isAbstract(clazz.getModifiers())) {
>         if (Utils.shouldSkipBytecode(clazz.getName(), clazz.getSuperclass())) 
> {
>             return oldBytes;
>         }
> 
> This way we would not pay for generating bytecode for events in a 
> non-container environment. 
> 
> Not sure if it works, but could perhaps make startup faster? We would still 
> pay for generating the event handlers during registration, but it's much 
> trickier to avoid since we need to store the event type somewhere.

@egahlin Sounds good.
Any particular reason you are using `Metrics[]` array?

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

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

Reply via email to