From d283b711434fcf20eee6d8b028a044233a996c78 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Mon, 28 Sep 2020 17:37:33 -0700 Subject: [PATCH] Append IL stub code gen when it is available. --- .../Benchmarking/CodeGenEventListener.cs | 15 ++++++++++++--- .../TestAssets/Benchmarking/CodeGenMonitor.cs | 8 +++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/DllImportGenerator/TestAssets/Benchmarking/CodeGenEventListener.cs b/DllImportGenerator/TestAssets/Benchmarking/CodeGenEventListener.cs index 60fafea8e67f..7e80f5a01c67 100644 --- a/DllImportGenerator/TestAssets/Benchmarking/CodeGenEventListener.cs +++ b/DllImportGenerator/TestAssets/Benchmarking/CodeGenEventListener.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.Diagnostics.Tracing; using System.IO; - using Iced.Intel; using Decoder = Iced.Intel.Decoder; @@ -63,6 +62,7 @@ private void OnILStubGenerated(EventWrittenEventArgs eventData) ulong methodId = 0; string fqClassName = string.Empty; string methodName = string.Empty; + string ilCode = string.Empty; uint metadataToken = 0; // See https://docs.microsoft.com/dotnet/framework/performance/interop-etw-events @@ -87,6 +87,10 @@ private void OnILStubGenerated(EventWrittenEventArgs eventData) { metadataToken = (uint)payload; } + else if (payloadName == "StubMethodILCode") + { + ilCode = (string)payload; + } } Debug.Assert(methodId != 0); @@ -94,7 +98,8 @@ private void OnILStubGenerated(EventWrittenEventArgs eventData) { MetadataToken = metadataToken, FullyQualifiedClassName = fqClassName, - MethodName = methodName + MethodName = methodName, + ILCode = ilCode, });; } @@ -110,6 +115,7 @@ private void OnVerboseMethodLoad(EventWrittenEventArgs eventData) string namespaceName = "?"; string methodName = "?"; string methodSignature = "?"; + string ilCode = string.Empty; uint flags = 0; uint metadataToken = 0; @@ -160,6 +166,7 @@ private void OnVerboseMethodLoad(EventWrittenEventArgs eventData) metadataToken = pin.MetadataToken; namespaceName = pin.FullyQualifiedClassName; methodName = pin.MethodName; + ilCode = pin.ILCode; } string flagString = ""; @@ -241,7 +248,8 @@ private void OnVerboseMethodLoad(EventWrittenEventArgs eventData) FullyQualifiedClassName = namespaceName, MethodName = methodName, GeneratedCode = generatedCode.ToString(), - CodeSize = size + GeneratedCodeSize = size, + ILCode = ilCode, }); } @@ -250,6 +258,7 @@ private record PInvokeInstance public uint MetadataToken { get; init; } public string FullyQualifiedClassName { get; init; } public string MethodName { get; init; } + public string ILCode { get; init; } } private unsafe class MemoryCodeReader : CodeReader diff --git a/DllImportGenerator/TestAssets/Benchmarking/CodeGenMonitor.cs b/DllImportGenerator/TestAssets/Benchmarking/CodeGenMonitor.cs index fdbf0140276f..6755380c0093 100644 --- a/DllImportGenerator/TestAssets/Benchmarking/CodeGenMonitor.cs +++ b/DllImportGenerator/TestAssets/Benchmarking/CodeGenMonitor.cs @@ -19,7 +19,8 @@ public record MethodCodeGen public string FullyQualifiedClassName { get; init; } public string MethodName { get; init; } public string GeneratedCode { get; init; } - public uint CodeSize { get; init; } + public uint GeneratedCodeSize { get; init; } + public string ILCode { get; init; } } /// @@ -136,14 +137,15 @@ public string GenerateHtml(string pattern = "", int waitForMonitorInMs = 2_000) if (mcgs.Value.Count == 1) { - yield return new(mcgs.Key, mcgs.Value.Last().GeneratedCode); + var mcg = mcgs.Value.Last(); + yield return new(mcgs.Key, mcg.GeneratedCode + Environment.NewLine + mcg.ILCode); } else { int i = 1; foreach (var mcg in mcgs.Value) { - yield return new(mcgs.Key + $" ({i})", mcg.GeneratedCode); + yield return new(mcgs.Key + $" ({i})", mcg.GeneratedCode + Environment.NewLine + mcg.ILCode); ++i; } }