Browse Source

Add ETW for event + property decompilation as PoC

pull/2519/head
Christoph Wille 4 years ago
parent
commit
1b3a73d9e9
  1. 12
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 1
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
  3. 24
      ICSharpCode.Decompiler/Instrumentation/DecompilerEventSource.cs

12
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1744,6 +1744,7 @@ namespace ICSharpCode.Decompiler.CSharp
EntityDeclaration DoDecompile(IProperty property, DecompileRun decompileRun, ITypeResolveContext decompilationContext) EntityDeclaration DoDecompile(IProperty property, DecompileRun decompileRun, ITypeResolveContext decompilationContext)
{ {
Debug.Assert(decompilationContext.CurrentMember == property); Debug.Assert(decompilationContext.CurrentMember == property);
var watch = System.Diagnostics.Stopwatch.StartNew();
try try
{ {
var typeSystemAstBuilder = CreateAstBuilder(decompileRun.Settings); var typeSystemAstBuilder = CreateAstBuilder(decompileRun.Settings);
@ -1798,11 +1799,17 @@ namespace ICSharpCode.Decompiler.CSharp
{ {
throw new DecompilerException(module, property, innerException); throw new DecompilerException(module, property, innerException);
} }
finally
{
watch.Stop();
Instrumentation.DecompilerEventSource.Log.DoDecompileProperty(property.Name, watch.ElapsedMilliseconds);
}
} }
EntityDeclaration DoDecompile(IEvent ev, DecompileRun decompileRun, ITypeResolveContext decompilationContext) EntityDeclaration DoDecompile(IEvent ev, DecompileRun decompileRun, ITypeResolveContext decompilationContext)
{ {
Debug.Assert(decompilationContext.CurrentMember == ev); Debug.Assert(decompilationContext.CurrentMember == ev);
var watch = System.Diagnostics.Stopwatch.StartNew();
try try
{ {
var typeSystemAstBuilder = CreateAstBuilder(decompileRun.Settings); var typeSystemAstBuilder = CreateAstBuilder(decompileRun.Settings);
@ -1838,6 +1845,11 @@ namespace ICSharpCode.Decompiler.CSharp
{ {
throw new DecompilerException(module, ev, innerException); throw new DecompilerException(module, ev, innerException);
} }
finally
{
watch.Stop();
Instrumentation.DecompilerEventSource.Log.DoDecompileEvent(ev.Name, watch.ElapsedMilliseconds);
}
} }
#region Sequence Points #region Sequence Points

1
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -100,6 +100,7 @@
<Compile Include="IL\Transforms\LdLocaDupInitObjTransform.cs" /> <Compile Include="IL\Transforms\LdLocaDupInitObjTransform.cs" />
<Compile Include="IL\Transforms\PatternMatchingTransform.cs" /> <Compile Include="IL\Transforms\PatternMatchingTransform.cs" />
<Compile Include="IL\Transforms\RemoveInfeasiblePathTransform.cs" /> <Compile Include="IL\Transforms\RemoveInfeasiblePathTransform.cs" />
<Compile Include="Instrumentation\DecompilerEventSource.cs" />
<Compile Include="Metadata\ReferenceLoadInfo.cs" /> <Compile Include="Metadata\ReferenceLoadInfo.cs" />
<Compile Include="Semantics\OutVarResolveResult.cs" /> <Compile Include="Semantics\OutVarResolveResult.cs" />
<Compile Include="SingleFileBundle.cs" /> <Compile Include="SingleFileBundle.cs" />

24
ICSharpCode.Decompiler/Instrumentation/DecompilerEventSource.cs

@ -0,0 +1,24 @@
using System;
using System.Diagnostics.Tracing;
namespace ICSharpCode.Decompiler.Instrumentation
{
[EventSource(Name = "ICSharpCode.Decompiler")]
public sealed class DecompilerEventSource : EventSource
{
[Event(1, Level = EventLevel.Informational)]
public void DoDecompileEvent(string eventName, long elapsedMilliseconds)
{
WriteEvent(1, eventName, elapsedMilliseconds);
}
[Event(2, Level = EventLevel.Informational)]
public void DoDecompileProperty(string propertyName, long elapsedMilliseconds)
{
WriteEvent(2, propertyName, elapsedMilliseconds);
}
public static DecompilerEventSource Log = new DecompilerEventSource();
}
}
Loading…
Cancel
Save