aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Diagnostics/EventSources
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Diagnostics/EventSources')
-rw-r--r--ARMeilleure/Diagnostics/EventSources/AddressTableEventSource.cs51
1 files changed, 51 insertions, 0 deletions
diff --git a/ARMeilleure/Diagnostics/EventSources/AddressTableEventSource.cs b/ARMeilleure/Diagnostics/EventSources/AddressTableEventSource.cs
new file mode 100644
index 00000000..201a2562
--- /dev/null
+++ b/ARMeilleure/Diagnostics/EventSources/AddressTableEventSource.cs
@@ -0,0 +1,51 @@
+using System.Diagnostics.Tracing;
+
+namespace ARMeilleure.Diagnostics.EventSources
+{
+ [EventSource(Name = "ARMeilleure")]
+ class AddressTableEventSource : EventSource
+ {
+ public static readonly AddressTableEventSource Log = new();
+
+ private ulong _size;
+ private ulong _leafSize;
+ private PollingCounter _sizeCounter;
+ private PollingCounter _leafSizeCounter;
+
+ public AddressTableEventSource()
+ {
+ _sizeCounter = new PollingCounter("addr-tab-alloc", this, () => _size / 1024d / 1024d)
+ {
+ DisplayName = "AddressTable Total Bytes Allocated",
+ DisplayUnits = "MB"
+ };
+
+ _leafSizeCounter = new PollingCounter("addr-tab-leaf-alloc", this, () => _leafSize / 1024d / 1024d)
+ {
+ DisplayName = "AddressTable Total Leaf Bytes Allocated",
+ DisplayUnits = "MB"
+ };
+ }
+
+ public void Allocated(int bytes, bool leaf)
+ {
+ _size += (uint)bytes;
+
+ if (leaf)
+ {
+ _leafSize += (uint)bytes;
+ }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ _leafSizeCounter.Dispose();
+ _leafSizeCounter = null;
+
+ _sizeCounter.Dispose();
+ _sizeCounter = null;
+
+ base.Dispose(disposing);
+ }
+ }
+}