EventLog.h 5.74 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

Ben Gamari's avatar
Ben Gamari committed
17
#if defined(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

Mitsutoshi Aoe's avatar
Mitsutoshi Aoe committed
50 51 52
void postUserBinaryEvent(Capability *cap, EventTypeNum type,
                         uint8_t *msg, size_t size);

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

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

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

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

83 84
void postWallClockTime (EventCapsetID capset);

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

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

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

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

void postEventHeapInfo (EventCapsetID heap_capset,
113
                        uint32_t    gens,
114 115 116 117
                        W_          maxHeapSize,
                        W_          allocAreaSize,
                        W_          mblockSize,
                        W_          blockSize);
118 119 120

void postEventGcStats  (Capability    *cap,
                        EventCapsetID  heap_capset,
121
                        uint32_t     gen,
122 123 124
                        W_           copied,
                        W_           slop,
                        W_           fragmentation,
125
                        uint32_t     par_n_threads,
126
                        W_           par_max_copied,
127 128
                        W_           par_tot_copied,
                        W_           par_balanced_copied);
129

130 131 132 133 134 135 136 137 138 139
void postTaskCreateEvent (EventTaskId taskId,
                          EventCapNo cap,
                          EventKernelThreadId tid);

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

void postTaskDeleteEvent (EventTaskId taskId);

140 141 142 143 144 145 146 147
void postHeapProfBegin(StgWord8 profile_id);

void postHeapProfSampleBegin(StgInt era);

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

Ben Gamari's avatar
Ben Gamari committed
148
#if defined(PROFILING)
149 150 151 152 153 154 155 156 157 158 159
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 */

160 161 162 163 164
#else /* !TRACING */

INLINE_HEADER void postSchedEvent (Capability *cap  STG_UNUSED,
                                   EventTypeNum tag STG_UNUSED,
                                   StgThreadID id   STG_UNUSED,
165 166
                                   StgWord info1    STG_UNUSED,
                                   StgWord info2    STG_UNUSED)
167 168
{ /* nothing */ }

169 170 171 172
INLINE_HEADER void postEvent (Capability *cap  STG_UNUSED,
                              EventTypeNum tag STG_UNUSED)
{ /* nothing */ }

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

177
INLINE_HEADER void postCapMsg (Capability *cap STG_UNUSED,
178
                               char *msg STG_UNUSED,
179 180
                               va_list ap STG_UNUSED)
{ /* nothing */ }
Simon Marlow's avatar
Simon Marlow committed
181

182 183 184 185 186

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

Simon Marlow's avatar
Simon Marlow committed
188 189
#endif

190
#include "EndPrivate.h"