lua_State* CLuaModuleManager::GetResourceFromName ( const char* szResourceName ) { CResource* pResource = g_pGame->GetResourceManager()->GetResource ( szResourceName ); if ( pResource ) { CLuaMain* pLuaMain = pResource->GetVirtualMachine (); if ( pLuaMain ) { return pLuaMain->GetVM (); } } return NULL; }
/////////////////////////////////////////////////////////////// // // CPerfStatLuaMemoryImpl::GetLuaMemoryStats // // // /////////////////////////////////////////////////////////////// void CPerfStatLuaMemoryImpl::GetLuaMemoryStats ( CPerfStatResult* pResult, const std::map < SString, int >& strOptionMap, const SString& strFilter ) { // // Set option flags // bool bHelp = MapContains ( strOptionMap, "h" ); bool bAccurate = MapContains ( strOptionMap, "a" ); // // Process help // if ( bHelp ) { pResult->AddColumn ( "Lua memory help" ); pResult->AddRow ()[0] ="Option h - This help"; pResult->AddRow ()[0] ="Option a - More accurate memory usage - Warning: Can slow server a little"; return; } // Fetch mem stats from Lua { for ( std::map < CLuaMain*, int >::iterator iter = m_LuaMainMap.begin () ; iter != m_LuaMainMap.end () ; ++iter ) { CLuaMain* pLuaMain = iter->first; if ( pLuaMain->GetVM() ) { if ( bAccurate ) lua_gc(pLuaMain->GetVM(), LUA_GCCOLLECT, 0); int iMemUsed = lua_getgccount( pLuaMain->GetVM() ); UpdateLuaMemory ( pLuaMain, iMemUsed ); } } } pResult->AddColumn ( "name" ); pResult->AddColumn ( "change" ); pResult->AddColumn ( "current" ); pResult->AddColumn ( "max" ); pResult->AddColumn ( "XMLFiles" ); pResult->AddColumn ( "OpenFiles" ); pResult->AddColumn ( "refs" ); pResult->AddColumn ( "Timers" ); pResult->AddColumn ( "Elements" ); pResult->AddColumn ( "TextDisplays" ); pResult->AddColumn ( "TextItems" ); pResult->AddColumn ( "DB Queries" ); pResult->AddColumn ( "DB Connections" ); // Calc totals if ( strFilter == "" ) { int calcedCurrent = 0; int calcedDelta = 0; int calcedMax = 0; for ( CLuaMainMemoryMap::iterator iter = AllLuaMemory.LuaMainMemoryMap.begin () ; iter != AllLuaMemory.LuaMainMemoryMap.end () ; ++iter ) { CLuaMainMemory& LuaMainMemory = iter->second; calcedCurrent += LuaMainMemory.Current; calcedDelta += LuaMainMemory.Delta; calcedMax += LuaMainMemory.Max; } // Add row SString* row = pResult->AddRow (); int c = 0; row[c++] = "Lua VM totals"; if ( labs(calcedDelta) >= 1 ) { row[c] = SString ( "%d KB", calcedDelta ); calcedDelta = 0; } c++; row[c++] = SString ( "%d KB", calcedCurrent ); row[c++] = SString ( "%d KB", calcedMax ); // Some extra 'all VM' things c += 6; row[c++] = !g_pStats->iDbJobDataCount ? "-" : SString ( "%d", g_pStats->iDbJobDataCount ); row[c++] = g_pStats->iDbConnectionCount - 2 == 0 ? "-" : SString ( "%d", g_pStats->iDbConnectionCount - 2 ); } // For each VM for ( CLuaMainMemoryMap::iterator iter = AllLuaMemory.LuaMainMemoryMap.begin () ; iter != AllLuaMemory.LuaMainMemoryMap.end () ; ++iter ) { CLuaMainMemory& LuaMainMemory = iter->second; const SString& strResName = iter->first->GetScriptName (); // Apply filter if ( strFilter != "" && strResName.find ( strFilter ) == SString::npos ) continue; // Add row SString* row = pResult->AddRow (); int c = 0; row[c++] = strResName; if ( labs ( LuaMainMemory.Delta ) >= 1 ) { row[c] = SString ( "%d KB", LuaMainMemory.Delta ); LuaMainMemory.Delta = 0; } c++; row[c++] = SString ( "%d KB", LuaMainMemory.Current ); row[c++] = SString ( "%d KB", LuaMainMemory.Max ); row[c++] = !LuaMainMemory.OpenXMLFiles ? "-" : SString ( "%d", LuaMainMemory.OpenXMLFiles ); row[c++] = !LuaMainMemory.OpenFiles ? "-" : SString ( "%d", LuaMainMemory.OpenFiles ); row[c++] = !LuaMainMemory.Refs ? "-" : SString ( "%d", LuaMainMemory.Refs ); row[c++] = !LuaMainMemory.TimerCount ? "-" : SString ( "%d", LuaMainMemory.TimerCount ); row[c++] = !LuaMainMemory.ElementCount ? "-" : SString ( "%d", LuaMainMemory.ElementCount ); row[c++] = !LuaMainMemory.TextDisplayCount ? "-" : SString ( "%d", LuaMainMemory.TextDisplayCount ); row[c++] = !LuaMainMemory.TextItemCount ? "-" : SString ( "%d", LuaMainMemory.TextItemCount ); } }
/////////////////////////////////////////////////////////////// // // CClientPerfStatLuaMemoryImpl::GetLuaMemoryStats // // // /////////////////////////////////////////////////////////////// void CClientPerfStatLuaMemoryImpl::GetLuaMemoryStats ( CClientPerfStatResult* pResult, const std::map < SString, int >& strOptionMap, const SString& strFilter ) { // // Set option flags // bool bHelp = MapContains ( strOptionMap, "h" ); bool bAccurate = MapContains ( strOptionMap, "a" ); // // Process help // if ( bHelp ) { pResult->AddColumn ( "Lua memory help" ); pResult->AddRow ()[0] ="Option h - This help"; pResult->AddRow ()[0] ="Option a - More accurate memory usage - Warning: Can slow server a little"; return; } // Fetch mem stats from Lua { for ( std::map < CLuaMain*, int >::iterator iter = m_LuaMainMap.begin () ; iter != m_LuaMainMap.end () ; ++iter ) { CLuaMain* pLuaMain = iter->first; if ( pLuaMain->GetVM() ) { if ( bAccurate ) lua_gc(pLuaMain->GetVM(), LUA_GCCOLLECT, 0); int iMemUsed = lua_getgccount( pLuaMain->GetVM() ); UpdateLuaMemory ( pLuaMain, iMemUsed ); } } } pResult->AddColumn ( "name" ); pResult->AddColumn ( "change" ); pResult->AddColumn ( "current" ); pResult->AddColumn ( "max" ); pResult->AddColumn ( "XMLFiles" ); pResult->AddColumn ( "refs" ); pResult->AddColumn ( "Timers" ); pResult->AddColumn ( "Elements" ); pResult->AddColumn ( "TextItems" ); pResult->AddColumn ( "DxFonts" ); pResult->AddColumn ( "GuiFonts" ); pResult->AddColumn ( "Textures" ); pResult->AddColumn ( "Shaders" ); pResult->AddColumn ( "RenderTargets" ); pResult->AddColumn ( "ScreenSources" ); // Calc totals if ( strFilter == "" ) { int calcedCurrent = 0; int calcedDelta = 0; int calcedMax = 0; for ( CLuaMainMemoryMap::iterator iter = AllLuaMemory.LuaMainMemoryMap.begin () ; iter != AllLuaMemory.LuaMainMemoryMap.end () ; ++iter ) { CLuaMainMemory& LuaMainMemory = iter->second; calcedCurrent += LuaMainMemory.Current; calcedDelta += LuaMainMemory.Delta; calcedMax += LuaMainMemory.Max; } // Add row SString* row = pResult->AddRow (); int c = 0; row[c++] = "Lua VM totals"; if ( labs(calcedDelta) >= 1 ) { row[c] = SString ( "%d KB", calcedDelta ); calcedDelta = 0; } c++; row[c++] = SString ( "%d KB", calcedCurrent ); row[c++] = SString ( "%d KB", calcedMax ); // Some extra 'all VM' things c += 4; int TextItemCount = g_pClientGame->GetManager ()->GetDisplayManager ()->Count (); int DxFontCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetDxFontCount (); int GuiFontCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetGuiFontCount (); int TextureCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetTextureCount (); int ShaderCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetShaderCount (); int RenderTargetCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetRenderTargetCount (); int ScreenSourceCount = g_pClientGame->GetManager ()->GetRenderElementManager ()->GetScreenSourceCount (); TextItemCount = Max ( TextItemCount - 4, 0 ); // Remove count for radar items row[c++] = !TextItemCount ? "-" : SString ( "%d", TextItemCount ); row[c++] = !DxFontCount ? "-" : SString ( "%d", DxFontCount ); row[c++] = !GuiFontCount ? "-" : SString ( "%d", GuiFontCount ); row[c++] = !TextureCount ? "-" : SString ( "%d", TextureCount ); row[c++] = !ShaderCount ? "-" : SString ( "%d", ShaderCount ); row[c++] = !RenderTargetCount ? "-" : SString ( "%d", RenderTargetCount ); row[c++] = !ScreenSourceCount ? "-" : SString ( "%d", ScreenSourceCount ); } // For each VM for ( CLuaMainMemoryMap::iterator iter = AllLuaMemory.LuaMainMemoryMap.begin () ; iter != AllLuaMemory.LuaMainMemoryMap.end () ; ++iter ) { CLuaMainMemory& LuaMainMemory = iter->second; SString resname = iter->first->GetScriptNamePointer (); // Apply filter if ( strFilter != "" && resname.find ( strFilter ) == SString::npos ) continue; // Add row SString* row = pResult->AddRow (); int c = 0; row[c++] = resname; if ( labs ( LuaMainMemory.Delta ) >= 1 ) { row[c] = SString ( "%d KB", LuaMainMemory.Delta ); LuaMainMemory.Delta = 0; } c++; row[c++] = SString ( "%d KB", LuaMainMemory.Current ); row[c++] = SString ( "%d KB", LuaMainMemory.Max ); row[c++] = !LuaMainMemory.OpenXMLFiles ? "-" : SString ( "%d", LuaMainMemory.OpenXMLFiles ); row[c++] = !LuaMainMemory.Refs ? "-" : SString ( "%d", LuaMainMemory.Refs ); row[c++] = !LuaMainMemory.TimerCount ? "-" : SString ( "%d", LuaMainMemory.TimerCount ); row[c++] = !LuaMainMemory.ElementCount ? "-" : SString ( "%d", LuaMainMemory.ElementCount ); } }