public VersionAnalysisDataSource(string rootDir, string versionFolder) { Logger.Log($"Processing individual version {versionFolder}"); //Parallel.ForEach(Directory.EnumerateDirectories(versionFolder), benchmarkFolder => foreach (var benchmarkFolder in Directory.EnumerateDirectories(versionFolder)) { var ds = new BenchmarkDataSource(rootDir, benchmarkFolder); lock (BenchmarkResults) { BenchmarkResults.Add(ds); } } ; Version = JsonConvert.DeserializeObject <CoreClrVersion>( File.ReadAllText(Path.Combine(versionFolder, Constants.VersionJsonName))); }
protected IEnumerable <MetricValue> CalculateMetrics(BenchmarkDataSource bench) { foreach (var metric in m_metrics.Metrics) { List <double> values = new List <double>(); foreach (var iter in bench.Iterations) { values.Add(metric.GetValue(iter)); } yield return(new MetricValue { Name = metric.Name, Unit = metric.Unit, Value = values.Average(), StandardDeviation = values.StandardDeviation(), SampleSize = values.Count }); } }
private BenchmarkComparisonAnalysisResult DoSingleBenchmarkComparison(BenchmarkDataSource baseline, BenchmarkDataSource candidate) { var result = new BenchmarkComparisonAnalysisResult(); var baselineMetrics = CalculateMetrics(baseline); var candidateMetrics = CalculateMetrics(candidate); foreach (var metric in baselineMetrics.Zip(candidateMetrics, Tuple.Create)) { var baselineMetric = metric.Item1; var candidateMetric = metric.Item2; var comp = new MetricComparison(); comp.Metric = baselineMetric.Name; comp.Unit = baselineMetric.Unit; comp.Baseline = baselineMetric; comp.Candidate = candidateMetric; comp.Decision = MakeDecision(baselineMetric, candidateMetric); result.Metrics.Add(comp); } result.Benchmark = baseline.Benchmark; return(result); }