ecore/efl loop. remove internal ecore_timer legacy api usage for eflloop

efl.loop was still using legacy ecore_timer_* calls inside. of course
this is a big no-no if we are to allow multiple loops, so clean this
up and convert them to efl.loop.timers.
This commit is contained in:
Carsten Haitzler 2017-12-21 16:34:05 +09:00
parent 481853e1ed
commit 04a01c13af
5 changed files with 60 additions and 51 deletions

View File

@ -87,10 +87,6 @@ struct _Ecore_Safe_Call
Eina_Bool suspend : 1;
};
#ifdef HAVE_SYSTEMD
static Eina_Bool _systemd_watchdog_cb(void *data);
#endif
static void _ecore_main_loop_thread_safe_call(Ecore_Safe_Call *order);
static void _thread_safe_cleanup(void *data);
static void _thread_callback(void *data,
@ -116,7 +112,9 @@ static Ecore_Power_State _ecore_power_state = ECORE_POWER_STATE_MAINS;
static Ecore_Memory_State _ecore_memory_state = ECORE_MEMORY_STATE_NORMAL;
#ifdef HAVE_SYSTEMD
static Ecore_Timer *_systemd_watchdog = NULL;
static void _systemd_watchdog_cb(void *data, const Efl_Event *event);
static Efl_Loop_Timer *_systemd_watchdog = NULL;
#endif
static Efl_Vpath *vpath = NULL;
@ -324,12 +322,17 @@ ecore_init(void)
sec = ((double) atoi(getenv("WATCHDOG_USEC"))) / 1000 / 1000;
_systemd_watchdog = ecore_timer_add(sec / 2, _systemd_watchdog_cb, NULL);
_systemd_watchdog =
efl_add(EFL_LOOP_TIMER_CLASS, ecore_main_loop_get(),
efl_loop_timer_interval_set(efl_added, sec / 2),
efl_event_callback_add(efl_added,
EFL_LOOP_TIMER_EVENT_TICK,
_systemd_watchdog_cb, NULL));
unsetenv("WATCHDOG_USEC");
INF("Setup systemd watchdog to : %f", sec);
_systemd_watchdog_cb(NULL);
_systemd_watchdog_cb(NULL, NULL);
}
#endif
@ -399,7 +402,7 @@ ecore_shutdown(void)
#ifdef HAVE_SYSTEMD
if (_systemd_watchdog)
{
ecore_timer_del(_systemd_watchdog);
efl_del(_systemd_watchdog);
_systemd_watchdog = NULL;
}
#endif
@ -959,11 +962,10 @@ _ecore_fps_debug_runtime_add(double t)
}
#ifdef HAVE_SYSTEMD
static Eina_Bool
_systemd_watchdog_cb(EINA_UNUSED void *data)
static void
_systemd_watchdog_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
sd_notify(0, "WATCHDOG=1");
return ECORE_CALLBACK_RENEW;
}
#endif

View File

