1 #ifndef BAMBOO_MULTICORE_GC_PROFILE_H
2 #define BAMBOO_MULTICORE_GC_PROFILE_H
7 #define GCINFOLENGTH 100
10 #define GC_PROFILE_NUM_FIELD 15
12 #define GC_PROFILE_NUM_FIELD 14
13 #endif // GC_CACHE_ADAPT
15 typedef struct gc_info {
16 unsigned long long time[GC_PROFILE_NUM_FIELD];
20 GCInfo * gc_infoArray[GCINFOLENGTH];
21 unsigned int gc_infoIndex;
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;
28 unsigned int gc_num_liveobj;
29 unsigned int gc_num_obj;
30 unsigned int gc_num_forwardobj;
31 unsigned int gc_num_profiles;
34 volatile bool gc_profile_flag;
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();
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() \
50 if(STARTUPCORE != BAMBOO_NUM_OF_CORE) { \
51 send_msg_4(STARTUPCORE,GCPROFILES,gc_num_obj,gc_num_liveobj,gc_num_forwardobj); \
58 #define GCPROFILE_RECORD_LOBJ() \
60 if(gc_profile_flag) { \
64 // record lobj space info
65 #define GCPROFILE_RECORD_LOBJSPACE() \
67 if(gc_profile_flag) { \
68 gc_num_lobjspace = sumsize; \
71 // check the live/free space info
72 #define GCPROFILE_RECORD_SPACE() \
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]; \
79 gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace; \
82 // record forward obj info
83 #define GCPROFILE_RECORD_FORWARD_OBJ() \
85 if(gc_profile_flag) { \
86 gc_num_forwardobj++; \
89 // record live obj info
90 #define GCPROFILE_RECORD_LIVE_OBJ() \
92 if(gc_profile_flag) { \
96 #define GCPROFILE_START() \
98 if(gc_profile_flag) { \
102 #define GCPROFILE_ITEM() \
104 if(gc_profile_flag) { \
109 #define GCPROFILE_RECORD_LOBJ() (gc_num_lobj++)
110 #define GCPROFILE_RECORD_LOBJSPACE() (gc_num_lobjspace = sumsize)
111 #define GCPROFILE_RECORD_SPACE() \
113 gc_num_livespace = 0; \
114 for(int tmpi = 0; tmpi < gcnumblock; tmpi++) { \
115 gc_num_livespace += bamboo_smemtbl[tmpi]; \
117 gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace; \
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()
125 #define GCPROFILE_END() gc_profileEnd()
126 #define GCPROFILE_INIT() gc_profileInit()
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()
143 #endif // MULTICORE_GC
144 #endif // BAMBOO_MULTICORE_GC_PROFILE_H