1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-23 23:36:27 -07:00

New function tracedescribe.

Copied from Perforce
 Change: 185631
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Gareth Rees 2014-04-17 14:22:19 +01:00
parent 375e4fb42d
commit 8f6b41e9ac
3 changed files with 56 additions and 1 deletions

View file

@ -1040,6 +1040,8 @@ Res GlobalsDescribe(Globals arenaGlobals, mps_lib_FILE *stream)
Arena arena;
Ring node, nextNode;
Index i;
TraceId ti;
Trace trace;
if (!TESTT(Globals, arenaGlobals)) return ResFAIL;
if (stream == NULL) return ResFAIL;
@ -1070,7 +1072,6 @@ Res GlobalsDescribe(Globals arenaGlobals, mps_lib_FILE *stream)
arena->insideShield ? "inside shield\n" : "outside shield\n",
"busyTraces $B\n", (WriteFB)arena->busyTraces,
"flippedTraces $B\n", (WriteFB)arena->flippedTraces,
/* @@@@ no TraceDescribe function */
"epoch $U\n", (WriteFU)arena->epoch,
"history {\n",
NULL);
@ -1119,6 +1120,13 @@ Res GlobalsDescribe(Globals arenaGlobals, mps_lib_FILE *stream)
if (res != ResOK) return res;
}
TRACE_SET_ITER(ti, trace, TraceSetUNIV, arena)
if (TraceSetIsMember(arena->busyTraces, trace)) {
res = TraceDescribe(trace, stream);
if (res != ResOK) return res;
}
TRACE_SET_ITER_END(ti, trace, TraceSetUNIV, arena);
/* @@@@ What about grey rings? */
res = WriteF(stream, "} Globals $P\n", (WriteFP)arenaGlobals, NULL);

View file

@ -397,6 +397,7 @@ extern void TraceSegAccess(Arena arena, Seg seg, AccessSet mode);
extern void TraceQuantum(Trace trace);
extern Res TraceStartCollectAll(Trace *traceReturn, Arena arena, int why);
extern Res TraceDescribe(Trace trace, mps_lib_FILE *stream);
/* traceanc.c -- Trace Ancillary */

View file

@ -1899,6 +1899,52 @@ failStart:
}
/* TraceDescribe -- describe a trace */
Res TraceDescribe(Trace trace, mps_lib_FILE *stream)
{
Res res;
const char *state;
if (!TESTT(Trace, trace)) return ResFAIL;
if (stream == NULL) return ResFAIL;
switch (trace->state) {
case TraceINIT: state = "INIT"; break;
case TraceUNFLIPPED: state = "UNFLIPPED"; break;
case TraceFLIPPED: state = "FLIPPED"; break;
case TraceRECLAIM: state = "RECLAIM"; break;
case TraceFINISHED: state = "FINISHED"; break;
default: state = "unknown"; break;
}
res = WriteF(stream, "Trace $P ($U) {\n", (WriteFP)trace, (WriteFU)trace->ti,
"arena $P ($U)\n", (WriteFP)trace->arena,
(WriteFU)trace->arena->serial,
"why \"$S\"\n", (WriteFS)TraceStartWhyToString(trace->why),
"state $S\n", (WriteFS)state,
"band $U\n", (WriteFU)trace->band,
"white $B\n", (WriteFB)trace->white,
"mayMove $B\n", (WriteFB)trace->mayMove,
"chain $P\n", (WriteFP)trace->chain,
"condemned $U\n", (WriteFU)trace->condemned,
"notCondemned $U\n", (WriteFU)trace->notCondemned,
"foundation $U\n", (WriteFU)trace->foundation,
"rate $U\n", (WriteFU)trace->rate,
"rootScanSize $U\n", (WriteFU)trace->rootScanSize,
"rootCopiedSize $U\n", (WriteFU)trace->rootCopiedSize,
"segScanSize $U\n", (WriteFU)trace->segScanSize,
"segCopiedSize $U\n", (WriteFU)trace->segCopiedSize,
"forwardedSize $U\n", (WriteFU)trace->forwardedSize,
"preservedInPlaceSize $U\n", (WriteFU)trace->preservedInPlaceSize,
NULL);
if (res != ResOK) return res;
res = WriteF(stream, "} Trace $P\n", (WriteFP)trace, NULL);
return res;
}
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2001-2014 Ravenbrook Limited