68 lines
2 KiB
C#
68 lines
2 KiB
C#
|
using System.Diagnostics.Tracing;
|
|||
|
using System.Threading;
|
|||
|
|
|||
|
namespace ARMeilleure.Diagnostics
|
|||
|
{
|
|||
|
[EventSource(Name = "ARMeilleure")]
|
|||
|
class TranslatorEventSource : EventSource
|
|||
|
{
|
|||
|
public static readonly TranslatorEventSource Log = new();
|
|||
|
|
|||
|
private int _rejitQueue;
|
|||
|
private ulong _funcTabSize;
|
|||
|
private ulong _funcTabLeafSize;
|
|||
|
private PollingCounter _rejitQueueCounter;
|
|||
|
private PollingCounter _funcTabSizeCounter;
|
|||
|
private PollingCounter _funcTabLeafSizeCounter;
|
|||
|
|
|||
|
public TranslatorEventSource()
|
|||
|
{
|
|||
|
_rejitQueueCounter = new PollingCounter("rejit-queue-length", this, () => _rejitQueue)
|
|||
|
{
|
|||
|
DisplayName = "Rejit Queue Length"
|
|||
|
};
|
|||
|
|
|||
|
_funcTabSizeCounter = new PollingCounter("addr-tab-alloc", this, () => _funcTabSize / 1024d / 1024d)
|
|||
|
{
|
|||
|
DisplayName = "AddressTable Total Bytes Allocated",
|
|||
|
DisplayUnits = "MB"
|
|||
|
};
|
|||
|
|
|||
|
_funcTabLeafSizeCounter = new PollingCounter("addr-tab-leaf-alloc", this, () => _funcTabLeafSize / 1024d / 1024d)
|
|||
|
{
|
|||
|
DisplayName = "AddressTable Total Leaf Bytes Allocated",
|
|||
|
DisplayUnits = "MB"
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
public void RejitQueueAdd(int count)
|
|||
|
{
|
|||
|
Interlocked.Add(ref _rejitQueue, count);
|
|||
|
}
|
|||
|
|
|||
|
public void AddressTableAllocated(int bytes, bool leaf)
|
|||
|
{
|
|||
|
_funcTabSize += (uint)bytes;
|
|||
|
|
|||
|
if (leaf)
|
|||
|
{
|
|||
|
_funcTabLeafSize += (uint)bytes;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected override void Dispose(bool disposing)
|
|||
|
{
|
|||
|
_rejitQueueCounter.Dispose();
|
|||
|
_rejitQueueCounter = null;
|
|||
|
|
|||
|
_funcTabLeafSizeCounter.Dispose();
|
|||
|
_funcTabLeafSizeCounter = null;
|
|||
|
|
|||
|
_funcTabSizeCounter.Dispose();
|
|||
|
_funcTabSizeCounter = null;
|
|||
|
|
|||
|
base.Dispose(disposing);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|