1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-31 18:41:20 +00:00

Optimize RequiredParam to not increase and decrease refcounts on call.

This commit is contained in:
Lukas Tenbrink
2025-12-03 16:54:43 +01:00
parent 2ecefada8d
commit ebc9aebb69
4 changed files with 35 additions and 36 deletions

View File

@@ -596,26 +596,27 @@ TEST_CASE("[Object] Destruction at the end of the call chain is safe") {
"Object was tail-deleted without crashes.");
}
int required_param_compare(const Ref<RefCounted> &p_ref, const RequiredParam<RefCounted> &p_required) {
EXTRACT_PARAM_OR_FAIL_V(extract, p_required, false);
ERR_FAIL_COND_V(p_ref->get_reference_count() != extract->get_reference_count(), -1);
int required_param_compare(const Ref<RefCounted> &p_ref, const RequiredParam<RefCounted> &rp_required) {
EXTRACT_PARAM_OR_FAIL_V(p_required, rp_required, false);
ERR_FAIL_COND_V(p_ref->get_reference_count() != p_required->get_reference_count(), -1);
return p_ref->get_reference_count();
}
TEST_CASE("[Object] RequiredParam Ref<T>") {
Ref<RefCounted> ref;
ref.instantiate();
const Ref<RefCounted> &ref_ref = ref;
RequiredParam<RefCounted> required = ref;
EXTRACT_PARAM_OR_FAIL(extract, required);
static_assert(std::is_same_v<decltype(ref), decltype(extract)>);
static_assert(std::is_same_v<decltype(ref_ref), decltype(extract)>);
CHECK_EQ(ref->get_reference_count(), extract->get_reference_count());
const int count = required_param_compare(ref, ref);
CHECK_NE(count, -1);
CHECK_NE(count, ref->get_reference_count());
CHECK_EQ(count, ref->get_reference_count());
CHECK_EQ(ref->get_reference_count(), extract->get_reference_count());
}