fixed getObjTime to actually get obj walltime.
[charm.git] / src / ck-ldb / LBObj.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /**
9  * \addtogroup CkLdb
10 */
11 /*@{*/
12
13 #ifndef LBOBJ_H
14 #define LBOBJ_H
15
16 #include "lbdb.h"
17
18 class LBDB;
19
20 class LBObj
21 {
22 friend class LBDB;
23
24 public:
25   LBObj(LBDB *_parentDB, const LDObjHandle &_h, void *usr_ptr = NULL, CmiBool _migratable=CmiTrue, CmiBool _asyncArrival = CmiFalse) {
26     data.handle = _h;
27     data.migratable = _migratable;
28     data.asyncArrival = _asyncArrival;
29     Clear();
30 //    data.cpuTime = 0.;
31 //    data.wallTime = 0.;
32 //    data.minWall = 1e6;
33 //    data.maxWall = 0.;
34     userData = usr_ptr;
35     parentDB = _parentDB;
36 //    migratable = _migratable;
37 //    registered = CmiTrue;
38     startWTime = startCTime = -1.0;
39     lastCpuTime = lastWallTime = .0;
40   }
41
42   ~LBObj() { };
43
44 #if 0
45   LBObj(LBDB *_parentDB, LDOMHandle _omhandle, LDObjid _id,
46         void *_userData = 0, CmiBool _migratable=CmiTrue) {
47     parentDB = _parentDB;
48 //    parentOM = _omhandle;
49 //    myhandle.id = _id;
50 //    userData = _userData;
51     migratable = _migratable;
52     registered = CmiFalse;
53   };
54
55   void DepositHandle(const LDObjHandle &_h) {
56 //    CkAssert(_h.id == myhandle.id);
57 //    myhandle = _h;
58     data.handle = _h;
59 //    data.omHandle = _h.omhandle;
60     data.migratable = migratable;
61     data.cpuTime = 0.;
62     data.wallTime = 0.;
63     registered = CmiTrue;
64   };
65 #endif
66
67   void Clear(void);
68
69   void IncrementTime(double walltime, double cputime);
70   inline void StartTimer(void) {
71         startWTime = CkWallTimer();
72 #if CMK_LBDB_CPUTIMER
73         startCTime = CkCpuTimer();
74 #else
75         startCTime = startWTime;
76 #endif
77   }
78   inline void StopTimer(double* walltime, double* cputime) {
79         if (startWTime >= 0.0) {        // in case startOn in middle of entry
80           const double endWTime = CkWallTimer();
81           *walltime = endWTime - startWTime;
82 #if CMK_LBDB_CPUTIMER
83           const double endCTime = CkCpuTimer();
84 #else
85           const double endCTime = endWTime;
86 #endif
87           *cputime = endCTime - startCTime;
88         }
89         else {
90           *walltime = *cputime = 0.0;
91         }
92   }
93
94   inline void setTiming(double cputime)
95   {
96     data.wallTime = cputime;
97     data.cpuTime = cputime;
98   }
99
100   inline LDOMHandle &parentOM() { return data.handle.omhandle; }
101   inline const LDObjHandle &GetLDObjHandle() const { return data.handle; }
102   inline void SetMigratable(CmiBool mig) { data.migratable = mig; }
103   inline void UseAsyncMigrate(CmiBool async) { data.asyncArrival = async; }
104   inline LDObjData &ObjData() { return data; };
105   inline void lastKnownLoad(double *w, double *c) {*c=lastCpuTime; *w=lastWallTime; }
106   inline void *getUserData() { return  userData; }
107 private:
108
109   LBDB* parentDB;
110   void *userData;
111 //  LDOMHandle parentOM;
112 //  LDObjHandle myhandle;
113   LDObjData data;
114 //  CmiBool registered;
115   double startWTime;
116   double startCTime;
117   double lastCpuTime;
118   double lastWallTime;
119 //  CmiBool migratable;   // temp
120 };
121
122 #endif
123
124 /*@}*/