diff options
author | Lars Hofhansl <larsh@apache.org> | 2018-01-12 23:47:39 -0800 |
---|---|---|
committer | Lars Hofhansl <larsh@apache.org> | 2018-01-12 23:47:39 -0800 |
commit | fad263dec9e1fa7ae0886f768e22d8ee74e8553b (patch) | |
tree | 1d6ede8d2b9a77ebd90545a0ba38f0785c85b23d /src/serverenvironment.cpp | |
parent | 7e50529867d4ad0e405f0d850a3d2a1a08d0121b (diff) | |
download | hax-minetest-server-fad263dec9e1fa7ae0886f768e22d8ee74e8553b.tar.gz hax-minetest-server-fad263dec9e1fa7ae0886f768e22d8ee74e8553b.zip |
Revert "Add an active object step time budget #6721"
This reverts commit 9c669016d1578a5c62f932c6ccb7a2b4b1e21f0a.
See #6907
Diffstat (limited to 'src/serverenvironment.cpp')
-rw-r--r-- | src/serverenvironment.cpp | 85 |
1 files changed, 35 insertions, 50 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 13e127705..47fcb6e5d 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -279,17 +279,17 @@ void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp) void fillRadiusBlock(v3s16 p0, s16 r, std::set<v3s16> &list) { - const s16 r2 = r * r; v3s16 p; - for (p.X = p0.X - r; p.X <= p0.X + r; p.X++) - for (p.Y = p0.Y - r; p.Y <= p0.Y + r; p.Y++) - for (p.Z = p0.Z - r; p.Z <= p0.Z + r; p.Z++) { - // limit to a sphere - if (p.getDistanceFromSQ(p0) <= r2) { - // Set in list - list.insert(p); - } - } + for(p.X=p0.X-r; p.X<=p0.X+r; p.X++) + for(p.Y=p0.Y-r; p.Y<=p0.Y+r; p.Y++) + for(p.Z=p0.Z-r; p.Z<=p0.Z+r; p.Z++) + { + // limit to a sphere + if (p.getDistanceFrom(p0) <= r) { + // Set in list + list.insert(p); + } + } } void fillViewConeBlock(v3s16 p0, @@ -364,7 +364,10 @@ void ActiveBlockList::update(std::vector<PlayerSAO*> &active_players, /* Update m_list */ - m_list = newlist; + m_list.clear(); + for (v3s16 p : newlist) { + m_list.insert(p); + } } /* @@ -1218,16 +1221,14 @@ void ServerEnvironment::step(float dtime) } } - // placeholder for the "real" time passed - float elapsed_time; - /* Mess around in active blocks */ - if (m_active_blocks_nodemetadata_interval.step(dtime, m_cache_nodetimer_interval, - &elapsed_time)) { + if (m_active_blocks_nodemetadata_interval.step(dtime, m_cache_nodetimer_interval)) { ScopeProfiler sp(g_profiler, "SEnv: mess in act. blocks avg per interval", SPT_AVG); + float dtime = m_cache_nodetimer_interval; + for (const v3s16 &p: m_active_blocks.m_list) { MapBlock *block = m_map->getBlockNoCreateNoEx(p); if (!block) @@ -1245,7 +1246,7 @@ void ServerEnvironment::step(float dtime) MOD_REASON_BLOCK_EXPIRED); // Run node timers - std::vector<NodeTimer> elapsed_timers = block->m_node_timers.step(elapsed_time); + std::vector<NodeTimer> elapsed_timers = block->m_node_timers.step(dtime); if (!elapsed_timers.empty()) { MapNode n; v3s16 p2; @@ -1261,14 +1262,18 @@ void ServerEnvironment::step(float dtime) } } - if (m_active_block_modifier_interval.step(dtime, - m_cache_abm_interval * m_active_block_interval_overload_skip, &elapsed_time)) + if (m_active_block_modifier_interval.step(dtime, m_cache_abm_interval)) do { // breakable + if (m_active_block_interval_overload_skip > 0) { + ScopeProfiler sp(g_profiler, "SEnv: ABM overload skips"); + m_active_block_interval_overload_skip--; + break; + } ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg per interval", SPT_AVG); TimeTaker timer("modify in active blocks per interval"); // Initialize handling of ActiveBlockModifiers - ABMHandler abmhandler(m_abms, elapsed_time, this, true); + ABMHandler abmhandler(m_abms, m_cache_abm_interval, this, true); for (const v3s16 &p : m_active_blocks.m_abm_list) { MapBlock *block = m_map->getBlockNoCreateNoEx(p); @@ -1282,16 +1287,13 @@ void ServerEnvironment::step(float dtime) abmhandler.apply(block); } - const u32 time_ms = timer.stop(true); - // allow up to 10% of the budget interval - const u32 max_time_ms = m_cache_abm_interval * 1000.0f * 0.1f; + u32 time_ms = timer.stop(true); + u32 max_time_ms = 200; if (time_ms > max_time_ms) { - warningstream << "active block modifiers took " - << time_ms << "ms (longer than " - << max_time_ms << "ms)" << std::endl; - m_active_block_interval_overload_skip = ((float)time_ms / max_time_ms); - } else { - m_active_block_interval_overload_skip = 1.0f; + warningstream<<"active block modifiers took " + <<time_ms<<"ms (longer than " + <<max_time_ms<<"ms)"<<std::endl; + m_active_block_interval_overload_skip = (time_ms / max_time_ms) + 1; } }while(0); @@ -1303,17 +1305,15 @@ void ServerEnvironment::step(float dtime) /* Step active objects */ - if (m_active_object_interval.step(dtime, - m_cache_ao_interval * m_active_object_interval_overload_skip, &elapsed_time)) { - + { ScopeProfiler sp(g_profiler, "SEnv: step act. objs avg", SPT_AVG); - TimeTaker timer("Step active objects"); + //TimeTaker timer("Step active objects"); g_profiler->avg("SEnv: num of objects", m_active_objects.size()); // This helps the objects to send data at the same time bool send_recommended = false; - m_send_recommended_timer += elapsed_time; + m_send_recommended_timer += dtime; if(m_send_recommended_timer > getSendRecommendedInterval()) { m_send_recommended_timer -= getSendRecommendedInterval(); @@ -1326,28 +1326,13 @@ void ServerEnvironment::step(float dtime) continue; // Step object - obj->step(elapsed_time, send_recommended); + obj->step(dtime, send_recommended); // Read messages from object while (!obj->m_messages_out.empty()) { m_active_object_messages.push(obj->m_messages_out.front()); obj->m_messages_out.pop(); } } - - // calculate a simple moving average - m_avg_ao_time = m_avg_ao_time * 0.9f + timer.stop(true) * 0.1f; - - // allow up to 20% of the budget interval - const float max_time_ms = m_cache_ao_interval * 1000.0f * 0.2f; - if (m_avg_ao_time > max_time_ms) { - warningstream << "active objects took " - << m_avg_ao_time << "ms (longer than " - << max_time_ms << "ms)" << std::endl; - // skip a few steps - m_active_object_interval_overload_skip = m_avg_ao_time / max_time_ms; - } else { - m_active_object_interval_overload_skip = 1.0f; - } } /* |