/////////////////////////////////////////////////////////////// // // CDebugHookManager::OnLuaMainDestroy // // When a Lua VM is stopped // /////////////////////////////////////////////////////////////// void CDebugHookManager::OnLuaMainDestroy(CLuaMain* pLuaMain) { for (uint hookType = EDebugHook::PRE_EVENT; hookType < EDebugHook::MAX_DEBUG_HOOK_TYPE; hookType++) { std::vector<SDebugHookCallInfo>& hookInfoList = GetHookInfoListForType((EDebugHookType)hookType); for (uint i = 0; i < hookInfoList.size();) { if (hookInfoList[i].pLuaMain == pLuaMain) ListRemoveIndex(hookInfoList, i); else i++; } } }
//////////////////////////////////////////////////////////////// // // CEffectClonerImpl::MaybeTidyUp // // Tidy up if been a little while since last time // //////////////////////////////////////////////////////////////// void CEffectClonerImpl::MaybeTidyUp ( bool bForceDrasticMeasures, CEffectTemplate* pKeepThis ) { if ( !bForceDrasticMeasures && m_TidyupTimer.Get () < 1000 ) return; m_TidyupTimer.Reset (); // Everything in Old List can go if not being used for ( uint i = 0 ; i < m_OldList.size () ; i++ ) { CEffectTemplate* pEffectTemplate = m_OldList[i]; if ( pEffectTemplate != pKeepThis && pEffectTemplate->GetTicksSinceLastUsed () > ( bForceDrasticMeasures ? 0 : 1 ) ) { OutputDebugLine ( "[Shader] CEffectClonerImpl::MaybeTidyUp: Releasing old EffectTemplate" ); SAFE_RELEASE( pEffectTemplate ); ListRemoveIndex ( m_OldList, i-- ); } } // Complex calculation to guess how long to leave an effect unused before deleting // 0=30 mins 100=25 mins 200=16 mins 300=1 sec float fTicksAlpha = UnlerpClamped ( 0, m_ValidMap.size (), 300 ); int iTicks = static_cast < int > ( ( 1 - fTicksAlpha * fTicksAlpha ) * 30 * 60 * 1000 ) + 1000; #ifdef MTA_DEBUG iTicks /= 60; // Mins to seconds for debug #endif // Valid Effect not used for a little while can go for ( std::map < SString, CEffectTemplate* >::iterator iter = m_ValidMap.begin () ; iter != m_ValidMap.end () ; ) { CEffectTemplate* pEffectTemplate = iter->second; if ( pEffectTemplate != pKeepThis && pEffectTemplate->GetTicksSinceLastUsed () > ( bForceDrasticMeasures ? 0 : iTicks ) ) { OutputDebugLine ( "[Shader] CEffectClonerImpl::MaybeTidyUp: Releasing valid EffectTemplate" ); SAFE_RELEASE( pEffectTemplate ); m_ValidMap.erase ( iter++ ); } else ++iter; } if ( bForceDrasticMeasures ) { CGraphics::GetSingleton().GetDevice()->EvictManagedResources(); } }