projector trace files
authorArun Singla <asingla@uiuc.edu>
Wed, 1 May 2002 16:51:41 +0000 (16:51 +0000)
committerArun Singla <asingla@uiuc.edu>
Wed, 1 May 2002 16:51:41 +0000 (16:51 +0000)
src/conv-perf/charmEvents.h
src/conv-perf/charmProjections.C
src/conv-perf/charmProjections.h
src/conv-perf/converseEvents.h
src/conv-perf/projectorCore.h [deleted file]
src/conv-perf/threadEvents.h
src/conv-perf/traceCore.C
src/conv-perf/traceCore.h
src/conv-perf/traceCoreCommon.C
src/conv-perf/traceCoreCommon.h

index 6e9dc7b2e7cd244f3105d0d866cd86ee3ca4b3bb..ebf16b8d832390e51a45523abe6509760f8d898a 100644 (file)
@@ -3,6 +3,7 @@
 #define __CHARM_EVENTS_H__
 
 #include "charmProjections.h"
+#include "traceCoreAPI.h"
 
 /* Language ID */
 #define _CHARM_LANG_ID         2       // language ID for charm 
@@ -25,9 +26,8 @@
 #define  _E_END_UNPACK          19
 
 /* Trace Macros */
-// TODO Currently there is no EventDataPrototype for the purpose of testing
 #define REGISTER_CHARM \
-       { RegisterLanguage(_CHARM_LANG_ID); \
+       { RegisterLanguage(_CHARM_LANG_ID, "charm"); \
          RegisterEvent(_CHARM_LANG_ID, _E_CREATION         ); \
          RegisterEvent(_CHARM_LANG_ID, _E_BEGIN_PROCESSING ); \
          RegisterEvent(_CHARM_LANG_ID, _E_END_PROCESSING   ); \
@@ -50,8 +50,8 @@
 #define _LOG_E_BEGIN_EXECUTE_DETAILED(event, msgType, ep, srcPe, ml) \
        { beginExecuteDetailed(event, msgType, ep, srcPe, ml); }
 #define _LOG_E_END_EXECUTE()           { endExecute(); }
-//#define _LOG_E_BEGIN_PROCESSING() 
-//#define _LOG_E_END_PROCESSING() 
+//TODO#define _LOG_E_BEGIN_PROCESSING() 
+//TODO#define _LOG_E_END_PROCESSING() 
 #define _LOG_E_ENQUEUE(env)            { enqueue(env); }
 #define _LOG_E_DEQUEUE(env)            { dequeue(env); }
 #define _LOG_E_BEGIN_COMPUTATION()     { beginComputation(); }
index de88d7c25fddcc46cb7d4edb25416287784c99f7..008fe028e33b6b0758521904410108e4f7b35277 100644 (file)
@@ -5,6 +5,8 @@
 #include "charmProjections.h"
 #include "traceCoreCommon.h"
 #include "charmEvents.h"
+#include "ck.h"
+
 
 CtvStaticDeclare(int,curThreadEvent);
 
@@ -112,18 +114,12 @@ extern "C" void beginComputation(void)
        //_threadChare = CkRegisterChare("dummy_thread_chare", 0);
        //_threadEP = CkRegisterEp("dummy_thread_ep", 0, _threadMsg,_threadChare);
        }
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = 0;
-       iData[2] = iData[3] = -1;
-       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_COMPUTATION, 4, iData); 
+       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_COMPUTATION, 0, NULL); 
 }
 
 extern "C" void endComputation(void)
 {
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = 0;
-       iData[2] = iData[3] = -1;
-       LogEvent1(_CHARM_LANG_ID, _E_END_COMPUTATION, 4, iData); 
+       LogEvent1(_CHARM_LANG_ID, _E_END_COMPUTATION, 0, NULL); 
 }
 
 extern "C" void messageRecv(char *env, int pe) {} //TODO
