Skip to content

Conversation

@adamsitnik
Copy link
Member

@adamsitnik adamsitnik commented Dec 12, 2024

I got this feature request from the VS Profiler Team

The code sample I've used:

using BenchmarkDotNet.Analysers;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Reports;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Validators;
using System;
using System.Collections.Generic;

namespace BenchmarkDotNet.Samples
{
    [Config(typeof(ConfigWithSuspendEnvVars))]
    public class IntroProcessResume
    {
        // DOTNET_DefaultDiagnosticPortSuspend=1
        private class ConfigWithSuspendEnvVars : ManualConfig
        {
            public ConfigWithSuspendEnvVars()
            {
                AddJob(Job.Dry.WithRuntime(CoreRuntime.Core80)
                    .WithEnvironmentVariables([
                        new EnvironmentVariable("DOTNET_DefaultDiagnosticPortSuspend", "1"),
                    ])
                    .WithId("Suspended"));
                AddDiagnoser(new DummyDiagnoser());
            }
        }

        private class DummyDiagnoser : IDiagnoser
        {
            public IEnumerable<string> Ids => [nameof(DummyDiagnoser)];

            public IEnumerable<IExporter> Exporters => [];

            public IEnumerable<IAnalyser> Analysers => [];

            public void DisplayResults(ILogger logger) { }

            public Diagnosers.RunMode GetRunMode(BenchmarkCase benchmarkCase)
                => Diagnosers.RunMode.NoOverhead;

            public void Handle(HostSignal signal, DiagnoserActionParameters parameters)
                => Console.WriteLine($"Signal: {signal}, PID: {(signal == HostSignal.BeforeProcessStart ? -1 : parameters.Process.Id)}");

            public IEnumerable<Metric> ProcessResults(DiagnoserResults results) => [];

            public IEnumerable<ValidationError> Validate(ValidationParameters validationParameters) => [];
        }

        [Benchmark]
        public void Foo()
        {
            // Benchmark body
        }
    }
}

@adamsitnik adamsitnik added this to the v0.14.1 milestone Dec 12, 2024
@adamsitnik adamsitnik merged commit cd50f7b into master Dec 13, 2024
14 checks passed
@adamsitnik adamsitnik deleted the processResume branch December 13, 2024 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants