diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2022-02-08 11:13:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-08 11:13:38 +0100 |
commit | 13d4cbb87c027dde09fa11ed9d5db98e6600309d (patch) | |
tree | 9fde04da2550850b20fcd3172c6a4f88c12dbf35 | |
parent | a66e55069e6794ff5bf7d7a39e797e5be2a7df4a (diff) | |
parent | 38232c70db31eaca3ae9ac770b763141d6daa68c (diff) |
Merge pull request #57788 from reduz/describe-sname-usage
-rw-r--r-- | core/string/string_name.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/string/string_name.h b/core/string/string_name.h index 9653d2b4cf..f767f3e1ec 100644 --- a/core/string/string_name.h +++ b/core/string/string_name.h @@ -181,6 +181,18 @@ bool operator!=(const char *p_name, const StringName &p_string_name); StringName _scs_create(const char *p_chr, bool p_static = false); +/* + * The SNAME macro is used to speed up StringName creation, as it allows caching it after the first usage in a very efficient way. + * It should NOT be used everywhere, but instead in places where high performance is required and the creation of a StringName + * can be costly. Places where it should be used are: + * - Control::get_theme_*(<name> and Window::get_theme_*(<name> functions. + * - emit_signal(<name>,..) function + * - call_deferred(<name>,..) function + * - Comparisons to a StringName in overriden _set and _get methods. + * + * Use in places that can be called hundreds of times per frame (or more) is recommended, but this situation is very rare. If in doubt, do not use. + */ + #define SNAME(m_arg) ([]() -> const StringName & { static StringName sname = _scs_create(m_arg, true); return sname; })() #endif // STRING_NAME_H |