From 4c1ef1b72bfb949b149e6eb75cb7082e31d22b5d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 31 Jul 2022 23:10:18 +0200 Subject: Ratelimit MeshUpdateQueue::cleanupCache() runs --- src/client/mesh_generator_thread.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/client/mesh_generator_thread.cpp') diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp index 5c3f4180b..9f4d98aac 100644 --- a/src/client/mesh_generator_thread.cpp +++ b/src/client/mesh_generator_thread.cpp @@ -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; -- cgit v1.2.3