Make limiting of the reflow liquids queue size optional
authorCraig Robbins <kde.psych@gmail.com>
Mon, 22 Dec 2014 23:25:18 +0000 (09:25 +1000)
committerCraig Robbins <kde.psych@gmail.com>
Tue, 23 Dec 2014 05:47:06 +0000 (15:47 +1000)
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
src/defaultsettings.cpp
src/map.cpp

index 23d0a91c36f3c38b0435b6f58d8a324b008c472b..acb8d3a5d15e6ae68b6521b2cf6dd7fd8792bb94 100644 (file)
 # 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
index 5b83c26946cbc4e41dfd60375f79e70fcb14a8d0..b660912f939708bed7a5f32d02696f687e91fb4e 100644 (file)
@@ -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
index 10a6f62837a4e10cee146d6bbbaa84dd696dd918..fde5b585d72459c918a9f27276b6b1ee4ef5cbb6 100644 (file)
@@ -1624,8 +1624,6 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & 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="<<initial_size<<std::endl;*/
 
@@ -1638,11 +1636,11 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & 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<v3s16, MapBlock*> & 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<v3s16, MapBlock*> & 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<v3s16, MapBlock*> & 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;