Example #1
0
 private BenchmarkCase(Descriptor descriptor, Job job, ParameterInstances parameters, ImmutableConfig config)
 {
     Descriptor = descriptor;
     Job        = job;
     Parameters = parameters;
     Config     = config;
 }
        private string Format(Summary summary, ImmutableConfig config, Statistics statistics, SummaryStyle style)
        {
            if (statistics == null)
            {
                return("NA");
            }

            var allValues = summary
                            .Reports
                            .Where(r => r.ResultStatistics != null)
                            .Select(r => calc(r.ResultStatistics))
                            .Where(v => !double.IsNaN(v) && !double.IsInfinity(v))
                            .Select(v => UnitType == UnitType.Time ? v / style.TimeUnit.NanosecondAmount : v)
                            .ToList();
            double minValue          = allValues.Any() ? allValues.Min() : 0;
            bool   allValuesAreZeros = allValues.All(v => Math.Abs(v) < 1e-9);
            string format            = "N" + (allValuesAreZeros ? 1 : GetBestAmountOfDecimalDigits(minValue));

            double value = calc(statistics);

            if (double.IsNaN(value))
            {
                return("NA");
            }
            return(UnitType == UnitType.Time
                   ? value.ToTimeStr(style.TimeUnit, config.Encoding, format, 1, style.PrintUnitsInContent)
                   : value.ToStr(format));
        }
Example #3
0
        private string Format(Summary summary, ImmutableConfig config, Statistics statistics, SummaryStyle style)
        {
            if (statistics == null)
            {
                return("NA");
            }

            int    precision = summary.DisplayPrecisionManager.GetPrecision(style, this, parentColumn);
            string format    = "N" + precision;

            double value = calc(statistics);

            if (double.IsNaN(value))
            {
                return("NA");
            }
            return(UnitType == UnitType.Time
                ? TimeInterval.FromNanoseconds(value)
                   .ToString(
                       style.TimeUnit,
                       style.CultureInfo,
                       format,
                       UnitPresentation.FromVisibility(style.PrintUnitsInContent))
                : value.ToString(format, style.CultureInfo));
        }
Example #4
0
        public static string getDetailedResultsAndSummary(this Summary summary)
        {
            StringLogger?logger = new StringLogger();

            if (summary.HasCriticalValidationErrors)
            {
                foreach (ValidationError validationError in summary.ValidationErrors)
                {
                    logger.WriteLine(validationError.Message);
                }
            }
            else
            {
                // extracted from https://github.com/dotnet/BenchmarkDotNet/blob/ceef311bfc73a08a3b07f177f6b9f9782191b794/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs PrintSummary()

                CultureInfo?cultureInfo = summary.GetCultureInfo();
                // logger.WriteLineHeader("// * Detailed results *");
                // BenchmarkReportExporter.Default.ExportToLog(summary, logger);
                logger.WriteLineHeader("// * Summary *");
                MarkdownExporter.Console.ExportToLog(summary, logger);
                ImmutableConfig config = DefaultConfig.Instance.CreateImmutableConfig();
                ConclusionHelper.Print(logger, config.GetCompositeAnalyser().Analyse(summary).Distinct().ToList());

                /*var columnWithLegends = summary.Table.Columns.Select(c => c.OriginalColumn).Where(c => !string.IsNullOrEmpty(c.Legend)).ToList();
                 * var effectiveTimeUnit = summary.Table.EffectiveSummaryStyle.TimeUnit;
                 * if (columnWithLegends.Any() || effectiveTimeUnit != null) {
                 *  logger.WriteLine();
                 *  logger.WriteLineHeader("// * Legends *");
                 *  int maxNameWidth = 0;
                 *  if (columnWithLegends.Any())
                 *      maxNameWidth = Math.Max(maxNameWidth, columnWithLegends.Select(c => c.ColumnName.Length).Max());
                 *  if (effectiveTimeUnit != null)
                 *      maxNameWidth = Math.Max(maxNameWidth, effectiveTimeUnit.Name.ToString(cultureInfo).Length + 2);
                 *
                 *  foreach (var column in columnWithLegends)
                 *      logger.WriteLineHint($"  {column.ColumnName.PadRight(maxNameWidth, ' ')} : {column.Legend}");
                 *
                 *  if (effectiveTimeUnit != null)
                 *      logger.WriteLineHint($"  {("1 " + effectiveTimeUnit.Name).PadRight(maxNameWidth, ' ')} :" +
                 *                           $" 1 {effectiveTimeUnit.Description} ({TimeUnit.Convert(1, effectiveTimeUnit, TimeUnit.Second).ToString("0.#########", summary.GetCultureInfo())} sec)");
                 * }*/

                if (config.GetDiagnosers().Any())
                {
                    logger.WriteLine();
                    config.GetCompositeDiagnoser().DisplayResults(logger);
                }
            }

            return(logger.toString());
        }
