1 //------------------------------------------------------------------------------
3 // This code was generated by a tool.
5 // Changes to this file may cause incorrect behavior and will be lost if
6 // the code is regenerated.
8 //------------------------------------------------------------------------------
10 namespace System.ServiceModel.Channels
13 using System.Runtime.Diagnostics;
14 using System.Security;
17 internal partial class TD
20 static System.Resources.ResourceManager resourceManager;
22 static System.Globalization.CultureInfo resourceCulture;
24 [System.Security.SecurityCriticalAttribute()]
25 static System.Runtime.Diagnostics.EventDescriptor[] eventDescriptors;
27 static object syncLock = new object();
29 // Double-checked locking pattern requires volatile for read/write synchronization
30 static volatile bool eventDescriptorsCreated;
36 [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification="This is an auto-generated code, some ETW/TraceSource mixed code would use it.")]
37 static System.Resources.ResourceManager ResourceManager
41 if (object.ReferenceEquals(resourceManager, null))
43 resourceManager = new System.Resources.ResourceManager("System.ServiceModel.Channels.TD", typeof(TD).Assembly);
45 return resourceManager;
49 [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification="This template is shared across all assemblies, some of which use this accessor.")]
50 internal static System.Globalization.CultureInfo Culture
54 return resourceCulture;
58 resourceCulture = value;
63 /// Check if trace definition is enabled
64 /// Event description ID=4800, Level=Warning, Channel=debug
66 internal static bool MaxPendingMessagesTotalSizeReachedIsEnabled()
68 return (FxTrace.ShouldTraceWarning
69 && (FxTrace.ShouldTraceWarningToTraceSource || TD.IsEtwEventEnabled(0)));
73 /// Gets trace definition like: Message {0}was dropped, because pending messages total size limit ({1}) was exceeded. Use {2}.MaxPendingMessagesTotalSize to adjust the pending message limit.
74 /// Event description ID=4800, Level=Warning, Channel=debug
76 /// <param name="eventTraceActivity">The event trace activity</param>
77 /// <param name="messageID">Parameter 0 for event: Message {0}was dropped, because pending messages total size limit ({1}) was exceeded. Use {2}.MaxPendingMessagesTotalSize to adjust the pending message limit.</param>
78 /// <param name="maxPendingMessagesTotalSize">Parameter 1 for event: Message {0}was dropped, because pending messages total size limit ({1}) was exceeded. Use {2}.MaxPendingMessagesTotalSize to adjust the pending message limit.</param>
79 /// <param name="bindingElementTypeName">Parameter 2 for event: Message {0}was dropped, because pending messages total size limit ({1}) was exceeded. Use {2}.MaxPendingMessagesTotalSize to adjust the pending message limit.</param>
80 internal static void MaxPendingMessagesTotalSizeReached(System.Runtime.Diagnostics.EventTraceActivity eventTraceActivity, string messageID, long maxPendingMessagesTotalSize, string bindingElementTypeName)
82 TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null);
83 if (TD.IsEtwEventEnabled(0))
85 TD.WriteEtwEvent(0, eventTraceActivity, messageID, maxPendingMessagesTotalSize, bindingElementTypeName, payload.AppDomainFriendlyName);
87 if (FxTrace.ShouldTraceWarningToTraceSource)
89 string description = string.Format(Culture, ResourceManager.GetString("MaxPendingMessagesTotalSizeReached", Culture), messageID, maxPendingMessagesTotalSize, bindingElementTypeName);
90 TD.WriteTraceSource(0, description, payload);
95 /// Check if trace definition is enabled
96 /// Event description ID=4801, Level=verbose, Channel=Debug
98 internal static bool ByteStreamMessageDecodingStartIsEnabled()
100 return (FxTrace.ShouldTraceVerbose && TD.IsEtwEventEnabled(1));
104 /// Gets trace definition like: ByteStreamMessageEncoder started decoding the message.
105 /// Event description ID=4801, Level=verbose, Channel=Debug
107 internal static void ByteStreamMessageDecodingStart()
109 TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null);
110 if (TD.IsEtwEventEnabled(1))
112 TD.WriteEtwEvent(1, null, payload.AppDomainFriendlyName);
117 /// Check if trace definition is enabled
118 /// Event description ID=4802, Level=verbose, Channel=Debug
120 internal static bool ByteStreamMessageEncodingStartIsEnabled()
122 return (FxTrace.ShouldTraceVerbose && TD.IsEtwEventEnabled(2));
126 /// Gets trace definition like: ByteStreamMessageEncoder started encoding the message.
127 /// Event description ID=4802, Level=verbose, Channel=Debug
129 /// <param name="eventTraceActivity">The event trace activity</param>
130 internal static void ByteStreamMessageEncodingStart(System.Runtime.Diagnostics.EventTraceActivity eventTraceActivity)
132 TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null);
133 if (TD.IsEtwEventEnabled(2))
135 TD.WriteEtwEvent(2, eventTraceActivity, payload.AppDomainFriendlyName);
140 /// Creates the event descriptors array
142 // Critical = Sets the SecurityCritical member eventDescriptors
143 // Safe = We control what the event descriptors contain
144 [System.Security.SecuritySafeCriticalAttribute()]
145 static void CreateEventDescriptors()
147 System.Runtime.Diagnostics.EventDescriptor[] descriptors = new System.Runtime.Diagnostics.EventDescriptor[] {
148 new System.Runtime.Diagnostics.EventDescriptor(4800, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Warning, (byte)TraceEventOpcode.Info, 0x0, 0x1000000000000000),
149 new System.Runtime.Diagnostics.EventDescriptor(4801, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Verbose, (byte)TraceEventOpcode.Start, 0x9fb, 0x1000000000001000),
150 new System.Runtime.Diagnostics.EventDescriptor(4802, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Verbose, (byte)TraceEventOpcode.Start, 0x9fb, 0x1000000000001000)};
151 ushort[] e2eEvents = new ushort[] {
154 FxTrace.UpdateEventDefinitions(descriptors, e2eEvents);
155 eventDescriptors = descriptors;
159 /// Ensures that the event descriptors array is initialized
161 static void EnsureEventDescriptors()
163 if (eventDescriptorsCreated)
167 System.Threading.Monitor.Enter(syncLock);
170 if (eventDescriptorsCreated)
174 CreateEventDescriptors();
175 eventDescriptorsCreated = true;
179 System.Threading.Monitor.Exit(syncLock);
184 /// Check if ETW tracing is enabled for the particular event
186 /// <param name="eventIndex">The index of the event descriptor</param>
187 static bool IsEtwEventEnabled(int eventIndex)
189 if (FxTrace.Trace.IsEtwProviderEnabled)
191 EnsureEventDescriptors();
192 return FxTrace.IsEventEnabled(eventIndex);
198 /// Writes ETW trace event
200 /// <param name="eventIndex">The index of the event descriptor</param>>
201 /// <param name="eventParam0">A parameter of the ETW event</param>>
202 /// <param name="eventParam1">A parameter of the ETW event</param>>
203 /// <param name="eventParam2">A parameter of the ETW event</param>>
204 /// <param name="eventParam3">A parameter of the ETW event</param>>
205 /// <param name="eventParam4">A parameter of the ETW event</param>>
206 // Critical = Calls SecurityCritical method EtwProvider.WriteEvent
207 // Safe = We only allow setting of provider id from SecurityCritical code, access to EventDescriptors is SecurityCritical, and ETW limits buffer sizes.
208 [System.Security.SecuritySafeCriticalAttribute()]
209 static bool WriteEtwEvent(int eventIndex, System.Runtime.Diagnostics.EventTraceActivity eventParam0, string eventParam1, long eventParam2, string eventParam3, string eventParam4)
211 EnsureEventDescriptors();
212 return FxTrace.Trace.EtwProvider.WriteEvent(ref eventDescriptors[eventIndex], eventParam0, eventParam1, eventParam2, eventParam3, eventParam4);
216 /// Writes ETW trace event
218 /// <param name="eventIndex">The index of the event descriptor</param>>
219 /// <param name="eventParam0">A parameter of the ETW event</param>>
220 /// <param name="eventParam1">A parameter of the ETW event</param>>
221 // Critical = Calls SecurityCritical method EtwProvider.WriteEvent
222 // Safe = We only allow setting of provider id from SecurityCritical code, access to EventDescriptors is SecurityCritical, and ETW limits buffer sizes.
223 [System.Security.SecuritySafeCriticalAttribute()]
224 static bool WriteEtwEvent(int eventIndex, System.Runtime.Diagnostics.EventTraceActivity eventParam0, string eventParam1)
226 EnsureEventDescriptors();
227 return FxTrace.Trace.EtwProvider.WriteEvent(ref eventDescriptors[eventIndex], eventParam0, eventParam1);
231 /// write a trace source into the diagnostic trace
233 /// <param name="eventIndex">The index of the event descriptor</param>
234 /// <param name="description">The description to write</param>
235 /// <param name="payload">The trace payload</param>
236 // Critical = Calls SecurityCritical method EtwDiagnosticTrace.WriteTraceSource
237 // Safe = We only allow setting of provider id from SecurityCritical code
238 [System.Security.SecuritySafeCriticalAttribute()]
239 static void WriteTraceSource(int eventIndex, string description, TracePayload payload)
241 EnsureEventDescriptors();
242 FxTrace.Trace.WriteTraceSource(ref eventDescriptors[eventIndex], description, payload);