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

9
#pragma once
Simon Marlow's avatar
Simon Marlow committed
10

Simon Marlow's avatar
Simon Marlow committed
11
#include "rts/EventLogFormat.h"
12
#include "rts/EventLogWriter.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

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

24
void initEventLogging(const EventLogWriter *writer);
Simon Marlow's avatar
Simon Marlow committed
25 26
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 (uint32_t from, uint32_t 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
void postEventAtTimestamp (Capability *cap, EventTimestamp ts,
44 45
                           EventTypeNum tag);

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

48
void postUserEvent(Capability *cap, EventTypeNum type, char *msg);
49

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

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

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

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
/*
 * 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[]);

80 81
void postWallClockTime (EventCapsetID capset);

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

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

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

101 102 103 104 105 106
/*
 * Various GC and heap events
 */
void postHeapEvent (Capability    *cap,
                    EventTypeNum   tag,
                    EventCapsetID  heap_capset,
107
                    W_           info1);
108 109

void postEventHeapInfo (EventCapsetID heap_capset,
110
                        uint32_t    gens,
111 112 113 114
                        W_          maxHeapSize,
                        W_          allocAreaSize,
                        W_          mblockSize,
                        W_          blockSize);
115 116 117

void postEventGcStats  (Capability    *cap,
                        EventCapsetID  heap_capset,
118
                        uint32_t     gen,
119 120 121
                        W_           copied,
                        W_           slop,
                        W_           fragmentation,
122
                        uint32_t     par_n_threads,
123 124
                        W_           par_max_copied,
                        W_           par_tot_copied);
125

126 127 128 129 130 131 132 133 134 135
void postTaskCreateEvent (EventTaskId taskId,
                          EventCapNo cap,
                          EventKernelThreadId tid);

void postTaskMigrateEvent (EventTaskId taskId,
                           EventCapNo capno,
                           EventCapNo new_capno);

void postTaskDeleteEvent (EventTaskId taskId);

136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
void postHeapProfBegin(StgWord8 profile_id);

void postHeapProfSampleBegin(StgInt era);

void postHeapProfSampleString(StgWord8 profile_id,
                              const char *label,
                              StgWord64 residency);

#ifdef PROFILING
void postHeapProfCostCentre(StgWord32 ccID,
                            const char *label,
                            const char *module,
                            const char *srcloc,
                            StgBool is_caf);

void postHeapProfSampleCostCentre(StgWord8 profile_id,
                                  CostCentreStack *stack,
                                  StgWord64 residency);
#endif /* PROFILING */

156 157 158 159 160
#else /* !TRACING */

INLINE_HEADER void postSchedEvent (Capability *cap  STG_UNUSED,
                                   EventTypeNum tag STG_UNUSED,
                                   StgThreadID id   STG_UNUSED,
161 162
                                   StgWord info1    STG_UNUSED,
                                   StgWord info2    STG_UNUSED)
163 164
{ /* nothing */ }

165 166 167 168
INLINE_HEADER void postEvent (Capability *cap  STG_UNUSED,
                              EventTypeNum tag STG_UNUSED)
{ /* nothing */ }

169
INLINE_HEADER void postMsg (char *msg STG_UNUSED,
170 171
                            va_list ap STG_UNUSED)
{ /* nothing */ }
Simon Marlow's avatar
Simon Marlow committed
172

173
INLINE_HEADER void postCapMsg (Capability *cap STG_UNUSED,
174
                               char *msg STG_UNUSED,
175 176
                               va_list ap STG_UNUSED)
{ /* nothing */ }
Simon Marlow's avatar
Simon Marlow committed
177

178 179 180 181 182

INLINE_HEADER void postThreadLabel(Capability    *cap   STG_UNUSED,
                                   EventThreadID  id    STG_UNUSED,
                                   char          *label STG_UNUSED)
{ /* nothing */ }
183

Simon Marlow's avatar
Simon Marlow committed
184 185
#endif

186
#include "EndPrivate.h"