projector trace files
[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 /* Prototype Declarations */
12 class TraceCore; 
13 class TraceLogger; 
14 class TraceEntry;
15
16 /* Class Declarations */
17 class TraceCore 
18 {
19   private:
20         TraceLogger* traceLogger;
21
22   public:
23         TraceCore(char** argv);
24         ~TraceCore();
25
26         //TODO: some of these methods are for temporary use only
27         void RegisterLanguage(int lID); 
28         void RegisterLanguage(int lID, char* lName);
29         void RegisterEvent(int lID, int eID);
30         void LogEvent(int lID, int eID);
31         void LogEvent(int lID, int eID, int iLen, int* iData);
32         void LogEvent(int lID, int eID, int sLen, char* sData);
33         void LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
34 };
35
36 class TraceEntry
37 {
38   public:
39         int    languageID;
40         int    eventID;
41         double timestamp;
42         int    eLen;
43         int*   entity;
44         int    iLen;
45         int*   iData;
46         int    sLen;
47         char*  sData;
48
49         TraceEntry() {}
50         TraceEntry(int lID, int eID, double ts, int el, int* e, 
51                          int il, int* i, int sl, char* s): 
52                          languageID(lID), eventID(eID), timestamp(ts), 
53                          eLen(el), entity(e), iLen(il), iData(i), sLen(sl), sData(s) {}
54         TraceEntry(int lID, int eID, double ts,
55                          int il, int* i, int sl, char* s): 
56                          languageID(lID), eventID(eID), timestamp(ts), 
57                          eLen(0), entity(NULL), iLen(il), iData(i), sLen(sl), sData(s) {}
58         TraceEntry(TraceEntry& te);
59         ~TraceEntry();
60
61     void *operator new(size_t s) {void*ret=malloc(s);_MEMCHECK(ret);return ret;}
62     void *operator new(size_t, void *ptr) { return ptr; }
63     void operator delete(void *ptr) { free(ptr); }
64 #ifdef WIN32
65     void operator delete(void *, void *) { }
66 #endif
67
68         void write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek);
69 };
70
71 class TraceLogger
72 {
73   private:
74     int poolSize;
75     int numEntries;
76     TraceEntry *pool;
77         
78 #define MAX_NUM_LANGUAGES  10                   //NOTE: fixed temporarily
79
80         int   numLangs;
81         char *lName[MAX_NUM_LANGUAGES];         // Language Name 
82     char *fName[MAX_NUM_LANGUAGES];             // File name
83     FILE *fptrs[MAX_NUM_LANGUAGES];             // File pointer
84     int   binary;
85
86         int lastWriteFlag;              // set when writing log to file at end of program
87         int prevLID, prevSeek;  // for writing logs to file
88
89   public:
90     TraceLogger(char* program, int b);
91     ~TraceLogger();
92
93         void RegisterLanguage(int lID, char* ln);
94
95     void write(void);
96     void writeBinary(void);
97         void writeSts(void);
98
99     void add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData);
100
101   private:
102         void openLogFiles();
103         void closeLogFiles();
104
105         char* pgm;
106 };
107
108 #endif