Skip to content

Commit eb9acab

Browse files
authored
Fix Asm benchmark and stop-reinitializing tracer (#7750)
## Summary of changes - Fix ASM benchmarks by not returning `null` from `EmptyDatadogTracer.PerTraceSettings` - Stop re-initializing `TracerSettings` for every execution of the ASM benchmark ## Reason for change The ASM benchmarks have been broken since #7543 (I think). This is because the `EmptyDatadogTracer` stub used in the benchmark returns `null` from `PerTraceSettings` (which can't happen in practice). Additionally, noticed that the benchmark is repeatedly creating a new `TracerSettings` object with every execution, which will add noise and be much more expensive than real life. ## Implementation details - Ensure `EmptyDatadogTracer.PerTraceSettings` returns a "real" value - Stop rebuilding `TracerSettings` with every execution ## Test coverage This is the test
1 parent 19fbd2b commit eb9acab

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

tracer/test/benchmarks/Benchmarks.Trace/Asm/AppSecBodyBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ static AppSecBodyBenchmark()
7373

7474
private void ExecuteCycle(object body)
7575
{
76-
var traceContext = new Datadog.Trace.TraceContext(new EmptyDatadogTracer(), null);
76+
var traceContext = new Datadog.Trace.TraceContext(EmptyDatadogTracer.Instance, null);
7777
var spanContext = new SpanContext(parent: null, traceContext, serviceName: "My Service Name", traceId: (TraceId)100, spanId: 200);
7878
var span = new Span(spanContext, DateTimeOffset.Now);
7979

tracer/test/benchmarks/Benchmarks.Trace/Asm/EmptyDatadogTracer.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,25 @@ namespace Benchmarks.Trace.Asm
1717
{
1818
public class EmptyDatadogTracer : IDatadogTracer
1919
{
20+
public static readonly EmptyDatadogTracer Instance = new();
21+
22+
private readonly IGitMetadataTagsProvider _gitMetadata;
23+
private readonly PerTraceSettings _perTraceSettings;
24+
25+
public EmptyDatadogTracer()
26+
{
27+
Settings = new(new NullConfigurationSource());
28+
_gitMetadata = new NullGitMetadataProvider();
29+
_perTraceSettings = new PerTraceSettings(null, null, null, Settings.InitialMutableSettings);
30+
}
31+
2032
public string DefaultServiceName => "My Service Name";
2133

22-
public TracerSettings Settings => new(new NullConfigurationSource());
34+
public TracerSettings Settings { get; }
2335

24-
IGitMetadataTagsProvider IDatadogTracer.GitMetadataTagsProvider => new NullGitMetadataProvider();
36+
IGitMetadataTagsProvider IDatadogTracer.GitMetadataTagsProvider => _gitMetadata;
2537

26-
PerTraceSettings IDatadogTracer.PerTraceSettings => null;
38+
PerTraceSettings IDatadogTracer.PerTraceSettings => _perTraceSettings;
2739

2840
void IDatadogTracer.Write(ArraySegment<Span> span)
2941
{

0 commit comments

Comments
 (0)