@ -889,7 +889,7 @@ _impl_ecore_exe_hup(Ecore_Exe *obj EINA_UNUSED, Ecore_Exe_Data *exe)
}
static void
_ecore_exe_make_sure_its_dead(void *data, const Efl_Event *event EINA_UNUSED)
_ecore_exe_make_sure_its_dead(void *data, const Efl_Event *event)
{
Eo *exe_obj = data;
Ecore_Exe_Data *exe = efl_data_scope_get(exe_obj, MY_CLASS);
@ -907,10 +907,11 @@ _ecore_exe_make_sure_its_dead(void *data, const Efl_Event *event EINA_UNUSED)
efl_loop_timer_interval_set(efl_added, 10.0));
kill(exe->pid, SIGKILL);
}
efl_del(event->object);
}
static void
_ecore_exe_make_sure_its_really_dead(void *data, const Efl_Event *event EINA_UNUSED)
_ecore_exe_make_sure_its_really_dead(void *data, const Efl_Event *event)
{
Eo *exe_obj = data;
Ecore_Exe_Data *exe = efl_data_scope_get(exe_obj, MY_CLASS);
@ -923,9 +924,10 @@ _ecore_exe_make_sure_its_really_dead(void *data, const Efl_Event *event EINA_UNU
INF("PID %d is not really dead.", exe->pid);
exe->doomsday_clock = NULL;
}
efl_del(event->object);
}
Ecore_Timer *
Efl_Loop_Timer *
_ecore_exe_doomsday_clock_get(Ecore_Exe *obj)
{
Ecore_Exe_Data *exe = efl_data_scope_get(obj, MY_CLASS);
@ -934,8 +936,7 @@ _ecore_exe_doomsday_clock_get(Ecore_Exe *obj)
}
void
_ecore_exe_doomsday_clock_set(Ecore_Exe *obj,
Ecore_Timer *dc)
_ecore_exe_doomsday_clock_set(Ecore_Exe *obj, Efl_Loop_Timer *dc)
{
Ecore_Exe_Data *exe = efl_data_scope_get(obj, MY_CLASS);
if (!exe) return;

View File

@ -108,9 +108,9 @@ struct _Efl_Loop_Data
double loop_time;
Eina_Hash *providers;
Ecore_Timer *poll_high;
Ecore_Timer *poll_medium;
Ecore_Timer *poll_low;
Efl_Loop_Timer *poll_high;
Efl_Loop_Timer *poll_medium;
Efl_Loop_Timer *poll_low;
Eina_List *exes; // only used in main loop (for now?)
@ -261,9 +261,8 @@ Ecore_Event *_ecore_event_add(int type,
void *data);
void _ecore_event_call(void);
Ecore_Timer *_ecore_exe_doomsday_clock_get(Ecore_Exe *exe);
void _ecore_exe_doomsday_clock_set(Ecore_Exe *exe,
Ecore_Timer *dc);
Efl_Loop_Timer *_ecore_exe_doomsday_clock_get(Ecore_Exe *exe);
void _ecore_exe_doomsday_clock_set(Ecore_Exe *exe, Efl_Loop_Timer *dc);
void *_ecore_event_signal_user_new(void);
void *_ecore_event_signal_hup_new(void);

View File

@ -52,7 +52,7 @@ static void _ecore_signal_callback_sigpwr(int sig,
void *foo);
#endif
static Eina_Bool _ecore_signal_exe_exit_delay(void *data);
static void _ecore_signal_exe_exit_delay(void *data, const Efl_Event *event);
//#define MAXSIGQ 256 // 32k
#define MAXSIGQ 64 // 8k
@ -162,7 +162,7 @@ _ecore_signal_generic_free(void *data EINA_UNUSED, void *event)
}
void
_ecore_signal_call(Eo *obj EINA_UNUSED, Efl_Loop_Data *pd EINA_UNUSED)
_ecore_signal_call(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED)
{
volatile sig_atomic_t n;
sigset_t oldset, newset;
@ -258,12 +258,15 @@ _ecore_signal_call(Eo *obj EINA_UNUSED, Efl_Loop_Data *pd EINA_UNUSED)
* check to see for Last Words, and only delay if there are any.
* This has it's own set of problems.
*/
Ecore_Timer *doomsday_clock;
doomsday_clock = _ecore_exe_doomsday_clock_get(e->exe);
IF_FN_DEL(ecore_timer_del, doomsday_clock);
doomsday_clock = ecore_timer_add
(0.1, _ecore_signal_exe_exit_delay, e);
Efl_Loop_Timer *doomsday_clock =
_ecore_exe_doomsday_clock_get(e->exe);
efl_del(doomsday_clock);
doomsday_clock =
efl_add(EFL_LOOP_TIMER_CLASS, obj,
efl_loop_timer_interval_set(efl_added, 0.1),
efl_event_callback_add
(efl_added, EFL_LOOP_TIMER_EVENT_TICK,
_ecore_signal_exe_exit_delay, e));
_ecore_exe_doomsday_clock_set(e->exe, doomsday_clock);
}
else
@ -601,18 +604,15 @@ _ecore_signal_callback_sigpwr(int sig EINA_UNUSED,
#endif
static Eina_Bool
_ecore_signal_exe_exit_delay(void *data)
static void
_ecore_signal_exe_exit_delay(void *data, const Efl_Event *event)
{
Ecore_Exe_Event_Del *e;
Ecore_Exe_Event_Del *e = data;
e = data;
if (e)
{
_ecore_exe_doomsday_clock_set(e->exe, NULL);
ecore_event_add(ECORE_EXE_EVENT_DEL, e,
_ecore_exe_event_del_free, NULL);
}
return ECORE_CALLBACK_CANCEL;
if (!e) return;
_ecore_exe_doomsday_clock_set(e->exe, NULL);
ecore_event_add(ECORE_EXE_EVENT_DEL, e,
_ecore_exe_event_del_free, NULL);
efl_del(event->object);
}

View File

@ -19,7 +19,7 @@ typedef struct _Efl_Internal_Promise Efl_Internal_Promise;
struct _Efl_Loop_Promise_Simple_Data
{
union {
Ecore_Timer *timer;
Efl_Loop_Timer *timer;
Ecore_Idler *idler;
};
Eina_Promise *promise;
@ -265,7 +265,7 @@ _check_event_catcher_del(void *data, const Efl_Event *event)
--pd->pollers.high;
if (!pd->pollers.high)
{
ecore_timer_del(pd->poll_high);
efl_del(pd->poll_high);
pd->poll_high = NULL;
}
}
@ -274,7 +274,7 @@ _check_event_catcher_del(void *data, const Efl_Event *event)
--pd->pollers.medium;
if (!pd->pollers.medium)
{
ecore_timer_del(pd->poll_medium);
efl_del(pd->poll_medium);
pd->poll_medium = NULL;
}
}
@ -283,7 +283,7 @@ _check_event_catcher_del(void *data, const Efl_Event *event)
--pd->pollers.low;
if (!pd->pollers.low)
{
ecore_timer_del(pd->poll_low);
efl_del(pd->poll_low);
pd->poll_low = NULL;
}
}
@ -504,21 +504,24 @@ static void
_efl_loop_timeout_cancel(void *data, const Eina_Promise *dead_ptr EINA_UNUSED)
{
Efl_Loop_Promise_Simple_Data *d = data;
ecore_timer_del(d->timer);
efl_del(d->timer);
d->timer = NULL;
efl_loop_promise_simple_data_mp_free(d);
}
static Eina_Bool
_efl_loop_timeout_done(void *data)
static void
_efl_loop_timeout_done(void *data, const Efl_Event *event)
{
Efl_Loop_Promise_Simple_Data *d = data;
eina_promise_resolve(d->promise, EINA_VALUE_EMPTY);
d->timer = NULL;
efl_loop_promise_simple_data_mp_free(d);
return EINA_FALSE;
efl_del(event->object);
}
static Eina_Future *
_efl_loop_timeout(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED, double time)
_efl_loop_timeout(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED, double tim)
{
Efl_Loop_Promise_Simple_Data *d;
Eina_Promise *p;
@ -526,7 +529,11 @@ _efl_loop_timeout(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED, double time)
d = efl_loop_promise_simple_data_calloc(1);
EINA_SAFETY_ON_NULL_RETURN_VAL(d, NULL);
d->timer = ecore_timer_add(time, _efl_loop_timeout_done, d);
d->timer = efl_add(EFL_LOOP_TIMER_CLASS, obj,
efl_loop_timer_interval_set(efl_added, tim),
efl_event_callback_add(efl_added,
EFL_LOOP_TIMER_EVENT_TICK,
_efl_loop_timeout_done, d));
EINA_SAFETY_ON_NULL_GOTO(d->timer, timer_error);
p = eina_promise_new(efl_loop_future_scheduler_get(obj),