Example #1
0
        private static void Compare(CommandLineOptions args, IResultsComparerProvider comparerProvider, IReporterProvider reporterProvider)
        {
            try
            {
                IResultsComparer comparer = string.IsNullOrEmpty(args.Comparer) ?
                                            comparerProvider.GetForFile(args.BasePath) : comparerProvider.GetById(args.Comparer);

                Console.WriteLine($"Comparer selected: {comparer.Name}\n");


                ComparerOptions options = new()
                {
                    StatisticalTestThreshold = args.StatisticalTestThreshold,
                    NoiseThreshold           = args.NoiseThreshold,
                    FullId   = args.FullId,
                    TopCount = args.TopCount,
                    Filters  = args.Filters,
                    Metric   = args.Metric
                };

                ComparerResults results = comparer.CompareResults(args.BasePath, args.DiffPath, options);

                IReporter reporter = reporterProvider.GetDefault();
                Stream    output   = Console.OpenStandardOutput();
                reporter.GenerateReport(results, output, options, leaveStreamOpen: true);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine($"Error: {ex.Message}");
            }
        }
Example #2
0
        private static async Task Compare(CommandLineOptions args)
        {
            IResultsComparer comparer = new BdnComparer();

            try
            {
                ComparerOptions options = new()
                {
                    StatisticalTestThreshold = args.StatisticalTestThreshold,
                    NoiseThreshold           = args.NoiseThreshold,
                    FullId   = args.FullId,
                    TopCount = args.TopCount,
                    Filters  = args.Filters
                };

                ComparerResults results = await comparer.CompareResults(args.BasePath, args.DiffPath, options);

                if (results.NoDiff)
                {
                    return;
                }

                ComparerResult[] resultsArray = results.Results.ToArray();
                PrintSummary(resultsArray);

                PrintTable(resultsArray, EquivalenceTestConclusion.Slower, args);
                PrintTable(resultsArray, EquivalenceTestConclusion.Faster, args);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine($"Error: {ex.Message}");
            }
        }
        public void ComparesObjectAllocationsReportFiles()
        {
            string basePath = "Samples/VsProfiler/VsProfilerObjectAllocations.txt";
            string diffPath = "Samples/VsProfiler/VsProfilerObjectAllocations2.txt";

            VsTypeAllocationsComparer comparer = new();
            ComparerOptions           options  = new();

            ComparerResults results = comparer.CompareResults(basePath, diffPath, options);

            Assert.Equal("Allocations", results.MetricName);
            Dictionary <string, ComparerResult> comparisons = results.Results.ToDictionary(r => r.Id);

            Assert.Equal(6, comparisons.Count);
            // entries with same results are excluded
            Assert.False(comparisons.ContainsKey("System.Collections.Generic.List<>.Enumerator"));
            Assert.False(comparisons.ContainsKey("System.Linq.Enumerable.EnumerablePartition<>"));

            // diffs with smaller allocation values are considered better
            var listComparison = comparisons["System.Collections.Generic.List<>"];

            Assert.Equal(237933, listComparison.BaseResult.Result);
            Assert.Equal(237000, listComparison.DiffResult.Result);
            Assert.Equal(ComparisonConclusion.Better, listComparison.Conclusion);

            var stringComparison = comparisons["System.String"];

            Assert.Equal(128696, stringComparison.BaseResult.Result);
            Assert.Equal(125696, stringComparison.DiffResult.Result);
            Assert.Equal(ComparisonConclusion.Better, stringComparison.Conclusion);

            // diffs with larger allocation values are considered worse
            var intComparison = comparisons["System.Int32"];

            Assert.Equal(115446, intComparison.BaseResult.Result);
            Assert.Equal(125446, intComparison.DiffResult.Result);
            Assert.Equal(ComparisonConclusion.Worse, intComparison.Conclusion);

            // entries that exist in the base but not in the diff are considered missing
            var collectionComparison = comparisons["System.Collections.ObjectModel.Collection<>"];

            Assert.Equal(125001, collectionComparison.BaseResult.Result);
            Assert.Null(collectionComparison.DiffResult);
            Assert.Equal(ComparisonConclusion.Missing, collectionComparison.Conclusion);

            // entries that exist in the diff but not the base are considered new
            var odataPropertyComparison = comparisons["Microsoft.OData.ODataProperty"];

            Assert.Null(odataPropertyComparison.BaseResult);
            Assert.Equal(45000, odataPropertyComparison.DiffResult.Result);
            Assert.Equal(ComparisonConclusion.New, odataPropertyComparison.Conclusion);

            var arrayEnumeratorComparison = comparisons["System.SZGenericArrayEnumerator<>"];

            Assert.Null(arrayEnumeratorComparison.BaseResult);
            Assert.Equal(50147, arrayEnumeratorComparison.DiffResult.Result);
            Assert.Equal(ComparisonConclusion.New, arrayEnumeratorComparison.Conclusion);
        }
Example #4
0
        /// <inheritdoc/>
        public void GenerateReport(ComparerResults results, Stream destination, ComparerOptions options, bool leaveStreamOpen = false)
        {
            ComparerResult[] resultsArray = results.Results.ToArray();

            if (resultsArray.Length == 0)
            {
                return;
            }

            using StreamWriter writer = new(destination, leaveOpen : leaveStreamOpen);
            PrintSummary(resultsArray, writer);
            PrintTable(resultsArray, results.MetricName, ComparisonConclusion.Worse, writer, options);
            PrintTable(resultsArray, results.MetricName, ComparisonConclusion.Better, writer, options);
            PrintTable(resultsArray, results.MetricName, ComparisonConclusion.New, writer, options);
            PrintTable(resultsArray, results.MetricName, ComparisonConclusion.Missing, writer, options);
            writer.Flush();
        }
Example #5
0
        public void ComparerReportFilesAndGenerateMarkdownReport(string comparerId, ComparerOptions options, string basePath, string diffPath, string reportPath)
        {
            IResultsComparerProvider comparerProvider = ComparerProviderFactory.CreateDefaultProvider();
            IResultsComparer         comparer         = comparerProvider.GetById(comparerId);

            ComparerResults  results  = comparer.CompareResults(basePath, diffPath, options);
            MarkdownReporter reporter = new();

            using MemoryStream output = new();
            reporter.GenerateReport(results, output, options, leaveStreamOpen: true);

            output.Seek(0, SeekOrigin.Begin);
            string expectedReport = File.ReadAllText(reportPath);
            string actualReport   = new StreamReader(output).ReadToEnd();

            Assert.Equal(expectedReport, actualReport);
        }