Remove custom BenchmarkDotNet toolchain.

This commit is contained in:
Cesar Blum Silveira 2017-02-21 10:05:29 -08:00
parent 4fd71e3a6b
commit 0dca3a266f
5 changed files with 2 additions and 160 deletions

1
.gitignore vendored
View File

@ -33,3 +33,4 @@ runtimes/
launchSettings.json
BenchmarkDotNet.Artifacts/
BDN.Generated/
binaries/

View File

@ -22,8 +22,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
.With(RunStrategy.Throughput)
.WithLaunchCount(3)
.WithWarmupCount(5)
.WithTargetCount(10)
.With(new MsBuildToolchain()));
.WithTargetCount(10));
}
}
}

View File

@ -1,69 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using BenchmarkDotNet.Characteristics;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Extensions;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains;
using BenchmarkDotNet.Toolchains.DotNetCli;
using BenchmarkDotNet.Toolchains.Results;
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{
public class MsBuildExecutor : IExecutor
{
public ExecuteResult Execute(BuildResult buildResult, Benchmark benchmark, ILogger logger, IResolver resolver, IDiagnoser diagnoser = null)
{
var workingDirectory = buildResult.ArtifactsPaths.BuildArtifactsDirectoryPath;
using (var process = new Process { StartInfo = BuildDotNetProcessStartInfo(workingDirectory) })
{
var loggerDiagnoserType = typeof(Toolchain).GetTypeInfo().Assembly.GetType("BenchmarkDotNet.Loggers.SynchronousProcessOutputLoggerWithDiagnoser");
var loggerDiagnoser = Activator.CreateInstance(
loggerDiagnoserType,
new object[] { logger, process, diagnoser, benchmark });
process.Start();
var processInputMethodInfo = loggerDiagnoser.GetType().GetMethod("ProcessInput", BindingFlags.Instance | BindingFlags.NonPublic);
processInputMethodInfo.Invoke(loggerDiagnoser, null);
process.WaitForExit();
if (process.ExitCode != 0)
{
return new ExecuteResult(true, process.ExitCode, new string[0], new string[0]);
}
var linesWithResults = (IReadOnlyList<string>)loggerDiagnoserType
.GetProperty("LinesWithResults", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(loggerDiagnoser, null);
var linesWithExtraOutput = (IReadOnlyList<string>)loggerDiagnoserType
.GetProperty("LinesWithExtraOutput", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(loggerDiagnoser, null);
return new ExecuteResult(true, process.ExitCode, linesWithResults, linesWithExtraOutput);
}
}
private ProcessStartInfo BuildDotNetProcessStartInfo(string workingDirectory)
=> new ProcessStartInfo
{
FileName = "dotnet",
WorkingDirectory = workingDirectory,
Arguments = "binaries/Benchmark.Generated.dll",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
}
}

View File

@ -1,61 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using BenchmarkDotNet.Characteristics;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Helpers;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains;
using BenchmarkDotNet.Toolchains.DotNetCli;
using System.Reflection;
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{
public class MsBuildGenerator : DotNetCliGenerator
{
public MsBuildGenerator()
: base("netcoreapp1.1", null, (Func<Platform, string>) (_ => "x64"), null, null)
{
}
protected override string GetProjectFilePath(string binariesDirectoryPath)
=> Path.Combine(binariesDirectoryPath, "Benchmark.Generated.csproj");
protected override void GenerateProject(Benchmark benchmark, ArtifactsPaths artifactsPaths, IResolver resolver)
{
var projectTemplate = @"<Project Sdk=""Microsoft.NET.Sdk"" ToolsVersion=""15.0"">
<Import Project=""..\build\common.props"" />
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<Compile Include=""$CODEFILENAME$"" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include=""..\test\Microsoft.AspNetCore.Server.Kestrel.Performance\Microsoft.AspNetCore.Server.Kestrel.Performance.csproj"" />
</ItemGroup>
</Project>";
var projectContent = SetCodeFileName(projectTemplate, Path.GetFileName(artifactsPaths.ProgramCodePath));
File.WriteAllText(artifactsPaths.ProjectFilePath, projectContent);
var runtimeConfigContent = @"
{
""configProperties"": {
""System.GC.Server"": true
}
}";
File.WriteAllText(Path.Combine(artifactsPaths.BuildArtifactsDirectoryPath, "runtimeConfig.template.json"), runtimeConfigContent);
}
}
}

View File

@ -1,28 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using BenchmarkDotNet.Characteristics;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains;
using BenchmarkDotNet.Toolchains.Core;
using BenchmarkDotNet.Toolchains.DotNetCli;
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{
public class MsBuildToolchain : Toolchain
{
private const string TargetFrameworkMoniker = "netcoreapp1.1";
public MsBuildToolchain()
: base("MsBuildCore",
new MsBuildGenerator(),
new DotNetCliBuilder(TargetFrameworkMoniker),
new MsBuildExecutor())
{
}
}
}