lprofP_STATE* lprofP_create_profiler(float _function_call_time) { lprofP_STATE* S; function_call_time = _function_call_time; /* initialize the 'function_meter' */ S = lprofM_init(); if(!S) { return 0; } return S; }
static int coroutine_create(lua_State *L) { lprofP_STATE* S; lua_State *NL = lua_newthread(L); luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, "Lua function expected"); lua_pushvalue(L, 1); /* move function to top */ lua_xmove(L, NL, 1); /* move function from L to NL */ /* Inits profiler and sets profiler hook for this coroutine */ S = lprofM_init(); lua_pushlightuserdata(L, NL); lua_pushlightuserdata(L, S); lua_settable(L, LUA_REGISTRYINDEX); lua_sethook(NL, (lua_Hook)callhook, LUA_MASKCALL | LUA_MASKRET, 0); return 1; }
/* returns true if the file could be opened */ lprofP_STATE* lprofP_init_core_profiler(const char *_out_filename, int isto_printheader, float _function_call_time) { lprofP_STATE* S; char auxs[256]; char *s; char *randstr; const char *out_filename; function_call_time = _function_call_time; out_filename = (_out_filename) ? (_out_filename):(OUT_FILENAME); /* the random string to build the logname is extracted */ /* from 'tmpnam()' (the '/tmp/' part is deleted) */ randstr = tmpnam(NULL); for (s = strtok(randstr, "/\\"); s; s = strtok(NULL, "/\\")) { randstr = s; } if(randstr[strlen(randstr)-1]=='.') randstr[strlen(randstr)-1]='\0'; sprintf(auxs, out_filename, randstr); printf("%s", auxs); outf = fopen(auxs, "w"); if (!outf) { return 0; } if (isto_printheader) { output("stack_level\tfile_defined\tfunction_name\tline_defined\tcurrent_line\tlocal_time\ttotal_time\n"); } /* initialize the 'function_meter' */ S = lprofM_init(); if(!S) { fclose(outf); return 0; } return S; }