singrdk/base/Kernel/Bartok/GCs/Trace.cs

84 lines
2.7 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
/*******************************************************************/
/* WARNING */
/* This file should be identical in the Bartok and Singularity */
/* depots. Master copy resides in Bartok Depot. Changes should be */
/* made to Bartok Depot and propagated to Singularity Depot. */
/*******************************************************************/
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
namespace System.GCs {
internal class Trace {
[Flags]
internal enum Area {
Pointer = 0x01,
Page = 0x02,
Heap = 0x04,
Stack = 0x08,
Thread = 0x10,
Allocate = 0x20,
Emu = 0x40
}
internal static Area filterArea = 0;
internal static UIntPtr filter;
internal static UIntPtr filterLow;
internal static UIntPtr filterHigh;
[System.Diagnostics.Conditional("TRACE")]
internal static void Log(Area area, String v, __arglist) {
if ((area & Trace.filterArea) == 0) {
return;
}
bool tryFind = false;
bool found = false;
if (filter != UIntPtr.Zero) {
tryFind = true;
ArgIterator argsFilter = new ArgIterator(__arglist);
while (argsFilter.GetRemainingCount() > 0) {
TypedReference tr = argsFilter.GetNextArg();
Type t = __reftype(tr);
if (t == typeof(System.UIntPtr)) {
UIntPtr u = __refvalue(tr, UIntPtr);
if (u == filter) {
found = true;
break;
}
}
}
}
if (!found && (filterLow != UIntPtr.Zero)) {
tryFind = true;
ArgIterator argsFilter = new ArgIterator(__arglist);
while (argsFilter.GetRemainingCount() > 0) {
TypedReference tr = argsFilter.GetNextArg();
Type t = __reftype(tr);
if (t == typeof(System.UIntPtr)) {
UIntPtr u = __refvalue(tr, UIntPtr);
if ((u >= filterLow) && (u <= filterHigh)) {
found = true;
break;
}
}
}
}
if (tryFind && !found) {
return;
}
ArgIterator args = new ArgIterator(__arglist);
VTable.DebugPrint(v, args);
VTable.DebugPrint("\n");
}
}
}