forked from Mirrorlandia_minetest/minetest
Ratelimit MeshUpdateQueue::cleanupCache() runs
This commit is contained in:
parent
6ec6acc539
commit
4c1ef1b72b
@ -50,7 +50,8 @@ QueuedMeshUpdate::~QueuedMeshUpdate()
|
||||
*/
|
||||
|
||||
MeshUpdateQueue::MeshUpdateQueue(Client *client):
|
||||
m_client(client)
|
||||
m_client(client),
|
||||
m_next_cache_cleanup(0)
|
||||
{
|
||||
m_cache_enable_shaders = g_settings->getBool("enable_shaders");
|
||||
m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
|
||||
@ -231,6 +232,15 @@ void MeshUpdateQueue::cleanupCache()
|
||||
g_profiler->avg("MeshUpdateQueue MapBlock cache size kB",
|
||||
mapblock_kB * m_cache.size());
|
||||
|
||||
// Iterating the entire cache can get pretty expensive so don't do it too often
|
||||
{
|
||||
constexpr int cleanup_interval = 250;
|
||||
const u64 now = porting::getTimeMs();
|
||||
if (m_next_cache_cleanup > now)
|
||||
return;
|
||||
m_next_cache_cleanup = now + cleanup_interval;
|
||||
}
|
||||
|
||||
// The cache size is kept roughly below cache_soft_max_size, not letting
|
||||
// anything get older than cache_seconds_max or deleted before 2 seconds.
|
||||
const int cache_seconds_max = 10;
|
||||
|
@ -83,6 +83,7 @@ private:
|
||||
std::vector<QueuedMeshUpdate *> m_queue;
|
||||
std::set<v3s16> m_urgents;
|
||||
std::map<v3s16, CachedMapBlockData *> m_cache;
|
||||
u64 m_next_cache_cleanup; // milliseconds
|
||||
std::mutex m_mutex;
|
||||
|
||||
// TODO: Add callback to update these when g_settings changes
|
||||
|
Loading…
Reference in New Issue
Block a user