From db8fbb3ac1b00b4c33bf12509b56a101725599fd Mon Sep 17 00:00:00 2001 From: Daniel Romano <108014683+daniel-romano-DD@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:01:33 +0200 Subject: [PATCH 1/5] Added BenchmarkDotNet debug helper --- .../benchmarks/Benchmarks.Trace/Program.cs | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs index bd748158d01d..be1bdbabc9c2 100644 --- a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs +++ b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs @@ -8,13 +8,24 @@ using BenchmarkDotNet.Filters; using Benchmarks.Trace.DatadogProfiler; using Benchmarks.Trace.Jetbrains; +using Benchmarks.Trace.Iast; +using System.Reflection.Metadata; +using BenchmarkDotNet.Attributes; +using System.Reflection; +using Datadog.Trace.Vendors.Newtonsoft.Json.Utilities; +using System.Collections; namespace Benchmarks.Trace { internal class Program { - private static void Main(string[] args) + private static int Main(string[] args) { +#if DEBUG + // Debug benchmark classes here + return Debug("RunStringAspectBenchmark"); +#endif + Console.WriteLine($"Execution context: "); Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name); @@ -67,6 +78,52 @@ private static void Main(string[] args) Console.WriteLine("Running tests..."); BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, config); + + return 0; + } + + private static int Debug(string methodName, params object[] arguments) + where T : class, new() + { + // Retrieve the Benchmark method + var benchmarkMethod = typeof(T).GetMethod(methodName); + var initMethod = typeof(T).GetMethods().FirstOrDefault(m => Attribute.GetCustomAttribute(m, typeof(IterationSetupAttribute)) != null); + var cleanupMethod = typeof(T).GetMethods().FirstOrDefault(m => Attribute.GetCustomAttribute(m, typeof(IterationCleanupAttribute)) != null); + + //Retrieve Arguments + MethodInfo argMethod = null; + var argAttribute = Attribute.GetCustomAttribute(benchmarkMethod, typeof(ArgumentsSourceAttribute)); + if (argAttribute != null) + { + var argMethodName = argAttribute.GetType().GetProperty("Name").GetValue(argAttribute) as string; + argMethod = typeof(T).GetMethod(argMethodName); + } + + T instance = new T(); + if (arguments.Length > 0 || argMethod == null) + { + Debug(instance, benchmarkMethod, arguments, initMethod, cleanupMethod); + } + else + { + var argEnumerable = argMethod?.Invoke(instance, null) as IEnumerable; + foreach (var arg in argEnumerable) + { + Debug(instance, benchmarkMethod, new object[] { arg }, initMethod, cleanupMethod); + } + } + + // Retrieve the Benchmark methods + var benchmarkMethods = typeof(T).GetMethods().Where(m => Attribute.GetCustomAttribute(m, typeof(BenchmarkDotNet.Attributes.BenchmarkAttribute)) != null).ToList(); + + return 0; + + } + private static void Debug(object instance, MethodInfo method, object[] args, MethodInfo initMethod, MethodInfo cleanupMethod) + { + initMethod?.Invoke(instance, null); + method.Invoke(instance, args.Length > 0 ? args : null); + cleanupMethod?.Invoke(instance, null); } } } From a1c15508397cc059f3614caf4e8f8b91a1335382 Mon Sep 17 00:00:00 2001 From: Daniel Romano <108014683+daniel-romano-DD@users.noreply.github.com> Date: Wed, 11 Oct 2023 22:03:24 +0200 Subject: [PATCH 2/5] Added missing comment --- tracer/test/benchmarks/Benchmarks.Trace/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs index be1bdbabc9c2..3e0762482a31 100644 --- a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs +++ b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs @@ -23,7 +23,7 @@ private static int Main(string[] args) { #if DEBUG // Debug benchmark classes here - return Debug("RunStringAspectBenchmark"); + // Example: return Debug("RunStringAspectBenchmark"); #endif Console.WriteLine($"Execution context: "); From 84c58fed972de6bbd85194568ecad53c440b61f7 Mon Sep 17 00:00:00 2001 From: Daniel Romano <108014683+daniel-romano-DD@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:43:05 +0100 Subject: [PATCH 3/5] Update Program.cs Removed unnecessary using clause --- tracer/test/benchmarks/Benchmarks.Trace/Program.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs index 3e0762482a31..792ce2795cf9 100644 --- a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs +++ b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs @@ -8,7 +8,6 @@ using BenchmarkDotNet.Filters; using Benchmarks.Trace.DatadogProfiler; using Benchmarks.Trace.Jetbrains; -using Benchmarks.Trace.Iast; using System.Reflection.Metadata; using BenchmarkDotNet.Attributes; using System.Reflection; From 204350fc8fef2b66f3de8004a7e180ea178e580d Mon Sep 17 00:00:00 2001 From: Daniel Romano <108014683+daniel-romano-DD@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:00:03 +0100 Subject: [PATCH 4/5] Update Program.cs Removed unused code --- tracer/test/benchmarks/Benchmarks.Trace/Program.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs index 792ce2795cf9..95ce59a523c5 100644 --- a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs +++ b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs @@ -112,9 +112,6 @@ private static int Debug(string methodName, params object[] arguments) } } - // Retrieve the Benchmark methods - var benchmarkMethods = typeof(T).GetMethods().Where(m => Attribute.GetCustomAttribute(m, typeof(BenchmarkDotNet.Attributes.BenchmarkAttribute)) != null).ToList(); - return 0; } From 1b1c7ab60d5b54ff40541d542f5d2c1c516108c3 Mon Sep 17 00:00:00 2001 From: Daniel Romano <108014683+daniel-romano-DD@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:00:31 +0100 Subject: [PATCH 5/5] Update Program.cs --- tracer/test/benchmarks/Benchmarks.Trace/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs index 95ce59a523c5..a1bb949ab480 100644 --- a/tracer/test/benchmarks/Benchmarks.Trace/Program.cs +++ b/tracer/test/benchmarks/Benchmarks.Trace/Program.cs @@ -78,7 +78,7 @@ private static int Main(string[] args) Console.WriteLine("Running tests..."); BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, config); - return 0; + return Environment.ExitCode; } private static int Debug(string methodName, params object[] arguments)