private void PrintTable(SummaryTable table, ILogger logger) { if (table.FullContent.Length == 0) { logger.WriteLineError("There are no benchmarks found "); logger.NewLine(); return; } table.PrintCommonColumns(logger); logger.NewLine(); if (useCodeBlocks) { logger.Write("```"); logger.NewLine(); } table.PrintLine(table.FullHeader, logger, "", " |"); logger.NewLine(); logger.WriteLineStatistic(string.Join("", table.Columns.Where(c => c.NeedToShow).Select(c => new string('-', c.Width) + " |"))); foreach (var line in table.FullContent) { table.PrintLine(line, logger, "", " |"); logger.NewLine(); } }
public override void ExportToLog(Summary summary, ILogger logger) { foreach (var report in summary.Reports.Values) { var runs = report.AllMeasurements; var modes = runs.Select(it => it.IterationMode).Distinct(); logger.WriteLineHeader($"*** {report.Benchmark.ShortInfo} ***"); logger.WriteLineHeader("* Raw *"); foreach (var run in runs) logger.WriteLineResult(run.ToStr()); foreach (var mode in modes) { logger.NewLine(); logger.WriteLineHeader($"* Statistics for {mode}"); logger.WriteLineStatistic(runs.Where(it => it.IterationMode == mode).GetStatistics().ToTimeStr()); } } }
private static Summary Run(Benchmark[] benchmarks, ILogger logger, string title, IConfig config, string rootArtifactsFolderPath, Func<IJob, IToolchain> toolchainProvider) { logger.WriteLineHeader("// ***** BenchmarkRunner: Start *****"); logger.WriteLineInfo("// Found benchmarks:"); foreach (var benchmark in benchmarks) logger.WriteLineInfo($"// {benchmark.ShortInfo}"); logger.WriteLine(); var validationErrors = Validate(benchmarks, logger, config); if (validationErrors.Any(validationError => validationError.IsCritical)) { return Summary.CreateFailed(benchmarks, title, HostEnvironmentInfo.GetCurrent(), config, GetResultsFolderPath(rootArtifactsFolderPath), validationErrors); } var globalChronometer = Chronometer.Start(); var reports = new List<BenchmarkReport>(); foreach (var benchmark in benchmarks) { var report = Run(benchmark, logger, config, rootArtifactsFolderPath, toolchainProvider); reports.Add(report); if (report.GetResultRuns().Any()) logger.WriteLineStatistic(report.GetResultRuns().GetStatistics().ToTimeStr()); logger.WriteLine(); } var clockSpan = globalChronometer.Stop(); var summary = new Summary(title, reports, HostEnvironmentInfo.GetCurrent(), config, GetResultsFolderPath(rootArtifactsFolderPath), clockSpan.GetTimeSpan(), validationErrors); logger.WriteLineHeader("// ***** BenchmarkRunner: Finish *****"); logger.WriteLine(); logger.WriteLineHeader("// * Export *"); var currentDirectory = Directory.GetCurrentDirectory(); foreach (var file in config.GetCompositeExporter().ExportToFiles(summary)) { logger.WriteLineInfo($" {file.Replace(currentDirectory, string.Empty).Trim('/', '\\')}"); } logger.WriteLine(); logger.WriteLineHeader("// * Detailed results *"); // TODO: make exporter foreach (var report in reports) { logger.WriteLineInfo(report.Benchmark.ShortInfo); logger.WriteLineStatistic(report.GetResultRuns().GetStatistics().ToTimeStr()); logger.WriteLine(); } LogTotalTime(logger, clockSpan.GetTimeSpan()); logger.WriteLine(); logger.WriteLineHeader("// * Summary *"); MarkdownExporter.Console.ExportToLog(summary, logger); // TODO: make exporter var warnings = config.GetCompositeAnalyser().Analyse(summary).ToList(); if (warnings.Count > 0) { logger.WriteLine(); logger.WriteLineError("// * Warnings * "); foreach (var warning in warnings) logger.WriteLineError($"{warning.Message}"); } if (config.GetDiagnosers().Count() > 0) { logger.WriteLine(); config.GetCompositeDiagnoser().DisplayResults(logger); } logger.WriteLine(); logger.WriteLineHeader("// ***** BenchmarkRunner: End *****"); return summary; }
internal static void LogTotalTime(ILogger logger, TimeSpan time, string message = "Total time") { var hhMmSs = $"{time.TotalHours:00}:{time:mm\\:ss}"; var totalSecs = $"{time.TotalSeconds.ToStr()} sec"; logger.WriteLineStatistic($"{message}: {hhMmSs} ({totalSecs})"); }
private void PrintTable(SummaryTable table, ILogger logger) { if (table.FullContent.Length == 0) { logger.WriteLineError("There are no benchmarks found "); logger.WriteLine(); return; } table.PrintCommonColumns(logger); logger.WriteLine(); if (useCodeBlocks) { logger.Write("```"); logger.WriteLine(); } table.PrintLine(table.FullHeader, logger, string.Empty, " |"); logger.WriteLineStatistic(string.Join("", table.Columns.Where(c => c.NeedToShow).Select(c => new string('-', c.Width) + " |"))); var rowCounter = 0; var highlightRow = false; foreach (var line in table.FullContent) { // Each time we hit the start of a new group, alternative the colour (in the console) or display bold in Markdown if (table.FullContentStartOfGroup[rowCounter]) { highlightRow = !highlightRow; } table.PrintLine(line, logger, string.Empty, " |", highlightRow, table.FullContentStartOfGroup[rowCounter], startOfGroupInBold); rowCounter++; } }
internal static void LogTotalTime(ILogger logger, TimeSpan time, string message = "Total time") { logger.WriteLineStatistic($"{message}: {time.ToFormattedTotalTime()}"); }