Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 5677de5

Browse files
committed
Flow EventSources to EventPipe on Windows (dotnet/coreclr#18217)
Signed-off-by: dotnet-bot-corefx-mirror <dotnet-bot@microsoft.com>
1 parent 6ff3f87 commit 5677de5

File tree

3 files changed

+123
-57
lines changed

3 files changed

+123
-57
lines changed

src/Common/src/CoreLib/System/Diagnostics/Tracing/EventProvider.cs

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ namespace Microsoft.Diagnostics.Tracing
3030
namespace System.Diagnostics.Tracing
3131
#endif
3232
{
33+
internal enum EventProviderType
34+
{
35+
None = 0,
36+
ETW,
37+
EventPipe
38+
};
39+
3340
// New in CLR4.0
3441
internal enum ControllerCommand
3542
{
@@ -120,15 +127,28 @@ public enum WriteEventErrorCode : int
120127
// it registers a callback from native code you MUST dispose it BEFORE shutdown, otherwise
121128
// you may get native callbacks during shutdown when we have destroyed the delegate.
122129
// EventSource has special logic to do this, no one else should be calling EventProvider.
123-
internal EventProvider()
130+
internal EventProvider(EventProviderType providerType)
124131
{
132+
switch (providerType)
133+
{
134+
case EventProviderType.ETW:
125135
#if PLATFORM_WINDOWS
126-
m_eventProvider = new EtwEventProvider();
127-
#elif FEATURE_PERFTRACING
128-
m_eventProvider = new EventPipeEventProvider();
136+
m_eventProvider = new EtwEventProvider();
129137
#else
130-
m_eventProvider = new NoOpEventProvider();
138+
m_eventProvider = new NoOpEventProvider();
131139
#endif
140+
break;
141+
case EventProviderType.EventPipe:
142+
#if FEATURE_PERFTRACING
143+
m_eventProvider = new EventPipeEventProvider();
144+
#else
145+
m_eventProvider = new NoOpEventProvider();
146+
#endif
147+
break;
148+
default:
149+
m_eventProvider = new NoOpEventProvider();
150+
break;
151+
};
132152
}
133153

134154
/// <summary>
@@ -475,7 +495,7 @@ private unsafe void GetSessionInfo(SessionInfoCallback action, ref List<SessionI
475495
var structBase = (byte*)providerInstance;
476496
providerInstance = (UnsafeNativeMethods.ManifestEtw.TRACE_PROVIDER_INSTANCE_INFO*)&structBase[providerInstance->NextOffset];
477497
}
478-
#else
498+
#else
479499
#if !ES_BUILD_PCL && PLATFORM_WINDOWS // TODO command arguments don't work on PCL builds...
480500
// This code is only used in the Nuget Package Version of EventSource. because
481501
// the code above is using APIs baned from UWP apps.
@@ -1276,8 +1296,7 @@ unsafe IntPtr IEventProvider.DefineEventHandle(uint eventID, string eventName, I
12761296
}
12771297
}
12781298

1279-
#elif !FEATURE_PERFTRACING
1280-
1299+
#endif
12811300
internal sealed class NoOpEventProvider : IEventProvider
12821301
{
12831302
unsafe uint IEventProvider.EventRegister(
@@ -1314,10 +1333,8 @@ int IEventProvider.EventActivityIdControl(UnsafeNativeMethods.ManifestEtw.Activi
13141333
// Define an EventPipeEvent handle.
13151334
unsafe IntPtr IEventProvider.DefineEventHandle(uint eventID, string eventName, Int64 keywords, uint eventVersion, uint level, byte *pMetadata, uint metadataLength)
13161335
{
1317-
throw new System.NotSupportedException();
1336+
return IntPtr.Zero;
13181337
}
13191338
}
1320-
1321-
#endif
13221339
}
13231340

0 commit comments

Comments
 (0)