d536cc8ae6
`MB` and `GB` can either be interpreted as having base-10 units, or base-2. `MiB` and `GiB` removes this discrepancy so that units of memory are always interpreted using base-2 units.
68 lines
2.0 KiB
C#
68 lines
2.0 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 = "MiB"
|
|
};
|
|
|
|
_funcTabLeafSizeCounter = new PollingCounter("addr-tab-leaf-alloc", this, () => _funcTabLeafSize / 1024d / 1024d)
|
|
{
|
|
DisplayName = "AddressTable Total Leaf Bytes Allocated",
|
|
DisplayUnits = "MiB"
|
|
};
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|