benchmarks/Elastic.Apm.Benchmarks/TracerBenchmarks.cs (57 lines of code) (raw):

// Licensed to Elasticsearch B.V under one or more agreements. // Elasticsearch B.V licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information using BenchmarkDotNet.Attributes; using Elastic.Apm.Logging; using Elastic.Apm.Tests.Utilities; namespace Elastic.Apm.Benchmarks { /// <summary> /// Benchmarks related to tracer (like starting a transaction, span, etc.) /// </summary> [MemoryDiagnoser] public class TracerBenchmarks { private ApmAgent _agent; [GlobalSetup(Target = nameof(SimpleTransactionsWith1SpanWithStackTrace))] public void SetupWithStackTraceForAllSpans() => _agent = new ApmAgent(new AgentComponents(payloadSender: new MockPayloadSender(), configurationReader: new MockConfiguration(spanFramesMinDurationInMilliseconds: "-1ms"))); [GlobalSetup(Target = nameof(SimpleTransactionsWith1SpanWithoutStackTrace))] public void SetupWithTurnedOffStackTrace() => _agent = new ApmAgent(new AgentComponents(payloadSender: new MockPayloadSender(), configurationReader: new MockConfiguration(spanFramesMinDurationInMilliseconds: "0ms"))); [GlobalSetup(Target = nameof(Simple100Transaction10Spans))] public void DefaultAgentSetup() { var noopLogger = new NoopLogger(); _agent = new ApmAgent(new AgentComponents(payloadSender: new MockPayloadSender(), logger: noopLogger, configurationReader: new MockConfiguration(noopLogger))); } [GlobalSetup(Target = nameof(DebugLogSimpleTransaction10Spans))] public void DebugAgentSetup() { var testLogger = new PerfTestLogger(LogLevel.Debug); _agent = new ApmAgent(new AgentComponents(payloadSender: new MockPayloadSender(), logger: testLogger, configurationReader: new MockConfiguration(testLogger, "Debug"))); } [Benchmark] public void SimpleTransactionsWith1SpanWithStackTrace() => _agent.Tracer.CaptureTransaction("transaction", "perfTransaction", transaction => { transaction.CaptureSpan("span", "perfSpan", () => { }); }); [Benchmark] public void SimpleTransactionsWith1SpanWithoutStackTrace() => _agent.Tracer.CaptureTransaction("transaction", "perfTransaction", transaction => { transaction.CaptureSpan("span", "perfSpan", () => { }); }); [GlobalCleanup] public void GlobalCleanup() => _agent.Dispose(); [Benchmark] public void Simple100Transaction10Spans() => _agent.Tracer.CaptureTransaction("transaction", "perfTransaction", transaction => { for (var j = 0; j < 10; j++) transaction.CaptureSpan("span", "perfSpan", () => { }); }); [Benchmark] public void DebugLogSimpleTransaction10Spans() => _agent.Tracer.CaptureTransaction("transaction", "perfTransaction", transaction => { for (var j = 0; j < 10; j++) transaction.CaptureSpan("span", "perfSpan", () => { }); }); } }