public ComparisonData(RunDefinition before, RunDefinition after, ReportAverages beforeDisplayed, ReportAverages afterDisplayed, ReportAverages beforeNativeToManaged, ReportAverages afterNativeToManaged, ReportAverages beforeTotalInit, ReportAverages afterTotalInit) { Before = before; After = after; BeforeDisplayed = beforeDisplayed; AfterDisplayed = afterDisplayed; BeforeNativeToManaged = beforeNativeToManaged; AfterNativeToManaged = afterNativeToManaged; BeforeTotalInit = beforeTotalInit; AfterTotalInit = afterTotalInit; }
void Averages(StreamWriter sw, string title, Project project, List <Column <ReportLinePerformance> > columns, Action <List <RunResults> > sorter) { sw.WriteLine(); sw.WriteLine($"### {title}"); sw.WriteLine(); var reportLines = new List <ReportLinePerformance> (); var sortedAverages = new List <RunResults> (); var reportLinesNoOutliers = new List <ReportLinePerformance> (); var sortedAveragesNoOutliers = new List <RunResults> (); var reportLinesNoSlowest = new List <ReportLinePerformance> (); var sortedAveragesNoSlowest = new List <RunResults> (); foreach (RunDefinition run in project.Runs) { var averages = new ReportAverages(run, project.RepetitionCount, sorter); sortedAverages.Add(averages.All); reportLines.Add(new ReportLinePerformance()); if (averages.NoOutliers != null) { sortedAveragesNoOutliers.Add(averages.NoOutliers); reportLinesNoOutliers.Add(new ReportLinePerformance()); } if (averages.NoSlowest != null) { sortedAveragesNoSlowest.Add(averages.NoSlowest); reportLinesNoSlowest.Add(new ReportLinePerformance()); } } bool haveOutliers = sortedAveragesNoOutliers.Count > 0; bool haveNoSlowest = sortedAveragesNoSlowest.Count > 0; SortAndPrepare(sortedAverages, reportLines); if (haveOutliers || haveNoSlowest) { sw.WriteLine("All runs:"); } WriteTable(sw, reportLines, columns); if (haveNoSlowest) { SortAndPrepare(sortedAveragesNoSlowest, reportLinesNoSlowest); sw.WriteLine(); sw.WriteLine("Slowest run removed:"); WriteTable(sw, reportLinesNoSlowest, columns); } if (haveOutliers) { SortAndPrepare(sortedAveragesNoOutliers, reportLinesNoOutliers); sw.WriteLine(); sw.WriteLine("Slowest and fastest runs removed:"); WriteTable(sw, reportLinesNoOutliers, columns); } void SortAndPrepare(List <RunResults> averages, List <ReportLinePerformance> lines) { sorter(averages); for (int i = 0; i < averages.Count; i++) { RunResults average = averages[i]; ReportLinePerformance rl = lines[i]; rl.NativeToManaged = ToMilliseconds(average.NativeToManaged); rl.TotalInit = ToMilliseconds(average.TotalInit); rl.Displayed = ToMilliseconds(average.Displayed); rl.Notes = average.Owner.Description; } } }