aboutsummaryrefslogtreecommitdiff
path: root/src/client/mesh_generator_thread.cpp
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-07-31 23:10:18 +0200
committersfan5 <sfan5@live.de>2022-08-02 11:58:26 +0200
commit4c1ef1b72bfb949b149e6eb75cb7082e31d22b5d (patch)
treec31f5ad46cee05a9f2d9053c8e61bfe7610d5259 /src/client/mesh_generator_thread.cpp
parent6ec6acc539321709ed8517f1a571777a04f5c24c (diff)
downloadhax-minetest-server-4c1ef1b72bfb949b149e6eb75cb7082e31d22b5d.tar.gz
hax-minetest-server-4c1ef1b72bfb949b149e6eb75cb7082e31d22b5d.zip
Ratelimit MeshUpdateQueue::cleanupCache() runs
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;