Eo unref: Decrease amount of checks and hint branch prediction.
authorTom Hacohen <tom@stosb.com>
Thu, 15 Oct 2015 16:51:20 +0000 (17:51 +0100)
committerTom Hacohen <tom@stosb.com>
Mon, 9 Nov 2015 11:43:04 +0000 (11:43 +0000)
This may look minor, but this is such a hot path, that this actually
speeds things up a bit.

src/lib/eo/eo_private.h

index 579ac6d..135966d 100644 (file)
@@ -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