@@ -132,34 +128,30 @@ extern "C" void userEvent(int e) {}       //TODO
 
 extern "C" void beginPack(void)
 {
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = iData[2] = 0;
-       iData[3] = CkMyPe();
-       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PACK, 4, iData); 
+       int* iData = (int*)malloc(sizeof(int)); 
+       iData[0] = CkMyPe();
+       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_PACK, 1, iData); 
 }
 
 extern "C" void endPack(void)
 {
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = iData[2] = 0;
-       iData[3] = CkMyPe();
-       LogEvent1(_CHARM_LANG_ID, _E_END_PACK, 4, iData); 
+       int* iData = (int*)malloc(sizeof(int)); 
+       iData[0] = CkMyPe();
+       LogEvent1(_CHARM_LANG_ID, _E_END_PACK, 1, iData); 
 }
 
 extern "C" void beginUnpack(void)
 {
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = iData[2] = 0;
-       iData[3] = CkMyPe();
-       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_UNPACK, 4, iData); 
+       int* iData = (int*)malloc(sizeof(int)); 
+       iData[0] = CkMyPe();
+       LogEvent1(_CHARM_LANG_ID, _E_BEGIN_UNPACK, 1, iData); 
 }
 
 extern "C" void endUnpack(void)
 {
-       int* iData = (int*)malloc(sizeof(int)*4); 
-       iData[0] = iData[1] = iData[2] = 0;
-       iData[3] = CkMyPe();
-       LogEvent1(_CHARM_LANG_ID, _E_END_UNPACK, 4, iData); 
+       int* iData = (int*)malloc(sizeof(int)); 
+       iData[0] = CkMyPe();
+       LogEvent1(_CHARM_LANG_ID, _E_END_UNPACK, 1, iData); 
 }
 
 
index 104085ae63c0b5358ebd972add31c969b4e3c9e9..8b30667fd8f557f9611b75dd0cc117a306a6a7c1 100644 (file)
@@ -2,7 +2,8 @@
 #ifndef __CHARM_PROJECTIONS_H__
 #define __CHARM_PROJECTIONS_H__
 
-#include "ck.h"        //NOTE: ck.h included for envelope
+// forward declaration
+class envelope;
 
 #ifdef __cplusplus
 extern "C" {
index a75ef065aa14b8b3e1bae671cc5aa254f99da86b..68545b998e5772482b656dfef42537058c4c39be 100644 (file)
@@ -2,10 +2,11 @@
 #ifndef __CONVERSE_EVENTS_H__
 #define __CONVERSE_EVENTS_H__
 
-#include "traceCoreCommon.h"
+#include "traceCoreAPI.h"
+#include "converseProjections.h"
 
 /* Language ID */
-#define _CONVERSE_LANG_ID      0       // language ID for converse
+#define _CONVERSE_LANG_ID      1       // language ID for converse
 
 /* Event IDs */
 #define _E_MSG_SENT                    0
@@ -18,9 +19,8 @@
 #define _E_PROC_BUSY           7       // Processor goes busy 
 
 /* Trace Macros */
-// TODO Currently there is no EventDataPrototype for the purpose of testing
 #define REGISTER_CONVERSE \
-       { RegisterLanguage(_CONVERSE_LANG_ID); \
+       { RegisterLanguage(_CONVERSE_LANG_ID, "converse"); \
          RegisterEvent(_CONVERSE_LANG_ID, _E_MSG_SENT     ); \
          RegisterEvent(_CONVERSE_LANG_ID, _E_MSG_QUEUED   ); \
          RegisterEvent(_CONVERSE_LANG_ID, _E_MSG_RECV_MC  ); \
          RegisterEvent(_CONVERSE_LANG_ID, _E_PROC_IDLE    ); \
          RegisterEvent(_CONVERSE_LANG_ID, _E_PROC_BUSY    ); \
        }
-#define _LOG_E_MSG_SENT() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_SENT); }
+#define _LOG_E_MSG_SENT(destPE, size) \
+       { msgSent(destPE, size); }
 #define _LOG_E_MSG_QUEUED() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_QUEUED); }
+       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_QUEUED); }         //TODO
 #define _LOG_E_MSG_RECV_MC() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_RECV_MC); }
+       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_RECV_MC); }        //TODO
 #define _LOG_E_MSG_RECV_SC() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_RECV_SC); }
-#define _LOG_E_HANDLER_BEGIN() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_HANDLER_BEGIN); }
-#define _LOG_E_HANDLER_END() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_HANDLER_END); }
+       { LogEvent(_CONVERSE_LANG_ID, _E_MSG_RECV_SC); }        //TODO
+#define _LOG_E_HANDLER_BEGIN(handlerIdx) \
+       { handlerBegin(handlerIdx); }
+#define _LOG_E_HANDLER_END(handlerIdx) \
+       { handlerEnd(handlerIdx); }
 #define _LOG_E_PROC_IDLE() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_PROC_IDLE); }
