public sealed override void Generate(IBenchmarksReportSource source) { var slotIdentifier = source.SlotIdentifier; var projectID = GetProjectID(source); var protein = GetProtein(projectID); var colors = source.Colors; if (slotIdentifier is null || projectID is null || protein is null) { Result = null; return; } var benchmarks = SortBenchmarks(BenchmarkService.GetBenchmarks(slotIdentifier.Value, protein.ProjectNumber)); var zg = CreateZedGraphControl(); try { GraphPane pane = zg.GraphPane; // Create the bars for each benchmark int i = 0; double yMaximum = 0.0; foreach (ProteinBenchmark benchmark in benchmarks) { var yPoints = GetYPoints(protein, benchmark); foreach (var y in yPoints) { yMaximum = Math.Max(yMaximum, y); } string label = GetSlotNameAndProcessor(benchmark, protein); var color = GetNextColor(i++, colors); AddBar(pane, label, yPoints, color); } ConfigureXAxis(pane.XAxis, protein); ConfigureYAxis(pane.YAxis, yMaximum); FillChart(pane.Chart); FillGraphPane(pane); } finally { zg.AxisChange(); } Result = zg; }
public override void Generate(IBenchmarksReportSource source) { var benchmarkText = new List <string>(); var slotIdentifier = source.SlotIdentifier; var projects = source.Projects; if (slotIdentifier is null || projects.Count == 0) { Result = benchmarkText; return; } string numberFormat = NumberFormat.Get(Preferences.Get <int>(Preference.DecimalPlaces)); var bonusCalculation = Preferences.Get <BonusCalculation>(Preference.BonusCalculation); bool calculateBonus = bonusCalculation != BonusCalculation.None; foreach (var projectID in projects) { var protein = ProteinService.Get(projectID); if (protein is null) { benchmarkText.Add(String.Format(CultureInfo.InvariantCulture, " Project ID: {0} Not Found", projectID)); benchmarkText.AddRange(Enumerable.Repeat(String.Empty, 2)); continue; } var benchmarks = BenchmarkService.GetBenchmarks(slotIdentifier.Value, protein.ProjectNumber) .OrderBy(x => x.SlotIdentifier.Name) .ThenBy(x => x.Threads); benchmarkText .AddRange(EnumerateProjectInformation(protein) .Concat(Enumerable.Repeat(String.Empty, 2))); foreach (var b in benchmarks) { benchmarkText .AddRange(EnumerateBenchmarkInformation(protein, b, numberFormat, calculateBonus) .Concat(EnumerateSlotInformation(FindRunningSlot(b), numberFormat, bonusCalculation)) .Concat(Enumerable.Repeat(String.Empty, 2))); } } Result = benchmarkText; }
public override void Generate(IBenchmarksReportSource source) { var slotIdentifier = source.SlotIdentifier; var projects = source.Projects; var colors = source.Colors; if (slotIdentifier is null || projects.Count == 0) { Result = null; return; } var benchmarks = BenchmarkService.GetBenchmarks(slotIdentifier.Value, projects) .OrderBy(x => x.SlotIdentifier.Name) .ThenBy(x => x.Threads) .ToList(); if (benchmarks.Count == 0) { Result = null; return; } var projectToXAxisOrdinal = BuildProjectToXAxisOrdinal(benchmarks); var zg = CreateZedGraphControl(); try { GraphPane pane = zg.GraphPane; int i = 0; var ppd = new List <double>(); foreach (var group in benchmarks.GroupBy(x => (x.SlotIdentifier, x.Processor, x.Threads))) { PointPairList points; string label; (points, label) = BuildSlotPoints(group.OrderBy(x => x.ProjectID), projectToXAxisOrdinal); if (points.Count > 0) { // collection PPD values from all points ppd.AddRange(points.Select(p => p.Y)); Color color = GetNextColor(i++, colors); AddSlotCurve(pane, label, points, color); } } if (ppd.Count > 0) { var averagePPD = ppd.Average(); var averagePoints = BuildAveragePoints(averagePPD, projectToXAxisOrdinal); AddAverageCurve(pane, averagePoints); } ConfigureXAxis(pane.XAxis, projectToXAxisOrdinal); ConfigureYAxis(pane.YAxis, ppd.Max()); FillGraphPane(pane); } finally { zg.AxisChange(); } Result = zg; }