Revert "eo: make callback_add faster"

This reverts commit d34a0321cb.
This commit is contained in:
Marcel Hollerbach 2020-08-05 11:53:19 +02:00
parent 5dbc62a98b
commit 9852b2b714
1 changed files with 19 additions and 36 deletions

View File

@ -89,7 +89,6 @@ struct _Efl_Object_Data
Eina_Bool need_cleaning : 1;
Eina_Bool allow_parent_unref : 1; // Allows unref to zero even with a parent
Eina_Bool single_priority : 1;
};
typedef enum
@ -1477,9 +1476,19 @@ _eo_callback_search_sorted_near(const Efl_Object_Data *pd, const Eo_Callback_Des
return middle;
}
static inline void
_eo_callbacks_array_bump(Efl_Object_Data *pd)
static void
_eo_callbacks_sorted_insert(Efl_Object_Data *pd, Eo_Callback_Description *cb)
{
Eo_Callback_Description **itr;
unsigned int length, j;
Efl_Event_Callback_Frame *frame;
// Do a dichotomic searh
j = _eo_callback_search_sorted_near(pd, cb);
// Adjust for both case of length == 0 and when priority is equal.
while ((j < pd->callbacks_count) &&
(pd->callbacks[j]->priority >= cb->priority)) j++;
// Increase the callbacks storage by 16 entries at a time
if (_eo_nostep_alloc || (pd->callbacks_count & 0xF) == 0x0)
{
@ -1493,38 +1502,14 @@ _eo_callbacks_array_bump(Efl_Object_Data *pd)
if (EINA_UNLIKELY(!tmp)) return;
pd->callbacks = tmp;
}
}
static void
_eo_callbacks_sorted_insert(Efl_Object_Data *pd, Eo_Callback_Description *cb)
{
Eo_Callback_Description **itr;
unsigned int length, j;
Efl_Event_Callback_Frame *frame;
if (pd->single_priority && cb->priority == 0)
{
_eo_callbacks_array_bump(pd);
pd->callbacks[pd->callbacks_count] = cb;
}
else
{
pd->single_priority = EINA_FALSE;
// Do a dichotomic searh
j = _eo_callback_search_sorted_near(pd, cb);
// Adjust for both case of length == 0 and when priority is equal.
while ((j < pd->callbacks_count) &&
(pd->callbacks[j]->priority >= cb->priority)) j++;
_eo_callbacks_array_bump(pd);
// FIXME: Potential improvement, merge single callback description of the same priority
// into an array when possible
itr = pd->callbacks + j;
length = pd->callbacks_count - j;
if (length > 0) memmove(itr + 1, itr,
length * sizeof(Eo_Callback_Description *));
*itr = cb;
}
// FIXME: Potential improvement, merge single callback description of the same priority
// into an array when possible
itr = pd->callbacks + j;
length = pd->callbacks_count - j;
if (length > 0) memmove(itr + 1, itr,
length * sizeof(Eo_Callback_Description *));
*itr = cb;
pd->callbacks_count++;
@ -2677,8 +2662,6 @@ _efl_object_constructor(Eo *obj, Efl_Object_Data *pd EINA_UNUSED)
{
DBG("%p - %s.", obj, efl_class_name_get(obj));
pd->single_priority = EINA_TRUE;
_eo_condtor_done(obj);
return obj;