+       { procIdle(); }
 #define _LOG_E_PROC_BUSY() \
-       { LogEvent(_CONVERSE_LANG_ID, _E_PROC_BUSY); }
+       { procBusy(); }
 
 #endif
diff --git a/src/conv-perf/projectorCore.h b/src/conv-perf/projectorCore.h
deleted file mode 100644 (file)
index bb6c980..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-class ProjectorCore
-{
-  public:
-       //TODO
-       /*
-       RegisterInterpretor(LanguageID, LanguageNameString, Interpretor)
-       RegisterAnalyzer(LanguageID, LanguageNameString, Analyzer)
-       RegisterVizualizer(LanguageID, LanguageNameString, Vizualizer)
-       */
-};
-
-class TraceReader
-{
-
-};
index 0015e25af6637723d740af218489d2ee648b75c2..b1aca27619ae88541d64c47b1cfaa6ae01532b16 100644 (file)
@@ -5,7 +5,7 @@
 #include "traceCoreCommon.h"
 
 /* Language ID */
-#define _THREAD_LANG_ID                1       // language ID for threads 
+#define _THREAD_LANG_ID                3       // language ID for threads 
 
 /* Event IDs */
 #define _E_THREAD_CREATION     0
@@ -16,7 +16,7 @@
 /* Trace Macros */
 // TODO Currently there is no EventDataPrototype for the purpose of testing
 #define REGISTER_THREAD \
