123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- // ---------------------------------------------------------------------
- // Copyright (c) 2015 Microsoft
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- // ---------------------------------------------------------------------
- namespace Microsoft.IO
- {
- using System;
- using System.Diagnostics.Tracing;
- public sealed partial class RecyclableMemoryStreamManager
- {
- [EventSource(Name = "Microsoft-IO-RecyclableMemoryStream", Guid = "{B80CD4E4-890E-468D-9CBA-90EB7C82DFC7}")]
- public sealed class Events : EventSource
- {
- public static Events Writer = new Events();
- public enum MemoryStreamBufferType
- {
- Small,
- Large
- }
- public enum MemoryStreamDiscardReason
- {
- TooLarge,
- EnoughFree
- }
- [Event(1, Level = EventLevel.Verbose)]
- public void MemoryStreamCreated(Guid guid, string tag, int requestedSize)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(1, guid, tag ?? string.Empty, requestedSize);
- }
- }
- [Event(2, Level = EventLevel.Verbose)]
- public void MemoryStreamDisposed(Guid guid, string tag)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(2, guid, tag ?? string.Empty);
- }
- }
- [Event(3, Level = EventLevel.Critical)]
- public void MemoryStreamDoubleDispose(Guid guid, string tag, string allocationStack, string disposeStack1,
- string disposeStack2)
- {
- if (this.IsEnabled())
- {
- this.WriteEvent(3, guid, tag ?? string.Empty, allocationStack ?? string.Empty,
- disposeStack1 ?? string.Empty, disposeStack2 ?? string.Empty);
- }
- }
- [Event(4, Level = EventLevel.Error)]
- public void MemoryStreamFinalized(Guid guid, string tag, string allocationStack)
- {
- if (this.IsEnabled())
- {
- WriteEvent(4, guid, tag ?? string.Empty, allocationStack ?? string.Empty);
- }
- }
- [Event(5, Level = EventLevel.Verbose)]
- public void MemoryStreamToArray(Guid guid, string tag, string stack, int size)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(5, guid, tag ?? string.Empty, stack ?? string.Empty, size);
- }
- }
- [Event(6, Level = EventLevel.Informational)]
- public void MemoryStreamManagerInitialized(int blockSize, int largeBufferMultiple, int maximumBufferSize)
- {
- if (this.IsEnabled())
- {
- WriteEvent(6, blockSize, largeBufferMultiple, maximumBufferSize);
- }
- }
- [Event(7, Level = EventLevel.Verbose)]
- public void MemoryStreamNewBlockCreated(long smallPoolInUseBytes)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(7, smallPoolInUseBytes);
- }
- }
- [Event(8, Level = EventLevel.Verbose)]
- public void MemoryStreamNewLargeBufferCreated(int requiredSize, long largePoolInUseBytes)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(8, requiredSize, largePoolInUseBytes);
- }
- }
- [Event(9, Level = EventLevel.Verbose)]
- public void MemoryStreamNonPooledLargeBufferCreated(int requiredSize, string tag, string allocationStack)
- {
- if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None))
- {
- WriteEvent(9, requiredSize, tag ?? string.Empty, allocationStack ?? string.Empty);
- }
- }
- [Event(10, Level = EventLevel.Warning)]
- public void MemoryStreamDiscardBuffer(MemoryStreamBufferType bufferType, string tag,
- MemoryStreamDiscardReason reason)
- {
- if (this.IsEnabled())
- {
- WriteEvent(10, bufferType, tag ?? string.Empty, reason);
- }
- }
- [Event(11, Level = EventLevel.Error)]
- public void MemoryStreamOverCapacity(int requestedCapacity, long maxCapacity, string tag,
- string allocationStack)
- {
- if (this.IsEnabled())
- {
- WriteEvent(11, requestedCapacity, maxCapacity, tag ?? string.Empty, allocationStack ?? string.Empty);
- }
- }
- }
- }
- }
- // This is here for .NET frameworks which don't support EventSource. We basically shim bare functionality used above to
- #if NET40
- namespace System.Diagnostics.Tracing
- {
- public enum EventLevel
- {
- LogAlways = 0,
- Critical,
- Error,
- Warning,
- Informational,
- Verbose,
- }
- public enum EventKeywords : long
- {
- None = 0x0,
- }
- [AttributeUsage(AttributeTargets.Class)]
- public sealed class EventSourceAttribute : Attribute
- {
- public string Name { get; set; }
- public string Guid { get; set; }
- }
- [AttributeUsage(AttributeTargets.Method)]
- public sealed class EventAttribute : Attribute
- {
- public EventAttribute(int id) { }
- public EventLevel Level { get; set; }
- }
- public class EventSource
- {
- public void WriteEvent(params object[] unused)
- {
- return;
- }
- public bool IsEnabled()
- {
- return false;
- }
- public bool IsEnabled(EventLevel level, EventKeywords keywords)
- {
- return false;
- }
- }
- }
- #endif
|