Mercurial > repos > rhope
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:\ |