-       { RegisterLanguage(_THREAD_LANG_ID); \
+       { RegisterLanguage(_THREAD_LANG_ID, "thread"); \
          RegisterEvent(_THREAD_LANG_ID, _E_THREAD_CREATION); \
          RegisterEvent(_THREAD_LANG_ID, _E_THREAD_AWAKEN  ); \
          RegisterEvent(_THREAD_LANG_ID, _E_THREAD_RESUME  ); \
index b3abc21307586f6d8bf18aad2f025ac42907e1ea..df134b35e8c35952f5e445ebe777662ceeeacecc 100644 (file)
@@ -7,35 +7,42 @@
 #include "traceCore.h"
 #include "traceCoreCommon.h"
 
-/***************** Class TraceCore Definition *****************/
-//TODO: currently these are dummy definitions
+#include "converseEvents.h"    //TODO: remove this hack for REGISTER_CONVESE
+#include "charmEvents.h"       //TODO: remove this hack for REGISTER_CHARM
+
+CpvExtern(int, _traceCoreOn);
+CpvExtern(double, _traceCoreInitTime);
+CpvExtern(char*, _traceCoreRoot);
+CpvExtern(int, _traceCoreBufferSize);
+CpvExtern(TraceCore*, _traceCore);
+
+/* Trace Timer */
+#define  TRACE_CORE_TIMER   CmiWallTimer
+inline double TraceCoreTimer() { return TRACE_CORE_TIMER() - CpvAccess(_traceCoreInitTime); }
 
+/***************** Class TraceCore Definition *****************/
 TraceCore::TraceCore(char** argv)
 {
        int binary = CmiGetArgFlag(argv,"+binary-trace");
-       logPool = new LogPool(CpvAccess(_traceCoreRoot), binary);
+       traceLogger = new TraceLogger(CpvAccess(_traceCoreRoot), binary);
+
+       REGISTER_CONVERSE
+       REGISTER_CHARM
 }
 
 TraceCore::~TraceCore()
-{
-       if(logPool) delete logPool;
-}
+{ if(traceLogger) delete traceLogger; }
 
-void TraceCore::RegisterLanguage(int lID)
-{
-       CmiPrintf("registering language (%d)\n", lID);
-}      
+void TraceCore::RegisterLanguage(int lID, char* ln)
+{ traceLogger->RegisterLanguage(lID, ln); }    
 
+//TODO: currently these are dummy definitions
 void TraceCore::RegisterEvent(int lID, int eID)
-{
-       CmiPrintf("registering event (%d, %d)\n", lID, eID);
-}      
+{ CmiPrintf("registering event (%d, %d)\n", lID, eID); }       
 
-//NOTE: only for compatibility with incomplete converse instrumentation
+//TODO: only for compatibility with incomplete converse instrumentation
 void TraceCore::LogEvent(int lID, int eID)
-{
-       CmiPrintf("logging event (%d, %d)\n", lID, eID);
-}
+{ LogEvent(lID, eID, 0, NULL, 0, NULL); }
 
 void TraceCore::LogEvent(int lID, int eID, int iLen, int* iData)
 { LogEvent(lID, eID, iLen, iData, 0, NULL); }
@@ -56,27 +63,41 @@ void TraceCore::LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char*
        CmiPrintf("\n");
 
 
-       logPool->add(lID, eID, TraceCoreTimer(), iLen, iData, sLen, sData); 
+       traceLogger->add(lID, eID, TraceCoreTimer(), iLen, iData, sLen, sData); 
 }
 
-/***************** Class LogEntry Definition *****************/
-LogEntry::~LogEntry()
+/***************** Class TraceEntry Definition *****************/
+TraceEntry::TraceEntry(TraceEntry& te)
+{
+       languageID = te.languageID;
+       eventID    = te.eventID;
+       timestamp  = te.timestamp;
+       eLen       = te.eLen;
+       entity     = te.entity;
+       iLen       = te.iLen;
+       iData      = te.iData;
+       sLen       = te.sLen;
+       sData      = te.sData;
+}
+
+TraceEntry::~TraceEntry()
 {
        if(entity) delete [] entity;
        if(iData)  delete [] iData;
        if(sData)  delete [] sData;
 }
 
-void LogEntry::write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek)
+void TraceEntry::write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek)
 {
+       //NOTE: no need to write languageID to file
        if(prevLID == 0 && nextLID ==0)
-               fprintf(fp, "%d %d %f %d %d", languageID, eventID, timestamp, 0, 0); 
+               fprintf(fp, "%d %f %d %d", eventID, timestamp, 0, 0); 
        else if(prevLID == 0 && nextLID !=0)
-               fprintf(fp, "%d %d %f %d %d %d", languageID, eventID, timestamp, 0, nextLID, nextSeek); 
+               fprintf(fp, "%d %f %d %d %d", eventID, timestamp, 0, nextLID, nextSeek); 
        else if(prevLID != 0 && nextLID ==0)
-               fprintf(fp, "%d %d %f %d %d %d", languageID, eventID, timestamp, prevLID, prevSeek, 0); 
+               fprintf(fp, "%d %f %d %d %d", eventID, timestamp, prevLID, prevSeek, 0); 
        else // if(prevLID != 0 && nextLID !=0)
-               fprintf(fp, "%d %d %f %d %d %d %d", languageID, eventID, timestamp, prevLID, prevSeek, nextLID, nextSeek);
+               fprintf(fp, "%d %f %d %d %d %d", eventID, timestamp, prevLID, prevSeek, nextLID, nextSeek);
 
        fprintf(fp, " %d", eLen);
        if(eLen != 0) {
@@ -88,15 +109,21 @@ void LogEntry::write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextS
          for(int i=0; i<iLen; i++) fprintf(fp, " %d", iData[i]);  
        }
 
-       if(sLen !=0) fprintf(fp, " %s", sData);
+       if(sLen !=0) fprintf(fp, " %s\n", sData);
+       else fprintf(fp, "\n");
+
+       // free memory 
+       if(entity) delete [] entity;
+       if(iData)  delete [] iData;
+       if(sData)  delete [] sData;
 }
 
-/***************** Class LogPool Definition *****************/
-LogPool::LogPool(char* program, int b): numLangs(0)
+/***************** Class TraceLogger Definition *****************/
+TraceLogger::TraceLogger(char* program, int b): 
+       numLangs(1), numEntries(0), lastWriteFlag(0), prevLID(0), prevSeek(0) 
 {
   binary = b;
-  pool = new LogEntry[CpvAccess(_traceCoreBufferSize)];
-  numEntries = 0;
+  pool = new TraceEntry[CpvAccess(_traceCoreBufferSize)];
   poolSize = CpvAccess(_traceCoreBufferSize);
 
   pgm = new char[strlen(program)];
@@ -105,15 +132,17 @@ LogPool::LogPool(char* program, int b): numLangs(0)
   closeLogFiles();
 }
 
