diff options
author | Tom Hacohen <tom@stosb.com> | 2015-10-15 17:51:20 +0100 |
---|---|---|
committer | Tom Hacohen <tom@stosb.com> | 2015-10-19 10:22:41 +0100 |
commit | 37c07b07d492a37185b0e5dc404a6efa03c4ad16 (patch) | |
tree | fcd6e8b27eb349233ff0489f0ef95db3872841b9 | |
parent | b0576a04fd5a3e21dfc85298ec0c4c9969765a02 (diff) | |
download | efl-37c07b07d492a37185b0e5dc404a6efa03c4ad16.tar.gz |
Eo unref: Decrease amount of checks and hint branch prediction.
This may look minor, but this is such a hot path, that this actually
speeds things up a bit.
-rw-r--r-- | src/lib/eo/eo_private.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h index 579ac6d869..135966daf6 100644 --- a/src/lib/eo/eo_private.h +++ b/src/lib/eo/eo_private.h @@ -277,8 +277,14 @@ static inline void _eo_unref(_Eo_Object *obj) { --(obj->refcount); - if (obj->refcount == 0) + if (EINA_UNLIKELY(obj->refcount <= 0)) { + if (obj->refcount < 0) + { + ERR("Obj:%p. Refcount (%d) < 0. Too many unrefs.", obj, obj->refcount); + return; + } + if (obj->destructed) { ERR("Object %p already destructed.", _eo_id_get(obj)); @@ -320,11 +326,6 @@ _eo_unref(_Eo_Object *obj) else _eo_ref(obj); /* If we manual free, we keep a phantom ref. */ } - else if (obj->refcount < 0) - { - ERR("Obj:%p. Refcount (%d) < 0. Too many unrefs.", obj, obj->refcount); - return; - } } #endif |