jeyzu pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=4b116627c24a43248abf5a34a391241b1c0cf983

commit 4b116627c24a43248abf5a34a391241b1c0cf983
Author: Jérémy Zurcher <jer...@asynk.ch>
Date:   Mon Nov 9 15:03:03 2015 +0100

    Eo: Optimise event callback call
    
     check if the event is frozen before walking the event list
---
 src/lib/eo/eo_base_class.c | 53 ++++++++++++++++++++++------------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
index f99ca37..daf7a9d 100644
--- a/src/lib/eo/eo_base_class.c
+++ b/src/lib/eo/eo_base_class.c
@@ -671,48 +671,45 @@ _eo_base_event_callback_call(Eo *obj_id, Eo_Base_Data *pd,
 
    pd->walking_list++;
 
+   if (!desc->unfreezable && (event_freeze_count || pd->event_freeze_count))
+     goto end;
+
    for (cb = pd->callbacks; cb; cb = cb->next)
      {
-        if (!cb->delete_me)
+        if (cb->delete_me)
+          continue;
+
+        if (cb->func_array)
           {
-             if (cb->func_array)
-               {
-                  const Eo_Callback_Array_Item *it;
+             const Eo_Callback_Array_Item *it;
 
-                  for (it = cb->items.item_array; it->func; it++)
-                    {
-                       if (!_cb_desc_match(it->desc, desc))
-                          continue;
-                       if (!it->desc->unfreezable &&
-                           (event_freeze_count || pd->event_freeze_count))
-                          continue;
-
-                       /* Abort callback calling if the func says so. */
-                       if (!it->func((void *) cb->func_data, obj_id, desc,
-                                (void *) event_info))
-                         {
-                            ret = EINA_FALSE;
-                            goto end;
-                         }
-                    }
-               }
-             else
+             for (it = cb->items.item_array; it->func; it++)
                {
-                  if (!_cb_desc_match(cb->items.item.desc, desc))
-                    continue;
-                  if (!cb->items.item.desc->unfreezable &&
-                      (event_freeze_count || pd->event_freeze_count))
+                  if (!_cb_desc_match(it->desc, desc))
                     continue;
 
                   /* Abort callback calling if the func says so. */
-                  if (!cb->items.item.func((void *) cb->func_data, obj_id, 
desc,
-                                           (void *) event_info))
+                  if (!it->func((void *) cb->func_data, obj_id, desc,
+                                (void *) event_info))
                     {
                        ret = EINA_FALSE;
                        goto end;
                     }
                }
           }
+        else
+          {
+             if (!_cb_desc_match(cb->items.item.desc, desc))
+               continue;
+
+             /* Abort callback calling if the func says so. */
+             if (!cb->items.item.func((void *) cb->func_data, obj_id, desc,
+                                      (void *) event_info))
+               {
+                  ret = EINA_FALSE;
+                  goto end;
+               }
+          }
      }
 
 end:

-- 


Reply via email to