diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2015-02-15 17:30:38 +0100 |
---|---|---|
committer | Loic Blot <loic.blot@unix-experience.fr> | 2015-02-16 11:27:44 +0100 |
commit | 7c8793cbea1ea83109b7d9d6974d3f6991efcec8 (patch) | |
tree | 3a1c54acd3ee11fd73e11e81e2b83f917488a379 /src/clientiface.cpp | |
parent | ed04e8e9e407f0dd57fa83a9732b3a3968cb80e0 (diff) | |
download | hax-minetest-server-7c8793cbea1ea83109b7d9d6974d3f6991efcec8.tar.gz hax-minetest-server-7c8793cbea1ea83109b7d9d6974d3f6991efcec8.zip |
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
Diffstat (limited to 'src/clientiface.cpp')
-rw-r--r-- | src/clientiface.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 9b952e36a..6180cf5da 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -59,7 +59,7 @@ void RemoteClient::ResendBlockIfOnWire(v3s16 p) } } -void RemoteClient::GetNextBlocks( +void RemoteClient::GetNextBlocks ( ServerEnvironment *env, EmergeManager * emerge, float dtime, @@ -182,18 +182,15 @@ void RemoteClient::GetNextBlocks( //bool queue_is_full = false; s16 d; - for(d = d_start; d <= d_max; d++) - { + for(d = d_start; d <= d_max; d++) { /* Get the border/face dot coordinates of a "d-radiused" box */ - std::list<v3s16> list; - getFacePositions(list, d); + std::vector<v3s16> list = FacePositionCache::getFacePositions(d); - std::list<v3s16>::iterator li; - for(li=list.begin(); li!=list.end(); ++li) - { + std::vector<v3s16>::iterator li; + for(li = list.begin(); li != list.end(); ++li) { v3s16 p = *li + center; /* |