aboutsummaryrefslogtreecommitdiff
path: root/src/util/basic_macros.h
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2017-07-26 22:54:55 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-07-27 07:56:48 +0200
commit61e487719017511fdc37a944ea7321da46d28ee4 (patch)
treef922dbc5428ab19b7966b0d6105432ab43076067 /src/util/basic_macros.h
parentbc1654feedc90caa8c26328ca6f0fc59fbe5b76c (diff)
downloadminetest-61e487719017511fdc37a944ea7321da46d28ee4.tar.gz
minetest-61e487719017511fdc37a944ea7321da46d28ee4.tar.bz2
minetest-61e487719017511fdc37a944ea7321da46d28ee4.zip
Massive performance improvement on correctBlockNodeIds
correctBlockNodeIds does 2 lookups for each loaded node, one to translate DB ID to name and a second to translate name to real ID. Name to real ID is very consumming if done on every node. As mapblocks are in most cases composed of many identical adjacent nodes, cache previous source and destination id and use them on the next node to prevent any lookup on those maps. This reduce the function load from 15% of my CPU usage to ~0.7%, on the test, calls was reduced from 2.5M lookups to 42k lookups, it's a huge performance gain
Diffstat (limited to 'src/util/basic_macros.h')
0 files changed, 0 insertions, 0 deletions
Fifth Floor, Boston, MA 02110-1301 USA. */ /* Used for tuning constants when developing. Eg. if you have this constant somewhere that you just can't get right by changing it and recompiling all over again: v3f wield_position = v3f(55, -35, 65); Make it look like this: v3f wield_position = v3f(55, -35, 65); QUICKTUNE_AUTONAME(QVT_FLOAT, wield_position.X, 0, 100); QUICKTUNE_AUTONAME(QVT_FLOAT, wield_position.Y, -80, 20); QUICKTUNE_AUTONAME(QVT_FLOAT, wield_position.Z, 0, 100); Then you can modify the values at runtime, using the keys keymap_quicktune_prev keymap_quicktune_next keymap_quicktune_dec keymap_quicktune_inc Once you have modified the values at runtime and then quit, the game will print out all the modified values at the end: Modified quicktune values: wield_position.X = 60 wield_position.Y = -30 wield_position.Z = 65 The QUICKTUNE macros shouldn't generally be left in committed code. */ #ifndef QUICKTUNE_HEADER #define QUICKTUNE_HEADER #include <string> #include <map> #include <vector> enum QuicktuneValueType{ QVT_NONE, QVT_FLOAT }; struct QuicktuneValue { QuicktuneValueType type; union{ struct{ float current; float min; float max; } value_QVT_FLOAT; }; bool modified; QuicktuneValue(): type(QVT_NONE), modified(false) {} std::string getString(); void relativeAdd(float amount); }; std::vector<std::string> getQuicktuneNames(); QuicktuneValue getQuicktuneValue(const std::string &name); void setQuicktuneValue(const std::string &name, const QuicktuneValue &val); void updateQuicktuneValue(const std::string &name, QuicktuneValue &val); #ifndef NDEBUG #define QUICKTUNE(type_, var, min_, max_, name){\ QuicktuneValue qv;\ qv.type = type_;\ qv.value_##type_.current = var;\ qv.value_##type_.min = min_;\ qv.value_##type_.max = max_;\ updateQuicktuneValue(name, qv);\ var = qv.value_##type_.current;\ } #else // NDEBUG #define QUICKTUNE(type, var, min_, max_, name){} #endif #define QUICKTUNE_AUTONAME(type_, var, min_, max_)\ QUICKTUNE(type_, var, min_, max_, #var) #endif