mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-23 07:12:12 -07:00
Address issues found in review <https://info.ravenbrook.com/mail/2018/09/13/15-44-23/0/>
Copied from Perforce Change: 195057
This commit is contained in:
parent
3f0dd10bdd
commit
0c8dc0dac5
7 changed files with 331 additions and 328 deletions
|
|
@ -149,7 +149,7 @@ int main(int argc, char *argv[])
|
|||
EVENT_ANY_FIELDS(EVENT_FIELD)
|
||||
#undef EVENT_FIELD
|
||||
puts("')\nHeaderDesc.__doc__ = '''");
|
||||
#define EVENT_FIELD(TYPE, NAME, DOC) printf(" %s -- %s\n", #NAME, DOC);
|
||||
#define EVENT_FIELD(TYPE, NAME, DOC) printf("%s -- %s\n", #NAME, DOC);
|
||||
EVENT_ANY_FIELDS(EVENT_FIELD)
|
||||
#undef EVENT_FIELD
|
||||
puts("'''");
|
||||
|
|
@ -169,6 +169,29 @@ int main(int argc, char *argv[])
|
|||
PAD_TO(sizeof(EventAnyStruct));
|
||||
puts("'");
|
||||
|
||||
puts("\n# Mapping from access mode to its name.");
|
||||
puts("ACCESS_MODE = {");
|
||||
printf(" %u: \"READ\",\n", (unsigned)AccessREAD);
|
||||
printf(" %u: \"WRITE\",\n", (unsigned)AccessWRITE);
|
||||
printf(" %u: \"READ/WRITE\",\n",
|
||||
(unsigned)BS_UNION(AccessREAD, AccessWRITE));
|
||||
puts("}");
|
||||
|
||||
puts("\n# Mapping from rank to its name.");
|
||||
puts("RANK = {");
|
||||
#define X(RANK) printf(" %u: \"%s\",\n", (unsigned)Rank ## RANK, #RANK);
|
||||
RANK_LIST(X)
|
||||
#undef X
|
||||
puts("}");
|
||||
|
||||
puts("\n# Mapping from trace start reason to its short decription.");
|
||||
puts("TRACE_START_WHY = {");
|
||||
#define X(WHY, SHORT, LONG) \
|
||||
printf(" %u: \"%s\",\n", (unsigned)TraceStartWhy ## WHY, SHORT);
|
||||
TRACE_START_WHY_LIST(X)
|
||||
#undef X
|
||||
puts("}");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -379,7 +379,7 @@ extern RefSet ScanStateSummary(ScanState ss);
|
|||
extern Bool TraceIdCheck(TraceId id);
|
||||
extern Bool TraceSetCheck(TraceSet ts);
|
||||
extern Bool TraceCheck(Trace trace);
|
||||
extern Res TraceCreate(Trace *traceReturn, Arena arena, int why);
|
||||
extern Res TraceCreate(Trace *traceReturn, Arena arena, TraceStartWhy why);
|
||||
extern void TraceDestroyInit(Trace trace);
|
||||
extern void TraceDestroyFinished(Trace trace);
|
||||
|
||||
|
|
@ -395,13 +395,13 @@ extern Rank TraceRankForAccess(Arena arena, Seg seg);
|
|||
extern void TraceSegAccess(Arena arena, Seg seg, AccessSet mode);
|
||||
|
||||
extern void TraceAdvance(Trace trace);
|
||||
extern Res TraceStartCollectAll(Trace *traceReturn, Arena arena, int why);
|
||||
extern Res TraceStartCollectAll(Trace *traceReturn, Arena arena, TraceStartWhy why);
|
||||
extern Res TraceDescribe(Trace trace, mps_lib_FILE *stream, Count depth);
|
||||
|
||||
/* traceanc.c -- Trace Ancillary */
|
||||
|
||||
extern Bool TraceStartMessageCheck(TraceStartMessage message);
|
||||
extern const char *TraceStartWhyToString(int why);
|
||||
extern const char *TraceStartWhyToString(TraceStartWhy why);
|
||||
extern void TracePostStartMessage(Trace trace);
|
||||
extern Bool TraceMessageCheck(TraceMessage message); /* trace end */
|
||||
extern void TracePostMessage(Trace trace); /* trace end */
|
||||
|
|
@ -545,8 +545,8 @@ extern void ArenaPark(Globals globals);
|
|||
extern void ArenaPostmortem(Globals globals);
|
||||
extern void ArenaExposeRemember(Globals globals, Bool remember);
|
||||
extern void ArenaRestoreProtection(Globals globals);
|
||||
extern Res ArenaStartCollect(Globals globals, int why);
|
||||
extern Res ArenaCollect(Globals globals, int why);
|
||||
extern Res ArenaStartCollect(Globals globals, TraceStartWhy why);
|
||||
extern Res ArenaCollect(Globals globals, TraceStartWhy why);
|
||||
extern Bool ArenaBusy(Arena arena);
|
||||
extern Bool ArenaHasAddr(Arena arena, Addr addr);
|
||||
extern void ArenaChunkInsert(Arena arena, Chunk chunk);
|
||||
|
|
|
|||
|
|
@ -443,7 +443,7 @@ typedef struct TraceStruct {
|
|||
Sig sig; /* <design/sig/> */
|
||||
TraceId ti; /* index into TraceSets */
|
||||
Arena arena; /* owning arena */
|
||||
int why; /* why the trace began */
|
||||
TraceStartWhy why; /* why the trace began */
|
||||
ZoneSet white; /* zones in the white set */
|
||||
ZoneSet mayMove; /* zones containing possibly moving objs */
|
||||
TraceState state; /* current state of trace */
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ typedef Size Epoch; /* design.mps.ld */
|
|||
typedef unsigned TraceId; /* <design/trace/> */
|
||||
typedef unsigned TraceSet; /* <design/trace/> */
|
||||
typedef unsigned TraceState; /* <design/trace/> */
|
||||
typedef unsigned TraceStartWhy;
|
||||
typedef unsigned AccessSet; /* <design/type/#access-set> */
|
||||
typedef unsigned Attr; /* <design/type/#attr> */
|
||||
typedef int RootVar; /* <design/type/#rootvar> */
|
||||
|
|
@ -298,13 +299,14 @@ enum {
|
|||
/* These definitions must match <code/mps.h#rank>. */
|
||||
/* This is checked by <code/mpsi.c#check>. */
|
||||
|
||||
#define RANK_LIST(X) X(AMBIG) X(EXACT) X(FINAL) X(WEAK)
|
||||
|
||||
enum {
|
||||
RankMIN = 0,
|
||||
RankAMBIG = 0,
|
||||
RankEXACT = 1,
|
||||
RankFINAL = 2,
|
||||
RankWEAK = 3,
|
||||
RankLIMIT
|
||||
#define X(RANK) Rank ## RANK,
|
||||
RANK_LIST(X)
|
||||
#undef X
|
||||
RankLIMIT,
|
||||
RankMIN = 0
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -356,16 +358,29 @@ enum {
|
|||
/* TODO: A better way for MPS extensions to extend the list of reasons
|
||||
instead of the catch-all TraceStartWhyEXTENSION. */
|
||||
|
||||
#define TRACE_START_WHY_LIST(X) \
|
||||
X(CHAIN_GEN0CAP, "gen 0 capacity", \
|
||||
"Generation 0 of a chain has reached capacity: start a minor " \
|
||||
"collection.") \
|
||||
X(DYNAMICCRITERION, "dynamic criterion", \
|
||||
"Need to start full collection now, or there won't be enough " \
|
||||
"memory (ArenaAvail) to complete it.") \
|
||||
X(OPPORTUNISM, "opportunism", \
|
||||
"Opportunism: client predicts plenty of idle time, so start full " \
|
||||
"collection.") \
|
||||
X(CLIENTFULL_INCREMENTAL, "full incremental", \
|
||||
"Client requests: start incremental full collection now.") \
|
||||
X(CLIENTFULL_BLOCK, "full", \
|
||||
"Client requests: immediate full collection.") \
|
||||
X(WALK, "walk", "Walking all live objects.") \
|
||||
X(EXTENSION, "extension", \
|
||||
"Extension: an MPS extension started the trace.")
|
||||
|
||||
enum {
|
||||
TraceStartWhyBASE = 1, /* not a reason, the base of the enum. */
|
||||
TraceStartWhyCHAIN_GEN0CAP = TraceStartWhyBASE, /* start minor */
|
||||
TraceStartWhyDYNAMICCRITERION, /* start full */
|
||||
TraceStartWhyOPPORTUNISM, /* start full */
|
||||
TraceStartWhyCLIENTFULL_INCREMENTAL, /* start full */
|
||||
TraceStartWhyCLIENTFULL_BLOCK, /* do full */
|
||||
TraceStartWhyWALK, /* walking references -- see walk.c */
|
||||
TraceStartWhyEXTENSION, /* MPS extension using traces */
|
||||
TraceStartWhyLIMIT /* not a reason, the limit of the enum. */
|
||||
#define X(WHY, SHORT, LONG) TraceStartWhy ## WHY,
|
||||
TRACE_START_WHY_LIST(X)
|
||||
#undef X
|
||||
TraceStartWhyLIMIT
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -648,7 +648,7 @@ static void traceCreatePoolGen(GenDesc gen)
|
|||
}
|
||||
}
|
||||
|
||||
Res TraceCreate(Trace *traceReturn, Arena arena, int why)
|
||||
Res TraceCreate(Trace *traceReturn, Arena arena, TraceStartWhy why)
|
||||
{
|
||||
TraceId ti;
|
||||
Trace trace;
|
||||
|
|
@ -1723,7 +1723,7 @@ void TraceAdvance(Trace trace)
|
|||
* "why" is a TraceStartWhy* enum member that specifies why the
|
||||
* collection is starting. */
|
||||
|
||||
Res TraceStartCollectAll(Trace *traceReturn, Arena arena, int why)
|
||||
Res TraceStartCollectAll(Trace *traceReturn, Arena arena, TraceStartWhy why)
|
||||
{
|
||||
Trace trace = NULL;
|
||||
Res res;
|
||||
|
|
|
|||
|
|
@ -141,42 +141,21 @@ static void traceStartMessageInit(Arena arena, TraceStartMessage tsMessage)
|
|||
* why a trace started.
|
||||
*/
|
||||
|
||||
const char *TraceStartWhyToString(int why)
|
||||
const char *TraceStartWhyToString(TraceStartWhy why)
|
||||
{
|
||||
const char *r;
|
||||
|
||||
switch(why) {
|
||||
case TraceStartWhyCHAIN_GEN0CAP:
|
||||
r = "Generation 0 of a chain has reached capacity:"
|
||||
" start a minor collection.";
|
||||
break;
|
||||
case TraceStartWhyDYNAMICCRITERION:
|
||||
r = "Need to start full collection now, or there won't be enough"
|
||||
" memory (ArenaAvail) to complete it.";
|
||||
break;
|
||||
case TraceStartWhyOPPORTUNISM:
|
||||
r = "Opportunism: client predicts plenty of idle time,"
|
||||
" so start full collection.";
|
||||
break;
|
||||
case TraceStartWhyCLIENTFULL_INCREMENTAL:
|
||||
r = "Client requests: start incremental full collection now.";
|
||||
break;
|
||||
case TraceStartWhyCLIENTFULL_BLOCK:
|
||||
r = "Client requests: immediate full collection.";
|
||||
break;
|
||||
case TraceStartWhyWALK:
|
||||
r = "Walking all live objects.";
|
||||
break;
|
||||
case TraceStartWhyEXTENSION:
|
||||
r = "Extension: an MPS extension started the trace.";
|
||||
break;
|
||||
switch (why) {
|
||||
#define X(WHY, SHORT, LONG) case TraceStartWhy ## WHY: r = (LONG); break;
|
||||
TRACE_START_WHY_LIST(X)
|
||||
#undef X
|
||||
default:
|
||||
NOTREACHED;
|
||||
r = "Unknown reason (internal error).";
|
||||
break;
|
||||
}
|
||||
|
||||
/* Should fit in buffer without truncation; see .whybuf.len */
|
||||
/* Must fit in buffer without truncation; see .whybuf.len */
|
||||
AVER(StringLength(r) < TRACE_START_MESSAGE_WHYBUF_LEN);
|
||||
|
||||
return r;
|
||||
|
|
@ -193,14 +172,13 @@ const char *TraceStartWhyToString(int why)
|
|||
* necessary.
|
||||
*/
|
||||
|
||||
static void traceStartWhyToTextBuffer(char *s, size_t len, int why)
|
||||
static void traceStartWhyToTextBuffer(char *s, size_t len, TraceStartWhy why)
|
||||
{
|
||||
const char *r;
|
||||
size_t i;
|
||||
|
||||
AVER(s);
|
||||
/* len can be anything, including 0. */
|
||||
AVER(TraceStartWhyBASE <= why);
|
||||
AVER(why < TraceStartWhyLIMIT);
|
||||
|
||||
r = TraceStartWhyToString(why);
|
||||
|
|
@ -654,7 +632,7 @@ void ArenaPostmortem(Globals globals)
|
|||
/* ArenaStartCollect -- start a collection of everything in the
|
||||
* arena; leave unclamped. */
|
||||
|
||||
Res ArenaStartCollect(Globals globals, int why)
|
||||
Res ArenaStartCollect(Globals globals, TraceStartWhy why)
|
||||
{
|
||||
Arena arena;
|
||||
Res res;
|
||||
|
|
@ -677,7 +655,7 @@ failStart:
|
|||
|
||||
/* ArenaCollect -- collect everything in arena; leave parked */
|
||||
|
||||
Res ArenaCollect(Globals globals, int why)
|
||||
Res ArenaCollect(Globals globals, TraceStartWhy why)
|
||||
{
|
||||
Res res;
|
||||
|
||||
|
|
|
|||
533
mps/tool/monitor
533
mps/tool/monitor
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue