-
-
Notifications
You must be signed in to change notification settings - Fork 955
/
SameArchitectureDisassembler.cs
41 lines (36 loc) · 1.83 KB
/
SameArchitectureDisassembler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Portability;
using System;
namespace BenchmarkDotNet.Disassemblers
{
internal class SameArchitectureDisassembler
{
private readonly DisassemblyDiagnoserConfig config;
private ClrMdV2Disassembler? clrMdV2Disassembler;
internal SameArchitectureDisassembler(DisassemblyDiagnoserConfig config) => this.config = config;
internal DisassemblyResult Disassemble(DiagnoserActionParameters parameters)
// delay the creation to avoid exceptions at DisassemblyDiagnoser ctor
=> (clrMdV2Disassembler ??= CreateDisassemblerForCurrentArchitecture())
.AttachAndDisassemble(BuildDisassemblerSettings(parameters));
private static ClrMdV2Disassembler CreateDisassemblerForCurrentArchitecture()
=> RuntimeInformation.GetCurrentPlatform() switch
{
Platform.X86 or Platform.X64 => new IntelDisassembler(),
Platform.Arm64 => new Arm64Disassembler(),
_ => throw new NotSupportedException($"{RuntimeInformation.GetCurrentPlatform()} is not supported")
};
private Settings BuildDisassemblerSettings(DiagnoserActionParameters parameters)
=> new (
processId: parameters.Process.Id,
typeName: $"BenchmarkDotNet.Autogenerated.Runnable_{parameters.BenchmarkId.Value}",
methodName: DisassemblerConstants.DisassemblerEntryMethodName,
printSource: config.PrintSource,
maxDepth: config.MaxDepth,
filters: config.Filters,
syntax: config.Syntax.ToString(),
tfm: parameters.BenchmarkCase.Job.Environment.GetRuntime().MsBuildMoniker,
resultsPath: default
);
}
}