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):
|
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_enable_shaders = g_settings->getBool("enable_shaders");
|
||||||
m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
|
m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
|
||||||
@ -231,6 +232,15 @@ void MeshUpdateQueue::cleanupCache()
|
|||||||
g_profiler->avg("MeshUpdateQueue MapBlock cache size kB",
|
g_profiler->avg("MeshUpdateQueue MapBlock cache size kB",
|
||||||
mapblock_kB * m_cache.size());
|
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
|
// 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.
|
// anything get older than cache_seconds_max or deleted before 2 seconds.
|
||||||
const int cache_seconds_max = 10;
|
const int cache_seconds_max = 10;
|
||||||
|
@ -83,6 +83,7 @@ private:
|
|||||||
std::vector<QueuedMeshUpdate *> m_queue;
|
std::vector<QueuedMeshUpdate *> m_queue;
|
||||||
std::set<v3s16> m_urgents;
|
std::set<v3s16> m_urgents;
|
||||||
std::map<v3s16, CachedMapBlockData *> m_cache;
|
std::map<v3s16, CachedMapBlockData *> m_cache;
|
||||||
|
u64 m_next_cache_cleanup; // milliseconds
|
||||||
std::mutex m_mutex;
|
std::mutex m_mutex;
|
||||||
|
|
||||||
// TODO: Add callback to update these when g_settings changes
|
// TODO: Add callback to update these when g_settings changes
|
||||||
|
Loading…
Reference in New Issue
Block a user