private static string GetBenchmarkName(BenchmarkCase benchmark) { var fullName = FullNameProvider.GetBenchmarkName(benchmark); // FullBenchmarkName is passed to Process.Start as an argument and each OS limits the max argument length, so we have to limit it too // Windows limit is 32767 chars, Unix is 128*1024 but we use 1024 as a common sense limit if (fullName.Length < 1024) { return(fullName); } string typeName = FullNameProvider.GetTypeName(benchmark.Descriptor.Type); string methodName = benchmark.Descriptor.WorkloadMethod.Name; string paramsHash = benchmark.HasParameters ? "paramsHash_" + Hashing.HashString(FullNameProvider.GetMethodName(benchmark)).ToString() : string.Empty; return($"{typeName}.{methodName}({paramsHash})"); }
private static string GetLimitedFilePath(DiagnoserActionParameters details, DateTime creationTime, string fileExtension, int limit) { string shortTypeName = FolderNameHelper.ToFolderName(details.BenchmarkCase.Descriptor.Type, includeNamespace: false); string methodName = details.BenchmarkCase.Descriptor.WorkloadMethod.Name; string parameters = details.BenchmarkCase.HasParameters ? $"-hash{Hashing.HashString(FullNameProvider.GetMethodName(details.BenchmarkCase))}" : string.Empty; string fileName = $@"{shortTypeName}.{methodName}{parameters}"; string finalResult = GetFilePath(fileName, details, creationTime, fileExtension); if (finalResult.Length > limit) { throw new NotSupportedException($"The full benchmark name: \"{fileName}\" combined with artifacts path: \"{details.Config.ArtifactsPath}\" is too long. " + $"Please set the value of {nameof(details.Config)}.{nameof(details.Config.ArtifactsPath)} to shorter path or rename the type or method."); } return(finalResult); }
private string GetFilePath(DiagnoserActionParameters details, DateTime creationTime) { var folderPath = details.Config.ArtifactsPath; folderPath = Path.Combine(folderPath, $"{creationTime:yyyyMMdd-hhmm}-{Process.GetCurrentProcess().Id}"); // if we run for more than one toolchain, the output file name should contain the name too so we can differ net461 vs netcoreapp2.1 etc if (details.Config.GetJobs().Select(job => job.Infrastructure.Toolchain).Distinct().Count() > 1) { folderPath = Path.Combine(folderPath, details.BenchmarkCase.Job.Infrastructure.Toolchain.Name); } if (!string.IsNullOrWhiteSpace(details.BenchmarkCase.Descriptor.Type.Namespace)) { folderPath = Path.Combine(folderPath, details.BenchmarkCase.Descriptor.Type.Namespace.Replace('.', Path.DirectorySeparatorChar)); } folderPath = Path.Combine(folderPath, FolderNameHelper.ToFolderName(details.BenchmarkCase.Descriptor.Type, includeNamespace: false)); var fileName = FolderNameHelper.ToFolderName(FullNameProvider.GetMethodName(details.BenchmarkCase)); return(Path.Combine(folderPath, $"{fileName}{FileExtension}")); }
private static string GetFilePathNoLimits(DiagnoserActionParameters details, DateTime creationTime, string fileExtension) { string fileName = $@"{FolderNameHelper.ToFolderName(details.BenchmarkCase.Descriptor.Type)}.{FullNameProvider.GetMethodName(details.BenchmarkCase)}"; return(GetFilePath(fileName, details, creationTime, fileExtension)); }
private string GetFilePath(DiagnoserActionParameters details, DateTime creationTime) { string fileName = $@"{FolderNameHelper.ToFolderName(details.BenchmarkCase.Descriptor.Type)}.{FullNameProvider.GetMethodName(details.BenchmarkCase)}"; // if we run for more than one toolchain, the output file name should contain the name too so we can differ net461 vs netcoreapp2.1 etc if (details.Config.GetJobs().Select(job => job.GetToolchain()).Distinct().Count() > 1) { fileName += $"-{details.BenchmarkCase.Job.Environment.Runtime?.Name ?? details.BenchmarkCase.GetToolchain()?.Name ?? details.BenchmarkCase.Job.Id}"; } fileName += $"-{creationTime.ToString(BenchmarkRunnerClean.DateTimeFormat)}"; fileName = FolderNameHelper.ToFolderName(fileName); return(Path.Combine(details.Config.ArtifactsPath, $"{fileName}{FileExtension}")); }