diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c index b0d69b6b246..ddff692d28e 100644 --- a/mps/code/arenavm.c +++ b/mps/code/arenavm.c @@ -1102,7 +1102,8 @@ static Res vmArenaExtend(VMArena vmArena, Size size) break; } while(0); - + EVENT3(vmArenaExtendStart, size, chunkSize, + VMArenaReserved(VMArena2Arena(vmArena))); DIAG_SINGLEF(( "vmArenaExtend_Start", "to accommodate size $W, try chunkSize $W", (WriteFW)size, (WriteFW)chunkSize, " (VMArenaReserved currently $W bytes)\n", @@ -1129,6 +1130,8 @@ static Res vmArenaExtend(VMArena vmArena, Size size) /* remove slices, down to chunkHalf but no further */ for(; chunkSize > chunkHalf; chunkSize -= sliceSize) { if(chunkSize < chunkMin) { + EVENT2(vmArenaExtendFail, chunkMin, + VMArenaReserved(VMArena2Arena(vmArena))); DIAG_SINGLEF(( "vmArenaExtend_FailMin", "no remaining address-space chunk >= min($W)", (WriteFW)chunkMin, " (so VMArenaReserved remains $W bytes)\n", @@ -1145,6 +1148,7 @@ static Res vmArenaExtend(VMArena vmArena, Size size) vmArenaExtend_Done: + EVENT2(vmArenaExtendDone, chunkSize, VMArenaReserved(VMArena2Arena(vmArena))); DIAG_SINGLEF(( "vmArenaExtend_Done", "Request for new chunk of VM $W bytes succeeded", (WriteFW)chunkSize, " (VMArenaReserved now $W bytes)\n", diff --git a/mps/code/eventdef.h b/mps/code/eventdef.h index 27bb3bb6320..004ee6d9668 100644 --- a/mps/code/eventdef.h +++ b/mps/code/eventdef.h @@ -53,7 +53,7 @@ */ #define EventNameMAX ((size_t)19) -#define EventCodeMAX ((EventCode)0x0069) +#define EventCodeMAX ((EventCode)0x0071) /* FIXME: Work out why not-in-use events were not in use and restore or delete them. */ @@ -155,7 +155,17 @@ EVENT(X, ArenaFree , 0x0066, TRUE, Arena) \ EVENT(X, ArenaAllocFail , 0x0067, TRUE, Arena) \ EVENT(X, SegMerge , 0x0068, TRUE, Seg) \ - EVENT(X, SegSplit , 0x0069, TRUE, Seg) + EVENT(X, SegSplit , 0x0069, TRUE, Seg) \ + /* Events converted from RHSK's diagnostics */ \ + EVENT(X, vmArenaExtendStart , 0x006A, TRUE, Arena) \ + EVENT(X, vmArenaExtendFail , 0x006B, TRUE, Arena) \ + EVENT(X, vmArenaExtendDone , 0x006C, TRUE, Arena) \ + EVENT(X, MessagesDropped , 0x006D, TRUE, Arena) \ + EVENT(X, MessagesExist , 0x006E, TRUE, Arena) \ + EVENT(X, ChainCondemnAuto , 0x006F, TRUE, Trace) \ + EVENT(X, TraceFindGrey , 0x0070, TRUE, Trace) \ + EVENT(X, TraceBandAdvance , 0x0071, TRUE, Trace) + /* Remember to update EventNameMAX and EventCodeMAX in eventcom.h! (These are checked in EventInit.) */ @@ -555,6 +565,41 @@ PARAM(X, 2, P, segHi) \ PARAM(X, 3, A, at) +#define EVENT_vmArenaExtendStart_PARAMS(PARAM, X) \ + PARAM(X, 0, W, size) /* size to accommodate */ \ + PARAM(X, 1, W, chunkSize) /* chunkSize to try */ \ + PARAM(X, 2, W, reserved) /* current VMArenaReserved */ + +#define EVENT_vmArenaExtendFail_PARAMS(PARAM, X) \ + PARAM(X, 0, W, chunkMin) /* no remaining address space chunk >= chunkMin */ \ + PARAM(X, 1, W, reserved) /* current VMArenaReserved */ + +#define EVENT_vmArenaExtendDone_PARAMS(PARAM, X) \ + PARAM(X, 0, W, chunkSize) /* request succeeded for chunkSize bytes */ \ + PARAM(X, 1, W, reserved) /* new VMArenaReserved */ + +#define EVENT_MessagesDropped_PARAMS(PARAM, X) \ + PARAM(X, 0, W, count) /* count of messages dropped */ + +#define EVENT_MessagesExist_PARAMS(PARAM, X) + +#define EVENT_ChainCondemnAuto_PARAMS(PARAM, X) \ + PARAM(X, 0, P, chain) /* chain with gens being condemned */ \ + PARAM(X, 1, W, topCondemnedGenSerial) /* condemned gens [0..this] */ \ + PARAM(X, 2, W, genCount) /* total gens in chain */ + +#define EVENT_TraceFindGrey_PARAMS(PARAM, X) \ + PARAM(X, 0, P, arena) \ + PARAM(X, 1, W, ti) \ + PARAM(X, 2, P, seg) \ + PARAM(X, 3, W, rank) + +#define EVENT_TraceBandAdvance_PARAMS(PARAM, X) \ + PARAM(X, 0, P, arena) \ + PARAM(X, 1, W, ti) \ + PARAM(X, 2, W, rank) + + #endif /* eventdef_h */ /* C. COPYRIGHT AND LICENSE diff --git a/mps/code/global.c b/mps/code/global.c index bb666f4e44b..974ab9afffe 100644 --- a/mps/code/global.c +++ b/mps/code/global.c @@ -414,6 +414,7 @@ void GlobalsPrepareToDestroy(Globals arenaGlobals) /* report dropped messages (currently in diagnostic varieties only) */ if(arena->droppedMessages > 0) { + EVENT1(MessagesDropped, arena->droppedMessages); DIAG_SINGLEF(( "GlobalsPrepareToDestroy_dropped", "arena->droppedMessages = $U", (WriteFU)arena->droppedMessages, NULL )); @@ -425,6 +426,7 @@ void GlobalsPrepareToDestroy(Globals arenaGlobals) /* the message queue would have dangling pointers to messages */ /* whose memory has been unmapped. */ if(MessagePoll(arena)) { + EVENT0(MessagesExist); DIAG_SINGLEF(( "GlobalsPrepareToDestroy_queue", "Message queue not empty", NULL )); } diff --git a/mps/code/locus.c b/mps/code/locus.c index 22473026dc6..6ea5127ee12 100644 --- a/mps/code/locus.c +++ b/mps/code/locus.c @@ -295,6 +295,7 @@ Res ChainCondemnAuto(double *mortalityReturn, Chain chain, Trace trace) genNewSize = GenDescNewSize(gen); } while (genNewSize >= gen->capacity * (Size)1024); + EVENT3(ChainCondemnAuto, chain, topCondemnedGenSerial, chain->genCount); DIAG_SINGLEF(( "ChainCondemnAuto", "condemn gens [0..$U]", (WriteFU)topCondemnedGenSerial, " (of $U)", (WriteFU)chain->genCount, diff --git a/mps/code/trace.c b/mps/code/trace.c index c362a4809cf..9d2ea3af249 100644 --- a/mps/code/trace.c +++ b/mps/code/trace.c @@ -219,6 +219,7 @@ Bool traceBandAdvance(Trace trace) trace->band = RankAMBIG; return FALSE; } + EVENT3(TraceBandAdvance, trace->arena, trace->ti, trace->band); return TRUE; } @@ -905,6 +906,7 @@ static Bool traceFindGrey(Seg *segReturn, Rank *rankReturn, } *segReturn = seg; *rankReturn = rank; + EVENT4(TraceFindGrey, arena, ti, seg, rank); DIAG( traceFindGrey_diag(TRUE, rank); ); return TRUE; }