forked from enlightenment/efl
ecore: merge call to main loop together to reduce number of main loop wakeup.
SVN revision: 61947
This commit is contained in:
parent
9145913cdc
commit
d0e8b833a9
|
@ -61,6 +61,7 @@ struct _Ecore_Safe_Call
|
|||
};
|
||||
|
||||
static void _thread_callback(void *data, void *buffer, unsigned int nbyte);
|
||||
static Eina_List *_thread_cb = NULL;
|
||||
static Ecore_Pipe *_thread_call = NULL;
|
||||
static Eina_Lock _thread_safety;
|
||||
|
||||
|
@ -224,6 +225,8 @@ EAPI void
|
|||
ecore_main_loop_thread_safe_call(Ecore_Cb callback, void *data)
|
||||
{
|
||||
Ecore_Safe_Call *order;
|
||||
int wakeup = 42;
|
||||
Eina_Bool count;
|
||||
|
||||
if (eina_main_loop_is())
|
||||
{
|
||||
|
@ -238,7 +241,11 @@ ecore_main_loop_thread_safe_call(Ecore_Cb callback, void *data)
|
|||
order->data = data;
|
||||
|
||||
eina_lock_take(&_thread_safety);
|
||||
ecore_pipe_write(_thread_call, &order, sizeof (Ecore_Safe_Call*));
|
||||
|
||||
count = _thread_cb ? 0 : 1;
|
||||
_thread_cb = eina_list_append(_thread_cb, order);
|
||||
if (count) ecore_pipe_write(_thread_call, &wakeup, sizeof (int));
|
||||
|
||||
eina_lock_release(&_thread_safety);
|
||||
}
|
||||
|
||||
|
@ -469,16 +476,21 @@ _ecore_memory_statistic(__UNUSED__ void *data)
|
|||
#endif
|
||||
|
||||
static void
|
||||
_thread_callback(void *data __UNUSED__, void *buffer, unsigned int nbyte)
|
||||
_thread_callback(void *data __UNUSED__,
|
||||
void *buffer __UNUSED__,
|
||||
unsigned int nbyte __UNUSED__)
|
||||
{
|
||||
Ecore_Safe_Call *call = buffer;
|
||||
Ecore_Safe_Call *call;
|
||||
Eina_List *callback;
|
||||
|
||||
while (nbyte >= sizeof (Ecore_Safe_Call*))
|
||||
eina_lock_take(&_thread_safety);
|
||||
callback = _thread_cb;
|
||||
_thread_cb = NULL;
|
||||
eina_lock_release(&_thread_safety);
|
||||
|
||||
EINA_LIST_FREE(callback, call)
|
||||
{
|
||||
call->cb(call->data);
|
||||
free(call);
|
||||
|
||||
call++;
|
||||
nbyte -= sizeof (Ecore_Safe_Call*);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue