EventLog.h 4.65 KB
Newer Older
Simon Marlow's avatar
Simon Marlow committed
1 2 3 4 5 6 7 8 9 10 11
/* -----------------------------------------------------------------------------
 *
 * (c) The GHC Team, 2008-2009
 *
 * Support for fast binary event logging.
 *
 * ---------------------------------------------------------------------------*/

#ifndef EVENTLOG_H
#define EVENTLOG_H

Simon Marlow's avatar
Simon Marlow committed
12
#include "rts/EventLogFormat.h"
Simon Marlow's avatar
Simon Marlow committed
13 14
#include "Capability.h"

15
#include "BeginPrivate.h"
16

17
#ifdef TRACING
Simon Marlow's avatar
Simon Marlow committed
18 19 20 21 22 23 24 25 26

/*
 * Descriptions of EventTags for events.
 */
extern char *EventTagDesc[];

void initEventLogging(void);
void endEventLogging(void);
void freeEventLogging(void);
27 28
void abortEventLogging(void); // #4512 - after fork child needs to abort
void flushEventLog(void);     // event log inherited from parent
29
void moreCapEventBufs (nat from, nat to);
Simon Marlow's avatar
Simon Marlow committed
30 31

/* 
32 33
 * Post a scheduler event to the capability's event buffer (an event
 * that has an associated thread).
Simon Marlow's avatar
Simon Marlow committed
34
 */
35
void postSchedEvent(Capability *cap, EventTypeNum tag, 
36
                    StgThreadID id, StgWord info1, StgWord info2);
37

38 39 40 41 42
/*
 * Post a nullary event.
 */
void postEvent(Capability *cap, EventTypeNum tag);

43 44 45
void postEventAtTimestamp (Capability *cap, EventTimestamp ts, 
                           EventTypeNum tag);

46 47
void postMsg(char *msg, va_list ap);

48
void postUserMsg(Capability *cap, char *msg, va_list ap);
49

50
void postCapMsg(Capability *cap, char *msg, va_list ap);
Simon Marlow's avatar
Simon Marlow committed
51

52 53
void postEventStartup(EventCapNo n_caps);

54 55 56 57 58 59
/*
 * Post an event relating to a capability itself (create/delete/etc)
 */
void postCapEvent (EventTypeNum  tag,
                   EventCapNo    capno);

60
/*
61
 * Post an event that is associated with a capability set
62
 */
63 64 65
void postCapsetEvent (EventTypeNum tag,
                      EventCapsetID capset,
                      StgWord info);
66

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
/*
 * Post a capability set event with a string payload
 */
void postCapsetStrEvent (EventTypeNum tag,
                         EventCapsetID capset,
                         char *msg);

/*
 * Post a capability set event with several strings payload
 */
void postCapsetVecEvent (EventTypeNum tag,
                         EventCapsetID capset,
                         int argc,
                         char *msg[]);

82 83
void postWallClockTime (EventCapsetID capset);

84 85 86 87 88
/* 
 * Post a `par` spark event
 */
void postSparkEvent(Capability *cap, EventTypeNum tag, StgWord info1);

Duncan Coutts's avatar
Duncan Coutts committed
89 90 91 92 93 94 95
/*
 * Post an event with several counters relating to `par` sparks.
 */
void postSparkCountersEvent (Capability *cap, 
                             SparkCounters counters,
                             StgWord remaining);

96 97 98 99 100 101 102
/*
 * Post an event to annotate a thread with a label
 */
void postThreadLabel(Capability    *cap,
                     EventThreadID  id,
                     char          *label);

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
/*
 * Various GC and heap events
 */
void postHeapEvent (Capability    *cap,
                    EventTypeNum   tag,
                    EventCapsetID  heap_capset,
                    StgWord        info1);

void postEventHeapInfo (EventCapsetID heap_capset,
                        nat           gens,
                        lnat          maxHeapSize,
                        lnat          allocAreaSize,
                        lnat          mblockSize,
                        lnat          blockSize);

void postEventGcStats  (Capability    *cap,
                        EventCapsetID  heap_capset,
                        nat            gen,
                        lnat           copied,
                        lnat           slop,
                        lnat           fragmentation,
                        nat            par_n_threads,
                        lnat           par_max_copied,
                        lnat           par_tot_copied);

128 129 130 131 132
#else /* !TRACING */

INLINE_HEADER void postSchedEvent (Capability *cap  STG_UNUSED,
                                   EventTypeNum tag STG_UNUSED,
                                   StgThreadID id   STG_UNUSED,
133 134
                                   StgWord info1    STG_UNUSED,
                                   StgWord info2    STG_UNUSED)
135 136
{ /* nothing */ }

137 138 139 140
INLINE_HEADER void postEvent (Capability *cap  STG_UNUSED,
                              EventTypeNum tag STG_UNUSED)
{ /* nothing */ }

141 142 143
INLINE_HEADER void postMsg (char *msg STG_UNUSED, 
                            va_list ap STG_UNUSED)
{ /* nothing */ }
Simon Marlow's avatar
Simon Marlow committed
144

145
INLINE_HEADER void postCapMsg (Capability *cap STG_UNUSED,
146 147 148
                               char *msg STG_UNUSED, 
                               va_list ap STG_UNUSED)
{ /* nothing */ }
Simon Marlow's avatar
Simon Marlow committed
149

150 151 152 153 154 155

INLINE_HEADER void postThreadLabel(Capability    *cap   STG_UNUSED,
                                   EventThreadID  id    STG_UNUSED,
                                   char          *label STG_UNUSED)
{ /* nothing */ }
                                   
Simon Marlow's avatar
Simon Marlow committed
156 157
#endif

158
#include "EndPrivate.h"
159

160
#endif /* TRACING_H */