comparison runtime/func.h @ 116:60906f8803ef

Improved profiling
author Mike Pavone <pavone@retrodev.com>
date Wed, 13 Oct 2010 02:51:56 -0400
parents 43cc42df26cc
children 5eedee9063dc
comparison
equal deleted inserted replaced
115:04148770c229 116:60906f8803ef
43 #define PAUSE_SELF \ 43 #define PAUSE_SELF \
44 gettimeofday(&time, NULL);\ 44 gettimeofday(&time, NULL);\
45 my_cdata->self_accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->self_start; 45 my_cdata->self_accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->self_start;
46 46
47 #define AND_TOTAL \ 47 #define AND_TOTAL \
48 *(my_cdata->myactivationlevel)--;\
48 my_cdata->accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->start; 49 my_cdata->accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->start;
49 50
50 #define RESUME_SELF \ 51 #define RESUME_SELF \
51 gettimeofday(&time, NULL);\ 52 gettimeofday(&time, NULL);\
52 my_cdata->self_start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec); 53 my_cdata->self_start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec);
53 54
54 #define AND_RESUME_TOTAL my_cdata->start = my_cdata->self_start; 55 #define AND_RESUME_TOTAL \
56 *(my_cdata->myactivationlevel)++;\
57 my_cdata->start = my_cdata->self_start;
55 58
56 #define EndFunc(name) \ 59 #define EndFunc(name) \
57 free_stack(ct, lv_ ## name);\ 60 free_stack(ct, lv_ ## name);\
58 func = cdata->func;\ 61 func = cdata->func;\
62 profile_activationlevel[FUNC_ ## name]--;\
59 gettimeofday(&time, NULL);\ 63 gettimeofday(&time, NULL);\
60 profile_counts[FUNC_ ## name]++;\ 64 if(profile_activationlevel[FUNC_ ## name])\
61 profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\ 65 {\
66 profile_nestedcounts[FUNC_ ## name]++;\
67 } else {\
68 profile_counts[FUNC_ ## name]++;\
69 profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\
70 }\
62 profile_selftotals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->self_start + cdata->self_accum; 71 profile_selftotals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->self_start + cdata->self_accum;
72
73 #define Func(name,numparams) \
74 f_ ## name:\
75 for(idx = numparams; idx < cdata->num_params; ++idx)\
76 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
77 sf_ ## name:\
78 profile_activationlevel[FUNC_ ## name]++;\
79 cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name];\
80 START_PROFILE\
81 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\
82 my_cdata = cdata;
83
84 #define MethodImpl(name,type_name,mytype_id,numparams) \
85 f_ ## name ## AT_ ## type_name:\
86 sf_ ## name ## AT_ ## type_name:\
87 if (cdata->num_params < 1)\
88 {\
89 cdata = alloc_cdata(ct, cdata, 0);\
90 cdata->func = FUNC_ ## name ## AT_ ## type_name;\
91 goto _exception;\
92 }\
93 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
94 {\
95 puts("uh oh, need conversion and that's not implemented yet!");\
96 exit(1);\
97 }\
98 m_ ## name ## AT_ ## type_name:\
99 profile_activationlevel[FUNC_ ## name ## AT_ ## type_name]++;\
100 cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name ## AT_ ## type_name];\
101 START_PROFILE\
102 for(idx = numparams; idx < cdata->num_params; ++idx)\
103 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
104 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\
105 my_cdata = cdata;
63 106
64 #else 107 #else
65 108
66 #define START_PROFILE 109 #define START_PROFILE
67 #define PAUSE_SELF 110 #define PAUSE_SELF
70 #define AND_RESUME_TOTAL 113 #define AND_RESUME_TOTAL
71 114
72 #define EndFunc(name) \ 115 #define EndFunc(name) \
73 free_stack(ct, lv_ ## name);\ 116 free_stack(ct, lv_ ## name);\
74 func = cdata->func; 117 func = cdata->func;
75 118
76
77 #endif
78
79 #define EndFuncNoLocals \
80 func = cdata->func;
81
82 #define Func(name,numparams) \ 119 #define Func(name,numparams) \
83 f_ ## name:\ 120 f_ ## name:\
84 for(idx = numparams; idx < cdata->num_params; ++idx)\ 121 for(idx = numparams; idx < cdata->num_params; ++idx)\
85 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ 122 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
86 sf_ ## name:\ 123 sf_ ## name:\
87 START_PROFILE\
88 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\ 124 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\
89 my_cdata = cdata; 125 my_cdata = cdata;
90
91
92 #define FuncNoLocals(name,numparams) \
93 f_ ## name:\
94 for(idx = numparams; idx < cdata->num_params; ++idx)\
95 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
96 sf_ ## name:\
97 my_cdata = cdata;
98 126
99 #define MethodImpl(name,type_name,mytype_id,numparams) \ 127 #define MethodImpl(name,type_name,mytype_id,numparams) \
100 f_ ## name ## AT_ ## type_name:\ 128 f_ ## name ## AT_ ## type_name:\
101 sf_ ## name ## AT_ ## type_name:\ 129 sf_ ## name ## AT_ ## type_name:\
102 if (cdata->num_params < 1)\ 130 if (cdata->num_params < 1)\
109 {\ 137 {\
110 puts("uh oh, need conversion and that's not implemented yet!");\ 138 puts("uh oh, need conversion and that's not implemented yet!");\
111 exit(1);\ 139 exit(1);\
112 }\ 140 }\
113 m_ ## name ## AT_ ## type_name:\ 141 m_ ## name ## AT_ ## type_name:\
114 START_PROFILE\
115 for(idx = numparams; idx < cdata->num_params; ++idx)\ 142 for(idx = numparams; idx < cdata->num_params; ++idx)\
116 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ 143 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
117 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\ 144 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\
145 my_cdata = cdata;
146
147 #endif
148
149 #define EndFuncNoLocals \
150 func = cdata->func;
151
152
153 #define FuncNoLocals(name,numparams) \
154 f_ ## name:\
155 for(idx = numparams; idx < cdata->num_params; ++idx)\
156 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
157 sf_ ## name:\
118 my_cdata = cdata; 158 my_cdata = cdata;
119 159
120 160
121 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \ 161 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \
122 f_ ## name ## AT_ ## type_name:\ 162 f_ ## name ## AT_ ## type_name:\