Mercurial > repos > rhope
diff 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 |
line wrap: on
line diff
--- a/runtime/func.h Wed Oct 13 01:18:53 2010 +0000 +++ b/runtime/func.h Wed Oct 13 02:51:56 2010 -0400 @@ -45,57 +45,42 @@ my_cdata->self_accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->self_start; #define AND_TOTAL \ + *(my_cdata->myactivationlevel)--;\ my_cdata->accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->start; #define RESUME_SELF \ gettimeofday(&time, NULL);\ my_cdata->self_start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec); -#define AND_RESUME_TOTAL my_cdata->start = my_cdata->self_start; +#define AND_RESUME_TOTAL \ + *(my_cdata->myactivationlevel)++;\ + my_cdata->start = my_cdata->self_start; #define EndFunc(name) \ free_stack(ct, lv_ ## name);\ func = cdata->func;\ + profile_activationlevel[FUNC_ ## name]--;\ gettimeofday(&time, NULL);\ - profile_counts[FUNC_ ## name]++;\ - profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\ + if(profile_activationlevel[FUNC_ ## name])\ + {\ + profile_nestedcounts[FUNC_ ## name]++;\ + } else {\ + profile_counts[FUNC_ ## name]++;\ + profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\ + }\ profile_selftotals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->self_start + cdata->self_accum; - -#else - -#define START_PROFILE -#define PAUSE_SELF -#define RESUME_SELF -#define AND_TOTAL -#define AND_RESUME_TOTAL - -#define EndFunc(name) \ - free_stack(ct, lv_ ## name);\ - func = cdata->func; - - -#endif - -#define EndFuncNoLocals \ - func = cdata->func; - + #define Func(name,numparams) \ f_ ## name:\ for(idx = numparams; idx < cdata->num_params; ++idx)\ release_ref(cdata->params[idx]); cdata->num_params = numparams;\ sf_ ## name:\ + profile_activationlevel[FUNC_ ## name]++;\ + cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name];\ START_PROFILE\ lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\ my_cdata = cdata; - -#define FuncNoLocals(name,numparams) \ -f_ ## name:\ - for(idx = numparams; idx < cdata->num_params; ++idx)\ - release_ref(cdata->params[idx]); cdata->num_params = numparams;\ -sf_ ## name:\ - my_cdata = cdata; - #define MethodImpl(name,type_name,mytype_id,numparams) \ f_ ## name ## AT_ ## type_name:\ sf_ ## name ## AT_ ## type_name:\ @@ -111,11 +96,66 @@ exit(1);\ }\ m_ ## name ## AT_ ## type_name:\ + profile_activationlevel[FUNC_ ## name ## AT_ ## type_name]++;\ + cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name ## AT_ ## type_name];\ START_PROFILE\ for(idx = numparams; idx < cdata->num_params; ++idx)\ release_ref(cdata->params[idx]); cdata->num_params = numparams;\ lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\ my_cdata = cdata; + +#else + +#define START_PROFILE +#define PAUSE_SELF +#define RESUME_SELF +#define AND_TOTAL +#define AND_RESUME_TOTAL + +#define EndFunc(name) \ + free_stack(ct, lv_ ## name);\ + func = cdata->func; + +#define Func(name,numparams) \ +f_ ## name:\ + for(idx = numparams; idx < cdata->num_params; ++idx)\ + release_ref(cdata->params[idx]); cdata->num_params = numparams;\ +sf_ ## name:\ + lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\ + my_cdata = cdata; + +#define MethodImpl(name,type_name,mytype_id,numparams) \ +f_ ## name ## AT_ ## type_name:\ +sf_ ## name ## AT_ ## type_name:\ + if (cdata->num_params < 1)\ + {\ + cdata = alloc_cdata(ct, cdata, 0);\ + cdata->func = FUNC_ ## name ## AT_ ## type_name;\ + goto _exception;\ + }\ + if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ + {\ + puts("uh oh, need conversion and that's not implemented yet!");\ + exit(1);\ + }\ +m_ ## name ## AT_ ## type_name:\ + for(idx = numparams; idx < cdata->num_params; ++idx)\ + release_ref(cdata->params[idx]); cdata->num_params = numparams;\ + lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\ + my_cdata = cdata; + +#endif + +#define EndFuncNoLocals \ + func = cdata->func; + + +#define FuncNoLocals(name,numparams) \ +f_ ## name:\ + for(idx = numparams; idx < cdata->num_params; ++idx)\ + release_ref(cdata->params[idx]); cdata->num_params = numparams;\ +sf_ ## name:\ + my_cdata = cdata; #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \