Просмотр исходного кода

Lock the `StringName::mutex` after hashing the string, to spend less time hoarding it unnecessarily.

Lukas Tenbrink 6 месяцев назад
Родитель
Сommit
dbf189e28f
1 измененных файлов с 18 добавлено и 28 удалено
  1. 18 28
      core/string/string_name.cpp

+ 18 - 28
core/string/string_name.cpp

@@ -269,12 +269,10 @@ StringName::StringName(const char *p_name, bool p_static) {
 		return; //empty, ignore
 	}
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = String::hash(p_name);
-
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = String::hash(p_name);
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_data = _table[idx];
 
 	while (_data) {
@@ -328,12 +326,10 @@ StringName::StringName(const StaticCString &p_static_string, bool p_static) {
 
 	ERR_FAIL_COND(!p_static_string.ptr || !p_static_string.ptr[0]);
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = String::hash(p_static_string.ptr);
-
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = String::hash(p_static_string.ptr);
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_data = _table[idx];
 
 	while (_data) {
@@ -388,11 +384,10 @@ StringName::StringName(const String &p_name, bool p_static) {
 		return;
 	}
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = p_name.hash();
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = p_name.hash();
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_data = _table[idx];
 
 	while (_data) {
@@ -446,11 +441,10 @@ StringName StringName::search(const char *p_name) {
 		return StringName();
 	}
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = String::hash(p_name);
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = String::hash(p_name);
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_Data *_data = _table[idx];
 
 	while (_data) {
@@ -482,12 +476,10 @@ StringName StringName::search(const char32_t *p_name) {
 		return StringName();
 	}
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = String::hash(p_name);
-
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = String::hash(p_name);
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_Data *_data = _table[idx];
 
 	while (_data) {
@@ -508,12 +500,10 @@ StringName StringName::search(const char32_t *p_name) {
 StringName StringName::search(const String &p_name) {
 	ERR_FAIL_COND_V(p_name.is_empty(), StringName());
 
-	MutexLock lock(mutex);
-
-	uint32_t hash = p_name.hash();
-
-	uint32_t idx = hash & STRING_TABLE_MASK;
+	const uint32_t hash = p_name.hash();
+	const uint32_t idx = hash & STRING_TABLE_MASK;
 
+	MutexLock lock(mutex);
 	_Data *_data = _table[idx];
 
 	while (_data) {