Skip to content

Commit 72eddfb

Browse files
committed
fixed problem with non-expired tokens that caused overhead
1 parent 8978e3f commit 72eddfb

File tree

20 files changed

+283
-15
lines changed

20 files changed

+283
-15
lines changed
Binary file not shown.
2.19 KB
Binary file not shown.

Kotlin-Coroutines_1.3.3/build/tmp/compileJava/source-classes-mapping.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ kotlinx/coroutines/CompletionHandlerBase.java
66
kotlinx.coroutines.CompletionHandlerBase
77
kotlinx/coroutines/Job.java
88
kotlinx.coroutines.Job
9+
com/nr/instrumentation/kotlin/coroutines/NRFunction2.java
10+
com.nr.instrumentation.kotlin.coroutines.NRFunction2
911
kotlin/coroutines/jvm/internal/BaseContinuationImpl.java
1012
kotlin.coroutines.jvm.internal.BaseContinuationImpl
1113
kotlinx/coroutines/InvokeOnCancelling.java
@@ -30,5 +32,7 @@ kotlinx/coroutines/CoroutineStart.java
3032
kotlinx.coroutines.CoroutineStart
3133
kotlinx/coroutines/CancelHandlerBase.java
3234
kotlinx.coroutines.CancelHandlerBase
35+
com/nr/instrumentation/kotlin/coroutines/NRFunction1.java
36+
com.nr.instrumentation.kotlin.coroutines.NRFunction1
3337
kotlinx/coroutines/channels/ReceiveChannel.java
3438
kotlinx.coroutines.channels.ReceiveChannel

Kotlin-Coroutines_1.3.3/build/verifier/passes.txt

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.nr.instrumentation.kotlin.coroutines;
2+
3+
import com.newrelic.agent.bridge.AgentBridge;
4+
import com.newrelic.api.agent.Trace;
5+
6+
import kotlin.jvm.functions.Function1;
7+
8+
public class NRFunction1<P1, R> implements Function1<P1, R> {
9+
10+
private Function1<P1, R> delegate = null;
11+
private static boolean isTransformed = false;
12+
13+
public NRFunction1(Function1<P1, R> d) {
14+
delegate = d;
15+
if(!isTransformed) {
16+
isTransformed = true;
17+
AgentBridge.instrumentation.retransformUninstrumentedClass(getClass());
18+
}
19+
}
20+
21+
@Override
22+
@Trace(dispatcher=true)
23+
public R invoke(P1 arg0) {
24+
return delegate.invoke(arg0);
25+
}
26+
27+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.nr.instrumentation.kotlin.coroutines;
2+
3+
import com.newrelic.agent.bridge.AgentBridge;
4+
import com.newrelic.api.agent.Trace;
5+
6+
import kotlin.jvm.functions.Function2;
7+
8+
public class NRFunction2<P1, P2, R> implements Function2<P1, P2, R> {
9+
10+
Function2<P1, P2, R> delegate = null;
11+
private static boolean isTransformed = false;
12+
13+
public NRFunction2(Function2<P1, P2, R> d) {
14+
delegate = d;
15+
if(!isTransformed) {
16+
isTransformed = true;
17+
AgentBridge.instrumentation.retransformUninstrumentedClass(getClass());
18+
}
19+
}
20+
21+
@Override
22+
@Trace(dispatcher=true)
23+
public R invoke(P1 arg0, P2 arg1) {
24+
25+
return delegate.invoke(arg0, arg1);
26+
}
27+
28+
}

Kotlin-Coroutines_1.3.3/src/main/java/kotlin/coroutines/jvm/internal/BaseContinuationImpl.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
package kotlin.coroutines.jvm.internal;
22

33
import com.newrelic.api.agent.NewRelic;
4+
import com.newrelic.api.agent.Token;
45
import com.newrelic.api.agent.Trace;
56
import com.newrelic.api.agent.weaver.MatchType;
7+
import com.newrelic.api.agent.weaver.NewField;
68
import com.newrelic.api.agent.weaver.Weave;
79
import com.newrelic.api.agent.weaver.Weaver;
810

11+
import kotlin.coroutines.Continuation;
12+
913
@Weave(type=MatchType.BaseClass)
1014
public abstract class BaseContinuationImpl {
1115

16+
// @NewField
17+
// private Token token = null;
18+
19+
public BaseContinuationImpl(Continuation<Object> c) {
20+
// if(token == null) {
21+
// token = NewRelic.getAgent().getTransaction().getToken();
22+
// }
23+
}
24+
25+
@Trace(async=true)
26+
protected Object invokeSuspend(java.lang.Object obj) {
27+
// if(token != null) {
28+
// token.linkAndExpire();
29+
// token = null;
30+
// }
31+
String name = null;
32+
StackTraceElement element = getStackTraceElement();
33+
if(element != null) {
34+
name = element.getClassName() + "." + element.getMethodName();
35+
}
36+
if(name != null) {
37+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Continuation",name,"invokeSuspend");
38+
}
39+
return Weaver.callOriginal();
40+
}
1241

1342
@Trace
1443
public void resumeWith(Object obj) {

0 commit comments

Comments
 (0)