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

>> Jaroslav Bachorik 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.
>
> 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 Unfortunately, I had to make one late change in the periodic event 
hook registration.
If the events are registered conditionally only when running in a container the 
event metadata are not correct and `TestDefaultConfigurations.java` test will 
fail. When I register the hooks unconditionally, the metadata is correctly 
generated and the test passes.
I will hold off integration until I hear back from you whether this is 
acceptable or I should try to find an alternative solution.

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

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

Reply via email to