//------------------------------------------------------------------------------ // // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace System.ServiceModel.Channels { using System.Runtime; using System.Runtime.Diagnostics; using System.Security; internal partial class TD { static System.Resources.ResourceManager resourceManager; static System.Globalization.CultureInfo resourceCulture; [System.Security.SecurityCriticalAttribute()] static System.Runtime.Diagnostics.EventDescriptor[] eventDescriptors; static object syncLock = new object(); // Double-checked locking pattern requires volatile for read/write synchronization static volatile bool eventDescriptorsCreated; private TD() { } [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification="This is an auto-generated code, some ETW/TraceSource mixed code would use it.")] static System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceManager, null)) { resourceManager = new System.Resources.ResourceManager("System.ServiceModel.Channels.TD", typeof(TD).Assembly); } return resourceManager; } } [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification="This template is shared across all assemblies, some of which use this accessor.")] internal static System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Check if trace definition is enabled /// Event description ID=4800, Level=Warning, Channel=debug /// internal static bool MaxPendingMessagesTotalSizeReachedIsEnabled() { return (FxTrace.ShouldTraceWarning && (FxTrace.ShouldTraceWarningToTraceSource || TD.IsEtwEventEnabled(0))); } /// /// 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. /// Event description ID=4800, Level=Warning, Channel=debug /// /// The event trace activity /// 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. /// 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. /// 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. internal static void MaxPendingMessagesTotalSizeReached(System.Runtime.Diagnostics.EventTraceActivity eventTraceActivity, string messageID, long maxPendingMessagesTotalSize, string bindingElementTypeName) { TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null); if (TD.IsEtwEventEnabled(0)) { TD.WriteEtwEvent(0, eventTraceActivity, messageID, maxPendingMessagesTotalSize, bindingElementTypeName, payload.AppDomainFriendlyName); } if (FxTrace.ShouldTraceWarningToTraceSource) { string description = string.Format(Culture, ResourceManager.GetString("MaxPendingMessagesTotalSizeReached", Culture), messageID, maxPendingMessagesTotalSize, bindingElementTypeName); TD.WriteTraceSource(0, description, payload); } } /// /// Check if trace definition is enabled /// Event description ID=4801, Level=verbose, Channel=Debug /// internal static bool ByteStreamMessageDecodingStartIsEnabled() { return (FxTrace.ShouldTraceVerbose && TD.IsEtwEventEnabled(1)); } /// /// Gets trace definition like: ByteStreamMessageEncoder started decoding the message. /// Event description ID=4801, Level=verbose, Channel=Debug /// internal static void ByteStreamMessageDecodingStart() { TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null); if (TD.IsEtwEventEnabled(1)) { TD.WriteEtwEvent(1, null, payload.AppDomainFriendlyName); } } /// /// Check if trace definition is enabled /// Event description ID=4802, Level=verbose, Channel=Debug /// internal static bool ByteStreamMessageEncodingStartIsEnabled() { return (FxTrace.ShouldTraceVerbose && TD.IsEtwEventEnabled(2)); } /// /// Gets trace definition like: ByteStreamMessageEncoder started encoding the message. /// Event description ID=4802, Level=verbose, Channel=Debug /// /// The event trace activity internal static void ByteStreamMessageEncodingStart(System.Runtime.Diagnostics.EventTraceActivity eventTraceActivity) { TracePayload payload = FxTrace.Trace.GetSerializedPayload(null, null, null); if (TD.IsEtwEventEnabled(2)) { TD.WriteEtwEvent(2, eventTraceActivity, payload.AppDomainFriendlyName); } } /// /// Creates the event descriptors array /// // Critical = Sets the SecurityCritical member eventDescriptors // Safe = We control what the event descriptors contain [System.Security.SecuritySafeCriticalAttribute()] static void CreateEventDescriptors() { System.Runtime.Diagnostics.EventDescriptor[] descriptors = new System.Runtime.Diagnostics.EventDescriptor[] { new System.Runtime.Diagnostics.EventDescriptor(4800, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Warning, (byte)TraceEventOpcode.Info, 0x0, 0x1000000000000000), new System.Runtime.Diagnostics.EventDescriptor(4801, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Verbose, (byte)TraceEventOpcode.Start, 0x9fb, 0x1000000000001000), new System.Runtime.Diagnostics.EventDescriptor(4802, 0, (byte)TraceChannel.Debug, (byte)TraceEventLevel.Verbose, (byte)TraceEventOpcode.Start, 0x9fb, 0x1000000000001000)}; ushort[] e2eEvents = new ushort[] { 4800, 4802}; FxTrace.UpdateEventDefinitions(descriptors, e2eEvents); eventDescriptors = descriptors; } /// /// Ensures that the event descriptors array is initialized /// static void EnsureEventDescriptors() { if (eventDescriptorsCreated) { return; } System.Threading.Monitor.Enter(syncLock); try { if (eventDescriptorsCreated) { return; } CreateEventDescriptors(); eventDescriptorsCreated = true; } finally { System.Threading.Monitor.Exit(syncLock); } } /// /// Check if ETW tracing is enabled for the particular event /// /// The index of the event descriptor static bool IsEtwEventEnabled(int eventIndex) { if (FxTrace.Trace.IsEtwProviderEnabled) { EnsureEventDescriptors(); return FxTrace.IsEventEnabled(eventIndex); } return false; } /// /// Writes ETW trace event /// /// The index of the event descriptor> /// A parameter of the ETW event> /// A parameter of the ETW event> /// A parameter of the ETW event> /// A parameter of the ETW event> /// A parameter of the ETW event> // Critical = Calls SecurityCritical method EtwProvider.WriteEvent // Safe = We only allow setting of provider id from SecurityCritical code, access to EventDescriptors is SecurityCritical, and ETW limits buffer sizes. [System.Security.SecuritySafeCriticalAttribute()] static bool WriteEtwEvent(int eventIndex, System.Runtime.Diagnostics.EventTraceActivity eventParam0, string eventParam1, long eventParam2, string eventParam3, string eventParam4) { EnsureEventDescriptors(); return FxTrace.Trace.EtwProvider.WriteEvent(ref eventDescriptors[eventIndex], eventParam0, eventParam1, eventParam2, eventParam3, eventParam4); } /// /// Writes ETW trace event /// /// The index of the event descriptor> /// A parameter of the ETW event> /// A parameter of the ETW event> // Critical = Calls SecurityCritical method EtwProvider.WriteEvent // Safe = We only allow setting of provider id from SecurityCritical code, access to EventDescriptors is SecurityCritical, and ETW limits buffer sizes. [System.Security.SecuritySafeCriticalAttribute()] static bool WriteEtwEvent(int eventIndex, System.Runtime.Diagnostics.EventTraceActivity eventParam0, string eventParam1) { EnsureEventDescriptors(); return FxTrace.Trace.EtwProvider.WriteEvent(ref eventDescriptors[eventIndex], eventParam0, eventParam1); } /// /// write a trace source into the diagnostic trace /// /// The index of the event descriptor /// The description to write /// The trace payload // Critical = Calls SecurityCritical method EtwDiagnosticTrace.WriteTraceSource // Safe = We only allow setting of provider id from SecurityCritical code [System.Security.SecuritySafeCriticalAttribute()] static void WriteTraceSource(int eventIndex, string description, TracePayload payload) { EnsureEventDescriptors(); FxTrace.Trace.WriteTraceSource(ref eventDescriptors[eventIndex], description, payload); } } }