diff --git a/src/lib/ecore/ecore_events.c b/src/lib/ecore/ecore_events.c index 2dfdaf05f5..c2fc813c6d 100644 --- a/src/lib/ecore/ecore_events.c +++ b/src/lib/ecore/ecore_events.c @@ -7,18 +7,6 @@ #include "Ecore.h" #include "ecore_private.h" -typedef struct _Ecore_Future_Schedule_Entry -{ - Eina_Future_Schedule_Entry base; - Eina_Future_Scheduler_Cb cb; - Eina_Future *future; - Eina_Value value; -} Ecore_Future_Schedule_Entry; - -////// -static Eina_Mempool *mp_future_schedule_entry = NULL; -////// - static Ecore_Event_Message_Handler *_event_msg_handler = NULL; EAPI Ecore_Event_Handler * @@ -123,104 +111,6 @@ ecore_event_current_event_get(void) return ecore_event_message_handler_current_event_get(_event_msg_handler); } -static void _future_dispatch_cb(void *data, const Efl_Event *ev EINA_UNUSED); -static void _event_del_cb(void *data, const Efl_Event *ev); - -EFL_CALLBACKS_ARRAY_DEFINE(ecore_future_callbacks, - { EFL_LOOP_EVENT_IDLE_ENTER, _future_dispatch_cb }, - { EFL_LOOP_EVENT_IDLE, _future_dispatch_cb }, - { EFL_EVENT_DEL, _event_del_cb }); - -static void -_future_dispatch_cb(void *data, const Efl_Event *ev EINA_UNUSED) -{ - Efl_Loop_Future_Scheduler *loopsched = data; - Eina_List *entries = loopsched->future_entries; - Ecore_Future_Schedule_Entry *entry; - - loopsched->future_entries = NULL; - efl_event_callback_array_del((Eo *) loopsched->loop, ecore_future_callbacks(), loopsched); - - EINA_LIST_FREE(entries, entry) - { - entry->cb(entry->future, entry->value); - eina_mempool_free(mp_future_schedule_entry, entry); - } -} - -static void -_event_del_cb(void *data, const Efl_Event *ev EINA_UNUSED) -{ - Efl_Loop_Future_Scheduler *loopsched = data; - Eina_List *entries = loopsched->future_entries; - Ecore_Future_Schedule_Entry *entry; - - loopsched->future_entries = NULL; - efl_event_callback_array_del((Eo *) loopsched->loop, ecore_future_callbacks(), loopsched); - - EINA_LIST_FREE(entries, entry) - { - eina_future_cancel(entry->future); - eina_value_flush(&entry->value); - eina_mempool_free(mp_future_schedule_entry, entry); - } -} - -static Eina_Future_Schedule_Entry * -ecore_future_schedule(Eina_Future_Scheduler *sched, - Eina_Future_Scheduler_Cb cb, - Eina_Future *future, - Eina_Value value) -{ - Efl_Loop_Future_Scheduler *loopsched = (Efl_Loop_Future_Scheduler *)sched; - Ecore_Future_Schedule_Entry *entry; - - entry = eina_mempool_malloc(mp_future_schedule_entry, sizeof(*entry)); - EINA_SAFETY_ON_NULL_RETURN_VAL(entry, NULL); - entry->base.scheduler = sched; - entry->cb = cb; - entry->future = future; - entry->value = value; - - if (!loopsched->future_entries) - efl_event_callback_array_add((Eo *) loopsched->loop, ecore_future_callbacks(), loopsched); - - loopsched->future_entries = eina_list_append(loopsched->future_entries, entry); - return &entry->base; -} - -static void -ecore_future_recall(Eina_Future_Schedule_Entry *s_entry) -{ - Ecore_Future_Schedule_Entry *entry = (Ecore_Future_Schedule_Entry *)s_entry; - Efl_Loop_Future_Scheduler *loopsched; - Eina_List *lookup; - - loopsched = (Efl_Loop_Future_Scheduler *) entry->base.scheduler; - - lookup = eina_list_data_find_list(loopsched->future_entries, entry); - if (!lookup) return; - - loopsched->future_entries = eina_list_remove_list(loopsched->future_entries, lookup); - if (!loopsched->future_entries) - efl_event_callback_array_del((Eo *) loopsched->loop, ecore_future_callbacks(), loopsched); - - eina_value_flush(&entry->value); - eina_mempool_free(mp_future_schedule_entry, entry); - -} - -static Eina_Future_Scheduler ecore_future_scheduler = { - .schedule = ecore_future_schedule, - .recall = ecore_future_recall, -}; - -Eina_Future_Scheduler * -_ecore_event_future_scheduler_get(void) -{ - return &ecore_future_scheduler; -} - Eina_Bool _ecore_event_init(void) { @@ -262,17 +152,6 @@ _ecore_event_init(void) // ECORE_EVENT_COUNT 11 // no need to do as it was a count, nto an event - //FIXME: Is 512 too high? - if (!mp_future_schedule_entry) - { - mp_future_schedule_entry = eina_mempool_add - (choice, "Ecore_Future_Event", NULL, - sizeof(Ecore_Future_Schedule_Entry), 512); - EINA_SAFETY_ON_NULL_GOTO(mp_future_schedule_entry, err_pool); - } - // - ////// - return EINA_TRUE; err_pool: diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h index 84566b5a96..d772e8c99c 100644 --- a/src/lib/ecore/ecore_private.h +++ b/src/lib/ecore/ecore_private.h @@ -88,7 +88,6 @@ typedef struct _Ecore_Factorized_Idle Ecore_Factorized_Idle; typedef struct _Efl_Loop_Promise_Simple_Data Efl_Loop_Promise_Simple_Data; typedef struct _Efl_Loop_Timer_Data Efl_Loop_Timer_Data; -typedef struct _Efl_Loop_Future_Scheduler Efl_Loop_Future_Scheduler; typedef struct _Efl_Loop_Data Efl_Loop_Data; typedef struct _Efl_Task_Data Efl_Task_Data; @@ -104,20 +103,10 @@ struct _Message Eina_Bool delete_me; }; -struct _Efl_Loop_Future_Scheduler -{ - Eina_Future_Scheduler eina_future_scheduler; - const Eo *loop; - - Eina_List *future_entries; -}; - struct _Efl_Loop_Data { double loop_time; - Efl_Loop_Future_Scheduler future_scheduler; - Efl_Loop_Message_Handler *future_message_handler; Efl_Loop_Timer *poll_high; @@ -314,8 +303,6 @@ void *_ecore_factorized_idle_del(Ecore_Idler *idler); void _ecore_factorized_idle_process(void *data, const Efl_Event *event); void _ecore_factorized_idle_event_del(void *data, const Efl_Event *event); -Eina_Future_Scheduler *_ecore_event_future_scheduler_get(void); - Eina_Bool _ecore_event_init(void); void _ecore_event_shutdown(void); int _ecore_event_exist(void); diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c index 774ec5ea49..726a4b36a0 100644 --- a/src/lib/ecore/efl_loop.c +++ b/src/lib/ecore/efl_loop.c @@ -663,6 +663,10 @@ _efl_loop_efl_task_end(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED) efl_loop_quit(obj, eina_value_int_init(0)); } +EFL_SCHEDULER_ARRAY_DEFINE(loop_scheduler, + EFL_LOOP_EVENT_IDLE_ENTER, + EFL_LOOP_EVENT_IDLE); + EAPI Eina_Future_Scheduler * efl_loop_future_scheduler_get(const Eo *obj) { @@ -675,14 +679,7 @@ efl_loop_future_scheduler_get(const Eo *obj) Efl_Loop_Data *pd = efl_data_scope_get(obj, EFL_LOOP_CLASS); if (!pd) return NULL; - if (!pd->future_scheduler.loop) - { - Eina_Future_Scheduler *sched = - _ecore_event_future_scheduler_get(); - pd->future_scheduler.eina_future_scheduler = *sched; - pd->future_scheduler.loop = obj; - } - return &(pd->future_scheduler.eina_future_scheduler); + return efl_event_future_scheduler_get(obj, loop_scheduler()); } if (efl_isa(obj, EFL_LOOP_CONSUMER_CLASS)) return efl_loop_future_scheduler_get(efl_loop_get(obj));