public void ReportReentrancy02() { var thread = new Thread(() => { UnsafeWriter.AllowUnsafeWriterCaching = true; UnsafeWriterStatistics.ClearEvents(); UnsafeWriterStatistics.ReportReentrancy = true; try { using (var cookie = UnsafeWriter.NewThreadLocalWriter()) { using (var nestedCookie = UnsafeWriter.NewThreadLocalWriter()) cookie.Writer.Write(0); } } finally { UnsafeWriterStatistics.ReportReentrancy = false; } }); thread.Start(); thread.Join(); var reentrancyEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.REENTRANCY); Assert.IsTrue(reentrancyEvent.Stacktraces.Count == 2, "reentrancyEvent.Stacktraces.Count == 2"); }
public void TestReportAccessCounter() { var thread = new Thread(() => { UnsafeWriterStatistics.ClearEvents(); for (int i = 0; i < UnsafeWriterStatistics.ReportAccessCounterThreshold + UnsafeWriterStatistics.ReportOnOfN; ++i) { using (var cookie = UnsafeWriter.NewThreadLocalWriter()) { } } }); thread.Start(); thread.Join(); var accessCounterEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.ACCESS_COUNTER); }
public void ReportAllocationOnNonCachedThread() { var thread = new Thread(() => { UnsafeWriterStatistics.ClearEvents(); using (var cookie = UnsafeWriter.NewThreadLocalWriter()) { for (int i = 0; i < UnsafeWriterStatistics.ReportAllocationOnNonCachedThreadThreshold + 1; ++i) { cookie.Writer.Write(0); } } }); thread.Start(); thread.Join(); var memoryAllocationEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.MEMORY_ALLOCATION); }
public void ReportReentrancy01() { var thread = new Thread(() => { UnsafeWriter.AllowUnsafeWriterCaching = true; UnsafeWriterStatistics.ClearEvents(); using (var cookie = UnsafeWriter.NewThreadLocalWriter()) { using (var nestedCookie = UnsafeWriter.NewThreadLocalWriter()) cookie.Writer.Write(0); } }); thread.Start(); thread.Join(); var reentrancyEvent = UnsafeWriterStatistics.GetEvents().FirstOrDefault(@event => @event.Type == UnsafeWriterStatistics.EventType.REENTRANCY); Assert.IsNull(reentrancyEvent); }