-LogPool::~LogPool() 
+TraceLogger::~TraceLogger() 
 {
-  if(binary) writeBinary();
-  else       write();
+  if(binary)
+  { lastWriteFlag = 1; writeBinary(); }
+  else
+  { lastWriteFlag = 1; write(); }
   delete [] pool;
   delete [] fName;
 }
 
-void LogPool::RegisterLanguage(int lID, char* ln)
+void TraceLogger::RegisterLanguage(int lID, char* ln)
 {
        numLangs++;
 
@@ -127,7 +156,7 @@ void LogPool::RegisterLanguage(int lID, char* ln)
        FILE* fp = NULL;
        do
        {
-       fp = fopen(fName[lID], "w+");
+       fp = fopen(fName[lID], "w");
        } while (!fp && (errno == EINTR || errno == EMFILE));
        if(!fp) {
        CmiAbort("Cannot open Projector Trace File for writing ... \n");
@@ -138,14 +167,13 @@ void LogPool::RegisterLanguage(int lID, char* ln)
        fclose(fp);
 }
 
-//TODO: incomplete - how to take care of first and last entry's prev and next fields
-void LogPool::write(void)
+void TraceLogger::write(void)
 {
        openLogFiles();
 
-       int currLID=0, prevLID=0, nextLID=0;
-       int pLID =0, nLID =0;
-       int currSeek=0, prevSeek=0, nextSeek=0;
+       int currLID=0, nextLID=0;
+       int pLID=0, nLID=0;
+       int currSeek=0, nextSeek=0;
        int i;
        for(i=0; i<numEntries-1; i++) {
                currLID  = pool[i].languageID;
@@ -160,40 +188,50 @@ void LogPool::write(void)
 
                prevSeek = currSeek; prevLID = currLID; 
        }
-       //pool[i].write(fptrs[pool[i].languageID], prevLID, prevSeek, 0, 0);    //NOTE: this is wrong ??
-       //TODO how to write the last entry, we donot know about next entry ??
+       if(lastWriteFlag==1) {
+               currLID  = pool[i].languageID;
+               FILE* fp = fptrs[currLID];
+               currSeek = ftell(fp); 
+               nextLID  = nextSeek = 0;
+
+               pLID = ((prevLID==currLID)?0:prevLID);
+               nLID = ((nextLID==currLID)?0:nextLID);
+               pool[i].write(fp, pLID, prevSeek, nLID, nextSeek);
+       }
 
        closeLogFiles();
 }
 
 //TODO
-void LogPool::writeBinary(void) {};
-void LogPool::writeSts(void) {};
+void TraceLogger::writeBinary(void) {};
+//TODO
+void TraceLogger::writeSts(void) {};
 
-void LogPool::add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData)
+void TraceLogger::add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData)
 {
-  new (&pool[numEntries++])
-    LogEntry(lID, eID, timestamp, iLen, iData, sLen, sData); 
+  new (&pool[numEntries++]) TraceEntry(lID, eID, timestamp, iLen, iData, sLen, sData); 
   if(poolSize==numEntries) {
     double writeTime = TraceCoreTimer();
 
     if(binary) writeBinary(); 
        else       write();
 
-    numEntries = 0;
+       // move the last entry of pool to first position
+    new (&pool[0]) TraceEntry(pool[numEntries-1]); 
+    numEntries = 1;
        //TODO
-    //new (&pool[numEntries++]) LogEntry(0, BEGIN_INTERRUPT, writeTime);
-    //new (&pool[numEntries++]) LogEntry(0, END_INTERRUPT, TraceCoreTimer());
+    //new (&pool[numEntries++]) TraceEntry(0, BEGIN_INTERRUPT, writeTime);
+    //new (&pool[numEntries++]) TraceEntry(0, END_INTERRUPT, TraceCoreTimer());
   }
 }
 