Example #5
0
        private string Format(Summary summary, ImmutableConfig config, Statistics statistics, SummaryStyle style)
        {
            string strRes = "NA";

            if (statistics != null)
            {
                double value = calc(statistics);
                if (!double.IsNaN(value))
                {
                    strRes = value.ToString("P", CultureInfo.InvariantCulture);
                }
            }
            return(strRes);
        }
        private static IEnumerable <BenchmarkCase> GenerateBenchmarkCases(int count)
        {
            MethodInfo publicMethod = typeof(PartitionFilterTests)
                                      .GetMethods()
                                      .Single(method => method.Name == nameof(NoBenchmarksAreOmitted_MockData));

            Descriptor         target             = new (typeof(PartitionFilterTests), publicMethod);
            ParameterInstances parameterInstances = new (Array.Empty <ParameterInstance>());
            ImmutableConfig    config             = ManualConfig.CreateEmpty().CreateImmutableConfig();

            for (int i = 0; i < count; i++)
            {
                yield return(BenchmarkCase.Create(target, Job.Default, parameterInstances, config));
            }
        }
        private static ImmutableConfig GetFullMethodConfig(MethodInfo method, ImmutableConfig typeConfig)
        {
            var methodAttributes = method.GetCustomAttributes(true).OfType <IConfigSource>();

            if (!methodAttributes.Any()) // the most common case
            {
                return(typeConfig);
            }

            var config = ManualConfig.Create(typeConfig);

            foreach (var configFromAttribute in methodAttributes)
            {
                config = ManualConfig.Union(config, configFromAttribute.Config);
            }

            return(ImmutableConfigBuilder.Create(config));
        }
        private string Format(Summary summary, ImmutableConfig config, Statistics statistics, SummaryStyle style)
        {
            if (statistics == null)
            {
                return("NA");
            }

            int    precision = summary.DisplayPrecisionManager.GetPrecision(style, this, parentColumn);
            string format    = "N" + precision;

            double value = calc(statistics);

            if (double.IsNaN(value))
            {
                return("NA");
            }
            return(UnitType == UnitType.Time
                   ? value.ToTimeStr(style.TimeUnit, config.Encoding, format, 1, style.PrintUnitsInContent)
                   : value.ToStr(format));
        }
        private static BenchmarkRunInfo MethodsToBenchmarksWithFullConfig(Type containingType, MethodInfo[] benchmarkMethods, ImmutableConfig immutableConfig)
        {
            if (immutableConfig == null)
            {
                throw new ArgumentNullException(nameof(immutableConfig));
            }

            var helperMethods = containingType.GetMethods(); // benchmarkMethods can be filtered, without Setups, look #564

            var globalSetupMethods      = GetAttributedMethods <GlobalSetupAttribute>(helperMethods, "GlobalSetup");
            var globalCleanupMethods    = GetAttributedMethods <GlobalCleanupAttribute>(helperMethods, "GlobalCleanup");
            var iterationSetupMethods   = GetAttributedMethods <IterationSetupAttribute>(helperMethods, "IterationSetup");
            var iterationCleanupMethods = GetAttributedMethods <IterationCleanupAttribute>(helperMethods, "IterationCleanup");

            var targetMethods = benchmarkMethods.Where(method => method.HasAttribute <BenchmarkAttribute>()).ToArray();

            var parameterDefinitions   = GetParameterDefinitions(containingType);
            var parameterInstancesList = parameterDefinitions.Expand(immutableConfig.SummaryStyle);

            var jobs = immutableConfig.GetJobs();

            var targets = GetTargets(targetMethods, containingType, globalSetupMethods, globalCleanupMethods, iterationSetupMethods, iterationCleanupMethods).ToArray();

            var benchmarks = new List <BenchmarkCase>();

            foreach (var target in targets)
            {
                var argumentsDefinitions = GetArgumentsDefinitions(target.WorkloadMethod, target.Type, immutableConfig.SummaryStyle).ToArray();

                var parameterInstances =
                    (from parameterInstance in parameterInstancesList
                     from argumentDefinition in argumentsDefinitions
                     select new ParameterInstances(parameterInstance.Items.Concat(argumentDefinition.Items).ToArray())).ToArray();

                benchmarks.AddRange(
                    from job in jobs
                    from parameterInstance in parameterInstances
                    select BenchmarkCase.Create(target, job, parameterInstance, immutableConfig)
                    );
            }

            var filters            = immutableConfig.GetFilters().ToArray();
            var filteredBenchmarks = GetFilteredBenchmarks(benchmarks, filters);
            var orderedBenchmarks  = immutableConfig.Orderer.GetExecutionOrder(filteredBenchmarks).ToArray();

            return(new BenchmarkRunInfo(orderedBenchmarks, containingType, immutableConfig));
        }
 public ValidationParameters(IReadOnlyList <BenchmarkCase> benchmarks, ImmutableConfig config)
 {
     Benchmarks = benchmarks;
     Config     = config;
 }
Example #11
0
 public static BenchmarkCase Create(Descriptor descriptor, Job job, ParameterInstances parameters, ImmutableConfig config)
 => new BenchmarkCase(descriptor, job.MakeSettingsUserFriendly(descriptor), parameters, config);
Example #12
0
 public BenchmarkRunInfo(BenchmarkCase[] benchmarksCase, Type type, ImmutableConfig config)
 {
     BenchmarksCases = benchmarksCase;
     Type            = type;
     Config          = config;
 }
Example #13
0
 public BenchmarkBuildInfo(BenchmarkCase benchmarkCase, ImmutableConfig config, int id)
 {
     BenchmarkCase = benchmarkCase;
     Config        = config;
     Id            = new BenchmarkId(id, benchmarkCase);
 }