66import static datadog .trace .bootstrap .instrumentation .java .concurrent .ConcurrentState .activateAndContinueContinuation ;
77import static datadog .trace .bootstrap .instrumentation .java .concurrent .ConcurrentState .captureContinuation ;
88import static datadog .trace .bootstrap .instrumentation .java .concurrent .ConcurrentState .closeScope ;
9+ import static datadog .trace .bootstrap .instrumentation .java .concurrent .ExcludeFilter .ExcludeType .RUNNABLE ;
910import static datadog .trace .bootstrap .instrumentation .java .lang .VirtualThreadHelper .AGENT_SCOPE_CLASS_NAME ;
1011import static datadog .trace .bootstrap .instrumentation .java .lang .VirtualThreadHelper .VIRTUAL_THREAD_CLASS_NAME ;
12+ import static java .util .Collections .singletonList ;
13+ import static java .util .Collections .singletonMap ;
1114import static net .bytebuddy .matcher .ElementMatchers .isConstructor ;
1215import static net .bytebuddy .matcher .ElementMatchers .isMethod ;
1316
1417import com .google .auto .service .AutoService ;
1518import datadog .environment .JavaVirtualMachine ;
19+ import datadog .trace .agent .tooling .ExcludeFilterProvider ;
1620import datadog .trace .agent .tooling .Instrumenter ;
1721import datadog .trace .agent .tooling .InstrumenterModule ;
1822import datadog .trace .bootstrap .ContextStore ;
1923import datadog .trace .bootstrap .InstrumentationContext ;
2024import datadog .trace .bootstrap .instrumentation .api .AgentScope ;
2125import datadog .trace .bootstrap .instrumentation .java .concurrent .ConcurrentState ;
26+ import datadog .trace .bootstrap .instrumentation .java .concurrent .ExcludeFilter ;
27+ import java .util .Collection ;
2228import java .util .HashMap ;
2329import java .util .Map ;
2430import net .bytebuddy .asm .Advice ;
6369@ SuppressWarnings ("unused" )
6470@ AutoService (InstrumenterModule .class )
6571public final class VirtualThreadInstrumentation extends InstrumenterModule .ContextTracking
66- implements Instrumenter .ForBootstrap , Instrumenter .ForSingleType , Instrumenter .HasMethodAdvice {
72+ implements Instrumenter .ForBootstrap ,
73+ Instrumenter .ForSingleType ,
74+ Instrumenter .HasMethodAdvice ,
75+ ExcludeFilterProvider {
6776
6877 public VirtualThreadInstrumentation () {
6978 super ("java-lang" , "java-lang-21" , "virtual-thread" );
@@ -79,6 +88,12 @@ public boolean isEnabled() {
7988 return JavaVirtualMachine .isJavaVersionAtLeast (21 ) && super .isEnabled ();
8089 }
8190
91+ @ Override
92+ public Map <ExcludeFilter .ExcludeType , ? extends Collection <String >> excludedClasses () {
93+ // VirtualThread context is activated on mount/unmount, not on Runnable.run().
94+ return singletonMap (RUNNABLE , singletonList (VIRTUAL_THREAD_CLASS_NAME ));
95+ }
96+
8297 @ Override
8398 public Map <String , String > contextStore () {
8499 Map <String , String > contextStore = new HashMap <>();
0 commit comments