@@ -30,6 +30,13 @@ namespace Microsoft.Diagnostics.Tracing
30
30
namespace System . Diagnostics . Tracing
31
31
#endif
32
32
{
33
+ internal enum EventProviderType
34
+ {
35
+ None = 0 ,
36
+ ETW ,
37
+ EventPipe
38
+ } ;
39
+
33
40
// New in CLR4.0
34
41
internal enum ControllerCommand
35
42
{
@@ -120,15 +127,28 @@ public enum WriteEventErrorCode : int
120
127
// it registers a callback from native code you MUST dispose it BEFORE shutdown, otherwise
121
128
// you may get native callbacks during shutdown when we have destroyed the delegate.
122
129
// EventSource has special logic to do this, no one else should be calling EventProvider.
123
- internal EventProvider ( )
130
+ internal EventProvider ( EventProviderType providerType )
124
131
{
132
+ switch ( providerType )
133
+ {
134
+ case EventProviderType . ETW :
125
135
#if PLATFORM_WINDOWS
126
- m_eventProvider = new EtwEventProvider ( ) ;
127
- #elif FEATURE_PERFTRACING
128
- m_eventProvider = new EventPipeEventProvider ( ) ;
136
+ m_eventProvider = new EtwEventProvider ( ) ;
129
137
#else
130
- m_eventProvider = new NoOpEventProvider ( ) ;
138
+ m_eventProvider = new NoOpEventProvider ( ) ;
131
139
#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
+ } ;
132
152
}
133
153
134
154
/// <summary>
@@ -475,7 +495,7 @@ private unsafe void GetSessionInfo(SessionInfoCallback action, ref List<SessionI
475
495
var structBase = ( byte * ) providerInstance ;
476
496
providerInstance = ( UnsafeNativeMethods . ManifestEtw . TRACE_PROVIDER_INSTANCE_INFO * ) & structBase [ providerInstance ->NextOffset ] ;
477
497
}
478
- #else
498
+ #else
479
499
#if ! ES_BUILD_PCL && PLATFORM_WINDOWS // TODO command arguments don't work on PCL builds...
480
500
// This code is only used in the Nuget Package Version of EventSource. because
481
501
// the code above is using APIs baned from UWP apps.
@@ -1276,8 +1296,7 @@ unsafe IntPtr IEventProvider.DefineEventHandle(uint eventID, string eventName, I
1276
1296
}
1277
1297
}
1278
1298
1279
- #elif ! FEATURE_PERFTRACING
1280
-
1299
+ #endif
1281
1300
internal sealed class NoOpEventProvider : IEventProvider
1282
1301
{
1283
1302
unsafe uint IEventProvider . EventRegister (
@@ -1314,10 +1333,8 @@ int IEventProvider.EventActivityIdControl(UnsafeNativeMethods.ManifestEtw.Activi
1314
1333
// Define an EventPipeEvent handle.
1315
1334
unsafe IntPtr IEventProvider . DefineEventHandle ( uint eventID , string eventName , Int64 keywords , uint eventVersion , uint level , byte * pMetadata , uint metadataLength )
1316
1335
{
1317
- throw new System . NotSupportedException ( ) ;
1336
+ return IntPtr . Zero ;
1318
1337
}
1319
1338
}
1320
-
1321
- #endif
1322
1339
}
1323
1340
0 commit comments