From 7c8793cbea1ea83109b7d9d6974d3f6991efcec8 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Sun, 15 Feb 2015 17:30:38 +0100 Subject: Performance Improvement: Use a cache which caches result for getFacePositions. This greatly reduce the number of std::list generated by caching the result, which is always constant for each radius selected. In the callgrind map, you will see original: * 3.3M calls to std::list for 9700 calls to getFacePositions In the modified version, you will see: * 3.3K calls to std::list for 6900 call to getFacePositions Callgrind map is here: #2321 it's a huge performance improvement to l_find_node_near --- src/script/lua_api/l_env.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/script/lua_api/l_env.cpp') diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index cd5d253ac..2445803d7 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -530,9 +530,8 @@ int ModApiEnvMod::l_find_node_near(lua_State *L) } for(int d=1; d<=radius; d++){ - std::list list; - getFacePositions(list, d); - for(std::list::iterator i = list.begin(); + std::vector list = FacePositionCache::getFacePositions(d); + for(std::vector::iterator i = list.begin(); i != list.end(); ++i){ v3s16 p = pos + (*i); content_t c = env->getMap().getNodeNoEx(p).getContent(); -- cgit v1.2.3