-void LogPool::openLogFiles()
+void TraceLogger::openLogFiles()
 {
-  for(int i=0; i<numLangs; i++) {
+  for(int i=1; i<numLangs; i++) {
        FILE* fp = NULL;
        do
        {
-       fp = fopen(fName[i], "w+");
+       fp = fopen(fName[i], "a");
        } while (!fp && (errno == EINTR || errno == EMFILE));
        if(!fp) {
        CmiAbort("Cannot open Projector Trace File for writing ... \n");
@@ -202,9 +240,9 @@ void LogPool::openLogFiles()
   }
 }
 
-void LogPool::closeLogFiles()
+void TraceLogger::closeLogFiles()
 {
-  for(int i=0; i<numLangs; i++)
+  for(int i=1; i<numLangs; i++)
        fclose(fptrs[i]);
 }
 
index fb002582fc7182e27af02b761226a001e8addee9..9a3507c277e715f103b900c7debd6d0932ca03d1 100644 (file)
@@ -1,3 +1,4 @@
+
 #ifndef __TRACE_CORE_H__
 #define __TRACE_CORE_H__
 
 /* Prototype Declarations */
 class TraceCore; 
 class TraceLogger; 
-class LogEntry;
-class LogPool;
+class TraceEntry;
 
 /* Class Declarations */
 class TraceCore 
 {
   private:
-       LogPool* logPool;
+       TraceLogger* traceLogger;
 
   public:
        TraceCore(char** argv);
        ~TraceCore();
 
-       void RegisterLanguage(int lID); //TODO temporary
+       //TODO: some of these methods are for temporary use only
+       void RegisterLanguage(int lID); 
        void RegisterLanguage(int lID, char* lName);
        void RegisterEvent(int lID, int eID);
        void LogEvent(int lID, int eID);
@@ -32,10 +33,7 @@ class TraceCore
        void LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
 };
 
-//TODO: probably not required at this point. Since we are writing only to file
-class TraceLogger {};
-
-class LogEntry
+class TraceEntry
 {
   public:
        int    languageID;
@@ -48,16 +46,17 @@ class LogEntry
        int    sLen;
        char*  sData;
 
-       LogEntry() {}
-       LogEntry(int lID, int eID, double ts, int el, int* e, 
+       TraceEntry() {}
+       TraceEntry(int lID, int eID, double ts, int el, int* e, 
                         int il, int* i, int sl, char* s): 
                         languageID(lID), eventID(eID), timestamp(ts), 
                         eLen(el), entity(e), iLen(il), iData(i), sLen(sl), sData(s) {}
-       LogEntry(int lID, int eID, double ts,
+       TraceEntry(int lID, int eID, double ts,
                         int il, int* i, int sl, char* s): 
                         languageID(lID), eventID(eID), timestamp(ts), 
                         eLen(0), entity(NULL), iLen(il), iData(i), sLen(sl), sData(s) {}
-       ~LogEntry();
+       TraceEntry(TraceEntry& te);
+       ~TraceEntry();
 
     void *operator new(size_t s) {void*ret=malloc(s);_MEMCHECK(ret);return ret;}
     void *operator new(size_t, void *ptr) { return ptr; }
@@ -69,12 +68,12 @@ class LogEntry
        void write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek);
 };
 
-class LogPool
+class TraceLogger
 {
   private:
     int poolSize;
     int numEntries;
-    LogEntry *pool;
+    TraceEntry *pool;
        
 #define        MAX_NUM_LANGUAGES  10                   //NOTE: fixed temporarily
 
@@ -84,9 +83,12 @@ class LogPool
     FILE *fptrs[MAX_NUM_LANGUAGES];            // File pointer
     int   binary;
 
+       int lastWriteFlag;              // set when writing log to file at end of program
+       int prevLID, prevSeek;  // for writing logs to file
+
   public:
-    LogPool(char* program, int b);
-    ~LogPool();
+    TraceLogger(char* program, int b);
+    ~TraceLogger();
 
        void RegisterLanguage(int lID, char* ln);
 
index 2cb60bee3d0d29acf517264ef23e115add0e6483..65ba059be1a3892ce16fd3442c7709b83ca95949 100644 (file)
@@ -1,10 +1,10 @@
 
-#include "converse.h"
 #include "traceCore.h"
 #include "traceCoreCommon.h"
+#include "converse.h"
 
 /* Trace Module Constants (Default Values) */
-#define TRACE_CORE_BUFFER_SIZE 10000
+#define TRACE_CORE_BUFFER_SIZE 10
 
 /* Trace Storage and associated Structure */
 CpvDeclare(int, _traceCoreOn);
@@ -13,8 +13,17 @@ CpvDeclare(char*, _traceCoreRoot);
 CpvDeclare(int, _traceCoreBufferSize);
 CpvDeclare(TraceCore*, _traceCore);
 
+/* Trace Timer */
+#define  TRACE_CORE_TIMER   CmiWallTimer
+inline double TraceCoreTimer() { return TRACE_CORE_TIMER() - CpvAccess(_traceCoreInitTime); }
+
+/*****************************************************************/
+/* Tracing API 
+ * Implementation of functions declared in traceCoreCommon.h 
+ *****************************************************************/
 /* Initialize TraceCore Module */
 //TODO decide parameters from command line
+//TODO - trace-common.C
 extern "C" void initTraceCore(char** argv)
 {
   CpvInitialize(int, _traceCoreOn);
@@ -32,20 +41,35 @@ extern "C" void initTraceCore(char** argv)
        CpvAccess(_traceCoreInitTime) = TRACE_CORE_TIMER();
 
   CpvInitialize(TraceCore*, _traceCore);
-       CpvAccess(_traceCore) = new TraceCore();
+       CpvAccess(_traceCore) = new TraceCore(argv);
 }
 
 /* End Core Trace Module */
-//TODO
+//TODO - trace-common.C
 extern "C" void closeTraceCore() {}
 
 /* Resume Core Trace Module */
-//TODO
+//TODO - trace-common.C
 extern "C" void resumeTraceCore() {}
 
-/* Tracing API */
-extern "C" void RegisterLanguage(int lID)
-{ CpvAccess(_traceCore)->RegisterLanguage(lID); }
+/* Suspend Core Trace Module */
+//TODO - trace-common.C
+extern "C" void suspendTraceCore() {}
+
+/*Install the beginIdle/endIdle condition handlers.*/
+//TODO - trace-common.C
+extern "C" void beginTraceCore(void) {}
+
+/*Cancel the beginIdle/endIdle condition handlers.*/
+//TODO - trace-common.C
+extern "C" void endTraceCore(void) {}
+
+/*****************************************************************/
+/* Tracing API 
+ * Implementation of functions declared in traceCoreAPI.h 
+ *****************************************************************/
+extern "C" void RegisterLanguage(int lID, char* ln)
+{ CpvAccess(_traceCore)->RegisterLanguage(lID, ln); }
 
 extern "C" void RegisterEvent(int lID, int eID)
 { CpvAccess(_traceCore)->RegisterEvent(lID, eID); }
index 7a06f61ebd5e10346f3ae7a9a18485495c9c5197..bdfa12632d9a779913c539ff8e3c80653c34c174 100644 (file)
@@ -2,22 +2,10 @@
 #ifndef __TRACE_CORE_COMMON_H__
 #define __TRACE_CORE_COMMON_H__
 
-#include "converse.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Trace Storage and associated Structure */
-CpvExtern(int, _traceCoreOn);
-CpvExtern(double, _traceCoreInitTime);
-CpvExtern(char*, _traceCoreRoot);
-CpvExtern(int, _traceCoreBufferSize);
-
-/* Trace Timer */
-#define  TRACE_CORE_TIMER   CmiWallTimer
-inline double TraceCoreTimer() { return TRACE_CORE_TIMER() - CpvAccess(_traceCoreInitTime); }
-
 /* Initialize Core Trace Module */
 void initTraceCore(char** argv);
 
@@ -27,13 +15,14 @@ void closeTraceCore();
 /* Resume Core Trace Module */
 void resumeTraceCore();
 
-/* Tracing API */
-void RegisterLanguage(int lID);
-void RegisterEvent(int lID, int eID);
-void LogEvent(int lID, int eID);
-void LogEvent1(int lID, int eID, int iLen, int* iData);
-void LogEvent2(int lID, int eID, int sLen, char* sData);
-void LogEvent3(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
+/* Suspend Core Trace Module */
+void suspendTraceCore();
+
+/*Install the beginIdle/endIdle condition handlers.*/
+void beginTraceCore(void);
+
+/*Cancel the beginIdle/endIdle condition handlers.*/
+void endTraceCore(void);
 
 #ifdef __cplusplus
 }