86 lines
2.4 KiB
C
86 lines
2.4 KiB
C
|
|
#ifndef _LUA_PROFILER_H_
|
|||
|
|
#define _LUA_PROFILER_H_
|
|||
|
|
|
|||
|
|
/************************************************************************
|
|||
|
|
*
|
|||
|
|
* LUA <EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>lua_hook<EFBFBD>ķ<EFBFBD>ʽʵ<EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD>¼<EFBFBD><EFBFBD>ͳ<EFBFBD>ƽű<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵĹ<EFBFBD><EFBFBD>ܡ<EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ĭ<EFBFBD>ϼ<EFBFBD><EFBFBD>㷽ʽΪ<EFBFBD><EFBFBD><EFBFBD>㺯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>úõ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱȽϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱʵ<EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Ϣ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ಢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HandleDebugHook<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֶԺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ļ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ͳ
|
|||
|
|
* <EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ಢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Save<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֶ<EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
************************************************************************/
|
|||
|
|
|
|||
|
|
class LuaProfiler
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef misc::RefObject<LuaPreProcessor::LineRangeList> SourceLineList;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
LuaProfiler();
|
|||
|
|
virtual ~LuaProfiler();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Param lua_State * L:
|
|||
|
|
* Param CSourceLineList * pLRList: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|||
|
|
* @Return bool:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
|
|||
|
|
*/
|
|||
|
|
bool SetState(lua_State* L, SourceLineList* pLRList = NULL);
|
|||
|
|
/*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD><EFBFBD>浽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
*/
|
|||
|
|
size_t Save(stream::BaseStream& stm);
|
|||
|
|
/*
|
|||
|
|
* Comments: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
|
* @Return int64_t:
|
|||
|
|
*/
|
|||
|
|
int64_t GetMaxTotalTime();
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//<2F><>lua<75>д洢<D0B4><E6B4A2>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ͳ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
static const char PerStaticDebuggerName[];
|
|||
|
|
//<2F><>̬hook<6F><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static void StaticCallTimeHook(lua_State* L, lua_Debug* ar);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
/** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HOOK<4F>ص<EFBFBD> **/
|
|||
|
|
virtual void HandleDebugHook(lua_State* L, lua_Debug* ar);
|
|||
|
|
public:
|
|||
|
|
/** Lua<75><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>¼ **/
|
|||
|
|
class LuaCallRcd
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
char sName[40]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int nLineNo; //<2F>к<EFBFBD>
|
|||
|
|
int64_t dwLastTime; //<2F>ϴε<CFB4><CEB5><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
int64_t dwMaxTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
int64_t dwMinTime; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
int64_t dwCallCount; //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
|
int64_t dwTotalTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼƵ<DCBC><C6B5>ú<EFBFBD>ʱ
|
|||
|
|
void* pSubCallList; //<2F>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSubCallTable
|
|||
|
|
public:
|
|||
|
|
~LuaCallRcd();
|
|||
|
|
};
|
|||
|
|
//<2F>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef StrHashTable<LuaCallRcd> SubCallTable;
|
|||
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ö<EFBFBD>ջ<EFBFBD><D5BB>
|
|||
|
|
typedef container::Vector<LuaCallRcd*> CallStack;
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
lua_State* lua_;
|
|||
|
|
CallStack callStack_; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ö<EFBFBD>ջ
|
|||
|
|
SubCallTable rootCallTable_; //<2F><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>¼<EFBFBD><C2BC>
|
|||
|
|
int64_t igoreRecordTime_;//<2F>ڱ<EFBFBD><DAB1>溯<EFBFBD><E6BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>¼ʱ<C2BC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ֵ<EFBFBD>ļ<EFBFBD>¼
|
|||
|
|
SourceLineList LRList_;//<2F>з<EFBFBD>Χ<EFBFBD><CEA7>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ʱȡ<CAB1>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|