Skip to content

Commit ca680ba

Browse files
authored
Record public classes in compact filter (#6860)
1 parent 387464f commit ca680ba

4 files changed

Lines changed: 58 additions & 0 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package datadog.trace.agent.tooling.bytebuddy.outline;
2+
3+
import datadog.trace.agent.tooling.bytebuddy.ClassCodeFilter;
4+
import datadog.trace.api.InstrumenterConfig;
5+
6+
/** Compact filter that records public types. */
7+
final class IsPublicFilter extends ClassCodeFilter {
8+
IsPublicFilter() {
9+
super(InstrumenterConfig.get().getResolverVisibilitySize());
10+
}
11+
}

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/TypeFactory.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ final class TypeFactory {
7070
private static final boolean OUTLINING_ENABLED =
7171
InstrumenterConfig.get().isResolverOutliningEnabled();
7272

73+
private static final boolean MEMOIZING_ENABLED =
74+
InstrumenterConfig.get().isResolverMemoizingEnabled();
75+
7376
private static final TypeParser outlineTypeParser = new OutlineTypeParser();
7477

7578
private static final TypeParser fullTypeParser = new FullTypeParser();
@@ -83,6 +86,8 @@ final class TypeFactory {
8386
private static final TypeInfoCache<TypeDescription> fullTypes =
8487
new TypeInfoCache<>(InstrumenterConfig.get().getResolverTypePoolSize());
8588

89+
static final IsPublicFilter isPublicFilter = new IsPublicFilter();
90+
8691
/** Small local cache to help deduplicate lookups when matching/transforming. */
8792
private final DDCache<String, LazyType> deferredTypes = DDCaches.newFixedSizeCache(16);
8893

@@ -273,6 +278,12 @@ private TypeDescription lookupType(
273278

274279
InstrumenterMetrics.buildTypeDescription(fromTick, isOutline);
275280

281+
if (MEMOIZING_ENABLED && null != type) {
282+
if (type.isPublic()) {
283+
isPublicFilter.add(name);
284+
}
285+
}
286+
276287
// share result, whether we found it or not
277288
types.share(name, classLoader, classFile, type);
278289

@@ -377,6 +388,11 @@ public TypeDescription getDeclaringType() {
377388
return outline().getDeclaringType();
378389
}
379390

391+
@Override
392+
public boolean isPublic() {
393+
return isPublicFilter.contains(name) || super.isPublic();
394+
}
395+
380396
private TypeDescription outline() {
381397
if (null != delegate) {
382398
return delegate; // will be at least an outline, no need to re-resolve

internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,10 @@ public int getResolverNoMatchesSize() {
350350
return resolverCacheConfig.noMatchesSize();
351351
}
352352

353+
public int getResolverVisibilitySize() {
354+
return resolverCacheConfig.visibilitySize();
355+
}
356+
353357
public boolean isResolverMemoizingEnabled() {
354358
return resolverCacheConfig.memoPoolSize() > 0;
355359
}

internal-api/src/main/java/datadog/trace/api/ResolverCacheConfig.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ public int noMatchesSize() {
1010
return 65536;
1111
}
1212

13+
@Override
14+
public int visibilitySize() {
15+
return 4096;
16+
}
17+
1318
@Override
1419
public int memoPoolSize() {
1520
return 4096;
@@ -33,6 +38,11 @@ public int noMatchesSize() {
3338
return 16384;
3439
}
3540

41+
@Override
42+
public int visibilitySize() {
43+
return 1024;
44+
}
45+
3646
@Override
3747
public int memoPoolSize() {
3848
return 2048;
@@ -56,6 +66,11 @@ public int noMatchesSize() {
5666
return 0;
5767
}
5868

69+
@Override
70+
public int visibilitySize() {
71+
return 0;
72+
}
73+
5974
@Override
6075
public int memoPoolSize() {
6176
return 0;
@@ -79,6 +94,11 @@ public int noMatchesSize() {
7994
return 0;
8095
}
8196

97+
@Override
98+
public int visibilitySize() {
99+
return 0;
100+
}
101+
82102
@Override
83103
public int memoPoolSize() {
84104
return 0;
@@ -102,6 +122,11 @@ public int noMatchesSize() {
102122
return 0;
103123
}
104124

125+
@Override
126+
public int visibilitySize() {
127+
return 0;
128+
}
129+
105130
@Override
106131
public int memoPoolSize() {
107132
return 0;
@@ -120,6 +145,8 @@ public int typePoolSize() {
120145

121146
public abstract int noMatchesSize();
122147

148+
public abstract int visibilitySize();
149+
123150
public abstract int memoPoolSize();
124151

125152
public abstract int outlinePoolSize();

0 commit comments

Comments
 (0)