84 lines
2.7 KiB
C#
84 lines
2.7 KiB
C#
|
/*******************************************************************/
|
||
|
/* 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");
|
||
|
}
|
||
|
}
|
||
|
}
|