| 1 | // The .NET Foundation licenses this file to you under the MIT license. | 
|---|
| 2 | // See the LICENSE file in the project root for more information. | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef __EVENTPIPE_CONFIGURATION_H__ | 
|---|
| 5 | #define __EVENTPIPE_CONFIGURATION_H__ | 
|---|
| 6 |  | 
|---|
| 7 | #ifdef FEATURE_PERFTRACING | 
|---|
| 8 |  | 
|---|
| 9 | #include "eventpipe.h" | 
|---|
| 10 | #include "slist.h" | 
|---|
| 11 |  | 
|---|
| 12 | class EventPipeSessionProvider; | 
|---|
| 13 | class EventPipeEvent; | 
|---|
| 14 | class EventPipeEventInstance; | 
|---|
| 15 | class EventPipeProvider; | 
|---|
| 16 | struct EventPipeProviderConfiguration; | 
|---|
| 17 | class EventPipeSession; | 
|---|
| 18 | enum class EventPipeSessionType; | 
|---|
| 19 | class EventPipeSessionProvider; | 
|---|
| 20 |  | 
|---|
| 21 | enum class EventPipeEventLevel | 
|---|
| 22 | { | 
|---|
| 23 | LogAlways, | 
|---|
| 24 | Critical, | 
|---|
| 25 | Error, | 
|---|
| 26 | Warning, | 
|---|
| 27 | Informational, | 
|---|
| 28 | Verbose | 
|---|
| 29 | }; | 
|---|
| 30 |  | 
|---|
| 31 | class EventPipeConfiguration | 
|---|
| 32 | { | 
|---|
| 33 | public: | 
|---|
| 34 |  | 
|---|
| 35 | EventPipeConfiguration(); | 
|---|
| 36 | ~EventPipeConfiguration(); | 
|---|
| 37 |  | 
|---|
| 38 | // Perform initialization that cannot be performed in the constructor. | 
|---|
| 39 | void Initialize(); | 
|---|
| 40 |  | 
|---|
| 41 | // Create a new provider. | 
|---|
| 42 | EventPipeProvider* CreateProvider(const SString &providerName, EventPipeCallback pCallbackFunction, void *pCallbackData); | 
|---|
| 43 |  | 
|---|
| 44 | // Delete a provider. | 
|---|
| 45 | void DeleteProvider(EventPipeProvider *pProvider); | 
|---|
| 46 |  | 
|---|
| 47 | // Register a provider. | 
|---|
| 48 | bool RegisterProvider(EventPipeProvider &provider); | 
|---|
| 49 |  | 
|---|
| 50 | // Unregister a provider. | 
|---|
| 51 | bool UnregisterProvider(EventPipeProvider &provider); | 
|---|
| 52 |  | 
|---|
| 53 | // Get the provider with the specified provider ID if it exists. | 
|---|
| 54 | EventPipeProvider* GetProvider(const SString &providerID); | 
|---|
| 55 |  | 
|---|
| 56 | // Create a new session. | 
|---|
| 57 | EventPipeSession* CreateSession(EventPipeSessionType sessionType, unsigned int circularBufferSizeInMB, EventPipeProviderConfiguration *pProviders, unsigned int numProviders, UINT64 multiFileTraceLengthInSeconds = 0); | 
|---|
| 58 |  | 
|---|
| 59 | // Delete a session. | 
|---|
| 60 | void DeleteSession(EventPipeSession *pSession); | 
|---|
| 61 |  | 
|---|
| 62 | // Get the configured size of the circular buffer. | 
|---|
| 63 | size_t GetCircularBufferSize() const; | 
|---|
| 64 |  | 
|---|
| 65 | // Enable a session in the event pipe. | 
|---|
| 66 | void Enable(EventPipeSession *pSession); | 
|---|
| 67 |  | 
|---|
| 68 | // Disable a session in the event pipe. | 
|---|
| 69 | void Disable(EventPipeSession *pSession); | 
|---|
| 70 |  | 
|---|
| 71 | // Get the status of the event pipe. | 
|---|
| 72 | bool Enabled() const; | 
|---|
| 73 |  | 
|---|
| 74 | // Determine if rundown is enabled. | 
|---|
| 75 | bool RundownEnabled() const; | 
|---|
| 76 |  | 
|---|
| 77 | // Enable rundown using the specified configuration. | 
|---|
| 78 | void EnableRundown(EventPipeSession *pSession); | 
|---|
| 79 |  | 
|---|
| 80 | // Get the event used to write metadata to the event stream. | 
|---|
| 81 | EventPipeEventInstance* BuildEventMetadataEvent(EventPipeEventInstance &sourceInstance, unsigned int metdataId); | 
|---|
| 82 |  | 
|---|
| 83 | // Delete deferred providers. | 
|---|
| 84 | void DeleteDeferredProviders(); | 
|---|
| 85 |  | 
|---|
| 86 | // Determine if the specified thread is the rundown thread. | 
|---|
| 87 | // Used during rundown to ignore events from all other threads so that we don't corrupt the trace file. | 
|---|
| 88 | inline bool IsRundownThread(Thread *pThread) | 
|---|
| 89 | { | 
|---|
| 90 | LIMITED_METHOD_CONTRACT; | 
|---|
| 91 |  | 
|---|
| 92 | return (pThread == m_pRundownThread); | 
|---|
| 93 | } | 
|---|
| 94 |  | 
|---|
| 95 | private: | 
|---|
| 96 |  | 
|---|
| 97 | // Get the provider without taking the lock. | 
|---|
| 98 | EventPipeProvider* GetProviderNoLock(const SString &providerID); | 
|---|
| 99 |  | 
|---|
| 100 | // Get the enabled provider. | 
|---|
| 101 | EventPipeSessionProvider* GetSessionProvider(EventPipeSession *pSession, EventPipeProvider *pProvider); | 
|---|
| 102 |  | 
|---|
| 103 | // The one and only EventPipe session. | 
|---|
| 104 | EventPipeSession *m_pSession; | 
|---|
| 105 |  | 
|---|
| 106 | // Determines whether or not the event pipe is enabled. | 
|---|
| 107 | Volatile<bool> m_enabled; | 
|---|
| 108 |  | 
|---|
| 109 | // The list of event pipe providers. | 
|---|
| 110 | SList<SListElem<EventPipeProvider*>> *m_pProviderList; | 
|---|
| 111 |  | 
|---|
| 112 | // The provider used to write configuration events to the event stream. | 
|---|
| 113 | EventPipeProvider *m_pConfigProvider; | 
|---|
| 114 |  | 
|---|
| 115 | // The event used to write event information to the event stream. | 
|---|
| 116 | EventPipeEvent *m_pMetadataEvent; | 
|---|
| 117 |  | 
|---|
| 118 | // The provider name for the configuration event pipe provider. | 
|---|
| 119 | // This provider is used to emit configuration events. | 
|---|
| 120 | const static WCHAR* s_configurationProviderName; | 
|---|
| 121 |  | 
|---|
| 122 | // True if rundown is enabled. | 
|---|
| 123 | Volatile<bool> m_rundownEnabled; | 
|---|
| 124 |  | 
|---|
| 125 | // The rundown thread.  If rundown is not enabled, this is NULL. | 
|---|
| 126 | Thread *m_pRundownThread; | 
|---|
| 127 | }; | 
|---|
| 128 |  | 
|---|
| 129 | #endif // FEATURE_PERFTRACING | 
|---|
| 130 |  | 
|---|
| 131 | #endif // __EVENTPIPE_CONFIGURATION_H__ | 
|---|
| 132 |  | 
|---|