#include "Trace.h"
#include "Capability.h"
-#include "Trace.h"
#include "RtsUtils.h"
#include "Stats.h"
#include "EventLog.h"
[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"
};
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;
for (c = 0; c < n_caps; ++c) {
postBlockMarker(&capEventBuf[c]);
}
+
+#ifdef THREADED_RTS
+ initMutex(&eventBufMutex);
+#endif
}
void
}
}
+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, EventTypeNum type, char *msg, va_list ap)
postLogMsg(&capEventBuf[cap->no], EVENT_LOG_MSG, msg, ap);
}
-void postUserMsg(Capability *cap, char *msg)
+void postUserMsg(Capability *cap, char *msg, va_list ap)
{
- postLogMsg(&capEventBuf[cap->no], EVENT_USER_MSG, msg, NULL);
+ postLogMsg(&capEventBuf[cap->no], EVENT_USER_MSG, msg, ap);
}
void closeBlockMarker (EventsBuf *ebuf)