Some instrumentation for projector
[charm.git] / src / conv-perf / traceCore.h
1
2 #ifndef __TRACE_CORE_H__
3 #define __TRACE_CORE_H__
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8
9 #include "converse.h"
10
11 #define MAX_NUM_LANGUAGES  32                   //NOTE: fixed temporarily
12
13
14
15 /* Prototype Declarations */
16 class TraceCore;
17 class TraceLogger;
18 class TraceEntry;
19
20 CpvExtern(int, _traceCoreOn);
21 /*** structure of events ***/
22
23 struct TraceCoreEvent {
24         int eID;
25         struct TraceCoreEvent *next;
26 };
27
28 /* Class Declarations */
29 class TraceCore
30 {
31   private:
32         TraceLogger* traceLogger;
33         void startPtc();
34         void closePtc();
35         FILE *fpPtc;    // File pointer for the ptc file
36         struct TraceCoreEvent  *eventLists[MAX_NUM_LANGUAGES];
37         int maxlID;
38         int maxeID[MAX_NUM_LANGUAGES];
39         int numLangs;
40         int numEvents[MAX_NUM_LANGUAGES];
41         int lIDList[MAX_NUM_LANGUAGES];
42         char *lNames[MAX_NUM_LANGUAGES];
43         int traceCoreOn;
44   public:
45         TraceCore(char** argv);
46         ~TraceCore();
47
48         //TODO: some of these methods are for temporary use only
49         void RegisterLanguage(int lID);
50         void RegisterLanguage(int lID, char* lName);
51         void RegisterEvent(int lID, int eID);
52         void LogEvent(int lID, int eID);
53         void LogEvent(int lID, int eID, int iLen, int* iData);
54         void LogEvent(int lID, int eID, int sLen, char* sData);
55         void LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
56
57 };
58
59 class TraceEntry
60 {
61   public:
62         int    languageID;
63         int    eventID;
64         double timestamp;
65         int    eLen;
66         int*   entity;
67         int    iLen;
68         int*   iData;
69         int    sLen;
70         char*  sData;
71
72         TraceEntry() {}
73         TraceEntry(int lID, int eID, double ts, int el, int* e,
74                          int il, int* i, int sl, char* s):
75                          languageID(lID), eventID(eID), timestamp(ts),
76                          eLen(el), entity(e), iLen(il), iData(i), sLen(sl), sData(s) {}
77         TraceEntry(int lID, int eID, double ts,
78                          int il, int* i, int sl, char* s):
79                          languageID(lID), eventID(eID), timestamp(ts),
80                          eLen(0), entity(NULL), iLen(il), iData(i), sLen(sl), sData(s) {}
81         TraceEntry(TraceEntry& te);
82         ~TraceEntry();
83
84     void *operator new(size_t s) {void*ret=malloc(s);_MEMCHECK(ret);return ret;}
85     void *operator new(size_t, void *ptr) { return ptr; }
86     void operator delete(void *ptr) { free(ptr); }
87 #ifdef WIN32
88     void operator delete(void *, void *) { }
89 #endif
90
91         void write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek);
92 };
93
94 class TraceLogger
95 {
96   private:
97     int poolSize;
98     int numEntries;
99     TraceEntry *pool;
100
101         int   numLangs;
102  char *lName[MAX_NUM_LANGUAGES];                // Language Name
103     char *fName[MAX_NUM_LANGUAGES];             // File name
104     FILE *fptrs[MAX_NUM_LANGUAGES];             // File pointer
105
106     int   binary;
107
108         int lastWriteFlag;              // set when writing log to file at end of program
109         int prevLID, prevSeek;  // for writing logs to file
110
111   public:
112     TraceLogger(char* program, int b);
113     ~TraceLogger();
114
115         void RegisterLanguage(int lID, char* ln);
116
117     void write(void);
118     void writeBinary(void);
119         void writeSts(void);
120
121     void add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData);
122     void initlogfiles();
123
124
125   private:
126         void openLogFiles();
127         void closeLogFiles();
128         void verifyFptrs();
129         void flushLogFiles();
130
131         char* pgm;
132 };
133
134 #endif