Browse Source

Cache feature list in OS.has_feature()

kobewi 2 years ago
parent
commit
30d0dd43c5
2 changed files with 10 additions and 1 deletions
  1. 8 1
      core/core_bind.cpp
  2. 2 0
      core/core_bind.h

+ 8 - 1
core/core_bind.cpp

@@ -423,7 +423,14 @@ Error OS::set_thread_name(const String &p_name) {
 };
 };
 
 
 bool OS::has_feature(const String &p_feature) const {
 bool OS::has_feature(const String &p_feature) const {
-	return ::OS::get_singleton()->has_feature(p_feature);
+	const bool *value_ptr = feature_cache.getptr(p_feature);
+	if (value_ptr) {
+		return *value_ptr;
+	} else {
+		const bool has = ::OS::get_singleton()->has_feature(p_feature);
+		feature_cache[p_feature] = has;
+		return has;
+	}
 }
 }
 
 
 uint64_t OS::get_static_memory_usage() const {
 uint64_t OS::get_static_memory_usage() const {

+ 2 - 0
core/core_bind.h

@@ -119,6 +119,8 @@ public:
 class OS : public Object {
 class OS : public Object {
 	GDCLASS(OS, Object);
 	GDCLASS(OS, Object);
 
 
+	mutable HashMap<String, bool> feature_cache;
+
 protected:
 protected:
 	static void _bind_methods();
 	static void _bind_methods();
 	static OS *singleton;
 	static OS *singleton;