X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Feventlog%2FEventLog.c;h=a48c92e457ad623b4492db7081e26a313ea68478;hb=6cf8982ac30be6836a0cdd8be5a6ac1a1a144213;hp=a972f4da5462290cae5e1f87f80c575104ffde37;hpb=e459b0d1199bff41cb92678493e4f462cea8aaf6;p=ghc-hetmet.git diff --git a/rts/eventlog/EventLog.c b/rts/eventlog/EventLog.c index a972f4d..a48c92e 100644 --- a/rts/eventlog/EventLog.c +++ b/rts/eventlog/EventLog.c @@ -62,7 +62,11 @@ char *EventDesc[] = { [EVENT_REQUEST_PAR_GC] = "Request parallel GC", [EVENT_CREATE_SPARK_THREAD] = "Create spark thread", [EVENT_LOG_MSG] = "Log message", + [EVENT_USER_MSG] = "User message", [EVENT_STARTUP] = "Startup", + [EVENT_GC_IDLE] = "GC idle", + [EVENT_GC_WORK] = "GC working", + [EVENT_GC_DONE] = "GC done", [EVENT_BLOCK_MARKER] = "Block marker" }; @@ -82,7 +86,7 @@ static void printAndClearEventBuf (EventsBuf *eventsBuf); static void postEventType(EventsBuf *eb, EventType *et); -static void postLogMsg(EventsBuf *eb, char *msg, va_list ap); +static void postLogMsg(EventsBuf *eb, EventTypeNum type, char *msg, va_list ap); static void postBlockMarker(EventsBuf *eb); static void closeBlockMarker(EventsBuf *ebuf); @@ -173,7 +177,7 @@ initEventLogging(void) /* Open event log file for writing. */ if ((event_log_file = fopen(event_log_filename, "wb")) == NULL) { - sysErrorBelch("initEventLoggin: can't open %s", event_log_filename); + sysErrorBelch("initEventLogging: can't open %s", event_log_filename); stg_exit(EXIT_FAILURE); } @@ -238,10 +242,14 @@ initEventLogging(void) case EVENT_GC_START: // (cap) case EVENT_GC_END: // (cap) case EVENT_STARTUP: + case EVENT_GC_IDLE: + case EVENT_GC_WORK: + case EVENT_GC_DONE: eventTypes[t].size = 0; break; case EVENT_LOG_MSG: // (msg) + case EVENT_USER_MSG: // (msg) eventTypes[t].size = 0xffff; break; @@ -391,9 +399,24 @@ postSchedEvent (Capability *cap, } } +void +postEvent (Capability *cap, EventTypeNum tag) +{ + EventsBuf *eb; + + eb = &capEventBuf[cap->no]; + + if (!hasRoomForEvent(eb, tag)) { + // Flush event buffer to make room for new event. + printAndClearEventBuf(eb); + } + + postEventHeader(eb, tag); +} + #define BUF 512 -void postLogMsg(EventsBuf *eb, char *msg, va_list ap) +void postLogMsg(EventsBuf *eb, EventTypeNum type, char *msg, va_list ap) { char buf[BUF]; nat size; @@ -409,7 +432,7 @@ void postLogMsg(EventsBuf *eb, char *msg, va_list ap) printAndClearEventBuf(eb); } - postEventHeader(eb, EVENT_LOG_MSG); + postEventHeader(eb, type); postPayloadSize(eb, size); postBuf(eb,(StgWord8*)buf,size); } @@ -417,15 +440,20 @@ void postLogMsg(EventsBuf *eb, char *msg, va_list ap) void postMsg(char *msg, va_list ap) { ACQUIRE_LOCK(&eventBufMutex); - postLogMsg(&eventBuf, msg, ap); + postLogMsg(&eventBuf, EVENT_LOG_MSG, msg, ap); RELEASE_LOCK(&eventBufMutex); } void postCapMsg(Capability *cap, char *msg, va_list ap) { - postLogMsg(&capEventBuf[cap->no], msg, ap); + postLogMsg(&capEventBuf[cap->no], EVENT_LOG_MSG, msg, ap); } +void postUserMsg(Capability *cap, char *msg) +{ + postLogMsg(&capEventBuf[cap->no], EVENT_USER_MSG, msg, NULL); +} + void closeBlockMarker (EventsBuf *ebuf) { StgInt8* save_pos;