aboutsummaryrefslogtreecommitdiff
path: root/src/client/mesh_generator_thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/mesh_generator_thread.cpp')
-rw-r--r--src/client/mesh_generator_thread.cpp12
1 files changed, 11 insertions, 1 deletions
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;