From 7b93408884336345dbe8779aaabcf46a51a3d257 Mon Sep 17 00:00:00 2001 From: Craig Robbins Date: Tue, 23 Dec 2014 09:25:18 +1000 Subject: [PATCH] Make limiting of the reflow liquids queue size optional If liquid_queue_purge_time == 0 then disable the queue size limiting and make this the default setting Additionally, liquid_loop_max now defaults to 100000 --- minetest.conf.example | 7 ++++--- src/defaultsettings.cpp | 4 ++-- src/map.cpp | 33 +++++++++++++++------------------ 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 23d0a91c3..acb8d3a5d 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -99,10 +99,11 @@ # Enable a bit lower water surface; disable for speed (not quite optimized) #new_style_water = false # Max liquids processed per step -#liquid_loop_max = 10000 +#liquid_loop_max = 100000 # The time (in seconds) that the liquids queue may grow beyond processing -# capacity until an attempt is made to decrease its size by dumping old queue items -#liquid_queue_purge_time = 30 +# capacity until an attempt is made to decrease its size by dumping old queue +# items. A value of 0 disables the functionality. +#liquid_queue_purge_time = 0 # Update liquids every .. recommend for finite: 0.2 #liquid_update = 1.0 # Enable nice leaves; disable for speed diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 5b83c2694..b660912f9 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -276,8 +276,8 @@ void set_default_settings(Settings *settings) settings->setDefault("movement_gravity", "9.81"); //liquid stuff - settings->setDefault("liquid_loop_max", "10000"); - settings->setDefault("liquid_queue_purge_time", "30"); + settings->setDefault("liquid_loop_max", "100000"); + settings->setDefault("liquid_queue_purge_time", "0"); settings->setDefault("liquid_update", "1.0"); //mapgen stuff diff --git a/src/map.cpp b/src/map.cpp index 10a6f6283..fde5b585d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1624,8 +1624,6 @@ void Map::transformLiquids(std::map & modified_blocks) u32 loopcount = 0; u32 initial_size = m_transforming_liquid.size(); - u32 curr_time = getTime(PRECISION_MILLI); - /*if(initial_size != 0) infostream<<"transformLiquids(): initial_size="< & modified_blocks) u32 liquid_loop_max = g_settings->getS32("liquid_loop_max"); u32 loop_max = liquid_loop_max; -// std::cout << "transformLiquids(): loopmax initial=" -// << loop_max * m_transforming_liquid_loop_count_multiplier; +#if 0 - // If liquid_loop_max is not keeping up with the queue size increase - // loop_max up to a maximum of liquid_loop_max * dedicated_server_step. + /* If liquid_loop_max is not keeping up with the queue size increase + * loop_max up to a maximum of liquid_loop_max * dedicated_server_step. + */ if (m_transforming_liquid.size() > loop_max * 2) { // "Burst" mode float server_step = g_settings->getFloat("dedicated_server_step"); @@ -1653,9 +1651,7 @@ void Map::transformLiquids(std::map & modified_blocks) } loop_max *= m_transforming_liquid_loop_count_multiplier; - -// std::cout << " queue sz=" << m_transforming_liquid.size() -// << " loop_max=" << loop_max; +#endif while(m_transforming_liquid.size() != 0) { @@ -1913,9 +1909,17 @@ void Map::transformLiquids(std::map & modified_blocks) updateLighting(lighting_modified_blocks, modified_blocks); - /* - * Queue size limiting + /* ---------------------------------------------------------------------- + * Manage the queue so that it does not grow indefinately */ + u16 time_until_purge = g_settings->getU16("liquid_queue_purge_time"); + + if (time_until_purge == 0) + return; // Feature disabled + + time_until_purge *= 1000; // seconds -> milliseconds + + u32 curr_time = getTime(PRECISION_MILLI); u32 prev_unprocessed = m_unprocessed_count; m_unprocessed_count = m_transforming_liquid.size(); @@ -1928,13 +1932,6 @@ void Map::transformLiquids(std::map & modified_blocks) m_queue_size_timer_started = true; } - u16 time_until_purge = g_settings->getU16("liquid_queue_purge_time"); - time_until_purge *= 1000; // seconds -> milliseconds - -// std::cout << " growing for: " -// << (m_queue_size_timer_started ? curr_time - m_inc_trend_up_start_time : 0) -// << "ms" << std::endl; - // Account for curr_time overflowing if (m_queue_size_timer_started && m_inc_trending_up_start_time > curr_time) m_queue_size_timer_started = false;