bu5hm4n pushed a commit to branch master.

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

commit aacb6bc0c88095339bc707751e207fb3148d035f
Author: Cedric Bail <cedric.b...@free.fr>
Date:   Wed Oct 16 16:47:47 2019 -0700

    ecore: remove custom code for generating Eina_Future_Schedule attached on 
Efl.Loop.
    
    This leverage the new infrastructure from Eo that provide a scheduler for 
any event
    attached to any object.
    
    Reviewed-by: Marcel Hollerbach <m...@marcel-hollerbach.de>
    Differential Revision: https://phab.enlightenment.org/D10481
---
 src/lib/ecore/ecore_events.c  | 121 ------------------------------------------
 src/lib/ecore/ecore_private.h |  13 -----
 src/lib/ecore/efl_loop.c      |  13 ++---
 3 files changed, 5 insertions(+), 142 deletions(-)

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));

-- 


Reply via email to