mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
bugfix: profile
This commit is contained in:
@@ -50,20 +50,22 @@ diff_time(double start) {
|
||||
|
||||
static int
|
||||
lstart(lua_State *L) {
|
||||
if (lua_type(L,1) == LUA_TTHREAD) {
|
||||
if (lua_gettop(L) != 0) {
|
||||
lua_settop(L,1);
|
||||
luaL_checktype(L, 1, LUA_TTHREAD);
|
||||
} else {
|
||||
lua_pushthread(L);
|
||||
}
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_rawget(L, lua_upvalueindex(2));
|
||||
if (!lua_isnil(L, -1)) {
|
||||
return luaL_error(L, "Thread %p start profile more than once", lua_topointer(L, 1));
|
||||
}
|
||||
lua_pushthread(L);
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_pushnumber(L, 0);
|
||||
lua_rawset(L, lua_upvalueindex(2));
|
||||
|
||||
lua_pushthread(L);
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
double ti = get_time();
|
||||
#ifdef DEBUG_LOG
|
||||
fprintf(stderr, "PROFILE [%p] start\n", L);
|
||||
@@ -76,25 +78,27 @@ lstart(lua_State *L) {
|
||||
|
||||
static int
|
||||
lstop(lua_State *L) {
|
||||
if (lua_type(L,1) == LUA_TTHREAD) {
|
||||
if (lua_gettop(L) != 0) {
|
||||
lua_settop(L,1);
|
||||
luaL_checktype(L, 1, LUA_TTHREAD);
|
||||
} else {
|
||||
lua_pushthread(L);
|
||||
}
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_rawget(L, lua_upvalueindex(1));
|
||||
if (lua_type(L, -1) != LUA_TNUMBER) {
|
||||
return luaL_error(L, "Call profile.start() before profile.stop()");
|
||||
}
|
||||
double ti = diff_time(lua_tonumber(L, -1));
|
||||
lua_pushthread(L);
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_rawget(L, lua_upvalueindex(2));
|
||||
double total_time = lua_tonumber(L, -1);
|
||||
|
||||
lua_pushthread(L);
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_pushnil(L);
|
||||
lua_rawset(L, lua_upvalueindex(1));
|
||||
|
||||
lua_pushthread(L);
|
||||
lua_pushvalue(L, 1); // push coroutine
|
||||
lua_pushnil(L);
|
||||
lua_rawset(L, lua_upvalueindex(2));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user