summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2022-02-08 11:13:38 +0100
committerGitHub <noreply@github.com>2022-02-08 11:13:38 +0100
commit13d4cbb87c027dde09fa11ed9d5db98e6600309d (patch)
tree9fde04da2550850b20fcd3172c6a4f88c12dbf35
parenta66e55069e6794ff5bf7d7a39e797e5be2a7df4a (diff)
parent38232c70db31eaca3ae9ac770b763141d6daa68c (diff)
Merge pull request #57788 from reduz/describe-sname-usage
-rw-r--r--core/string/string_name.h12
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