More code clean
[IRC.git] / Robust / src / Runtime / bamboo / multicoregcprofile.h
1 #ifndef BAMBOO_MULTICORE_GC_PROFILE_H
2 #define BAMBOO_MULTICORE_GC_PROFILE_H
3 #ifdef MULTICORE_GC
4 #include "multicore.h"
5
6 #ifdef GC_PROFILE
7 #define GCINFOLENGTH 100
8
9 #ifdef GC_CACHE_ADAPT
10 #define GC_PROFILE_NUM_FIELD 15
11 #else
12 #define GC_PROFILE_NUM_FIELD 14
13 #endif // GC_CACHE_ADAPT
14
15 typedef struct gc_info {
16   unsigned long long time[GC_PROFILE_NUM_FIELD];
17   unsigned int index;
18 } GCInfo;
19
20 GCInfo * gc_infoArray[GCINFOLENGTH];
21 unsigned int gc_infoIndex;
22 bool gc_infoOverflow;
23 unsigned long long gc_num_livespace;
24 unsigned long long gc_num_freespace;
25 unsigned long long gc_num_lobjspace;
26 unsigned int gc_num_lobj;
27
28 unsigned int gc_num_liveobj;
29 unsigned int gc_num_obj;
30 unsigned int gc_num_forwardobj;
31 unsigned int gc_num_profiles;
32
33 #ifdef MGC_SPEC
34 volatile bool gc_profile_flag;
35 #endif
36
37
38 INLINE void initmulticoregcprofiledata(void);
39 INLINE void gc_profileInit(void);
40 INLINE void gc_profileStart(void);
41 INLINE void gc_profileItem(void);
42 INLINE void gc_profileEnd(void);
43 void gc_outputProfileData();
44
45 #define INIT_MULTICORE_GCPROFILE_DATA() initmulticoregcprofiledata()
46 #define GC_OUTPUT_PROFILE_DATA() gc_outputProfileData()
47 // send the num of obj/liveobj/forwardobj to the startupcore
48 #define GCPROFILE_INFO_2_MASTER() \
49   { \
50     if(STARTUPCORE != BAMBOO_NUM_OF_CORE) { \
51       send_msg_4(STARTUPCORE,GCPROFILES,gc_num_obj,gc_num_liveobj,gc_num_forwardobj); \
52     }\
53     gc_num_obj = 0; \
54   }
55
56 #ifdef MGC_SPEC
57 // record lobj info
58 #define GCPROFILE_RECORD_LOBJ() \
59   { \
60     if(gc_profile_flag) { \
61       gc_num_lobj++; \
62     } \
63   }
64 // record lobj space info
65 #define GCPROFILE_RECORD_LOBJSPACE() \
66   { \
67     if(gc_profile_flag) { \
68       gc_num_lobjspace = sumsize; \
69     } \
70   }
71 // check the live/free space info
72 #define GCPROFILE_RECORD_SPACE() \
73   { \
74     if(gc_profile_flag) { \
75       gc_num_livespace = 0; \
76       for(int tmpi = 0; tmpi < gcnumblock; tmpi++) { \
77         gc_num_livespace += bamboo_smemtbl[tmpi]; \
78       } \
79       gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace; \
80     } \
81   }
82 // record forward obj info
83 #define GCPROFILE_RECORD_FORWARD_OBJ() \
84   { \
85     if(gc_profile_flag) { \
86       gc_num_forwardobj++; \
87     } \
88   }
89 // record live obj info
90 #define GCPROFILE_RECORD_LIVE_OBJ() \
91   { \
92     if(gc_profile_flag) { \
93       gc_num_liveobj++; \
94     } \
95   }
96 #define GCPROFILE_START() \
97   { \
98     if(gc_profile_flag) { \
99       gc_profileStart(); \
100     } \
101   }
102 #define GCPROFILE_ITEM() \
103   { \
104     if(gc_profile_flag) { \
105       gc_profileItem(); \
106     } \
107   }
108 #else // MGC_SPEC
109 #define GCPROFILE_RECORD_LOBJ() (gc_num_lobj++)
110 #define GCPROFILE_RECORD_LOBJSPACE() (gc_num_lobjspace = sumsize)
111 #define GCPROFILE_RECORD_SPACE() \
112   { \
113     gc_num_livespace = 0; \
114     for(int tmpi = 0; tmpi < gcnumblock; tmpi++) { \
115       gc_num_livespace += bamboo_smemtbl[tmpi]; \
116     } \
117     gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace; \
118   }
119 #define GCPROFILE_RECORD_FORWARD_OBJ() (gc_num_forwardobj++)
120 #define GCPROFILE_RECORD_LIVE_OBJ() (gc_num_liveobj++)
121 #define GCPROFILE_START() gc_profileStart()
122 #define GCPROFILE_ITEM() gc_profileItem()
123 #endif // MGC_SPEC
124
125 #define GCPROFILE_END() gc_profileEnd()
126 #define GCPROFILE_INIT() gc_profileInit()
127
128 #else // GC_PROFILE
129 #define INIT_MULTICORE_GCPROFILE_DATA()
130 #define GC_OUTPUT_PROFILE_DATA() 
131 #define GCPROFILE_INFO_2_MASTER() 
132 #define GCPROFILE_RECORD_LOBJ()
133 #define GCPROFILE_RECORD_LOBJSPACE()
134 #define GCPROFILE_RECORD_SPACE()
135 #define GCPROFILE_RECORD_FORWARD_OBJ() 
136 #define GCPROFILE_RECORD_LIVE_OBJ() 
137 #define GCPROFILE_START()
138 #define GCPROFILE_ITEM()
139 #define GCPROFILE_END()
140 #define GCPROFILE_INIT()
141 #endif // GC_PROFILE
142
143 #endif // MULTICORE_GC
144 #endif // BAMBOO_MULTICORE_GC_PROFILE_H