Le 16 oct. 2015 6:53 AM, "Tom Hacohen" <t...@stosb.com> a écrit :
>
> tasn pushed a commit to branch master.
>
>
http://git.enlightenment.org/core/efl.git/commit/?id=b61556aa87ad134fe04fbdc8f953bd98d941a18e
>
> commit b61556aa87ad134fe04fbdc8f953bd98d941a18e
> Author: Tom Hacohen <t...@stosb.com>
> Date:   Fri Oct 16 13:01:01 2015 +0100
>
>     Eo: Move mainloop checks inside Eo.
>
>     This breaks ABI in a harmless way, and it will give us the ability to
>     drastically improve Eo in the future without breaking ABI again, thus
>     allowing us to declare Eo stable for this release if we choose to.

Checking if a code is running in the main loop is costly. It is as costly
as a tls access in my test. The purpose was to reuse the value. I don't
know if the code evolved to a point we couldn't reuse the value anymore,
but did you check any performance impact ?

> ---
>  src/lib/eo/Eo.h | 5 ++---
>  src/lib/eo/eo.c | 7 +++----
>  2 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
> index 9bfc060..a50a327 100644
> --- a/src/lib/eo/Eo.h
> +++ b/src/lib/eo/Eo.h
> @@ -467,11 +467,10 @@ EAPI extern Eo_Hook_Call eo_hook_call_post;
>  // cache OP id, get real fct and object data then do the call
>  #define EO_FUNC_COMMON_OP(Name, DefRet)                                 \
>       Eo_Op_Call_Data ___call;                                           \
> -     Eina_Bool ___is_main_loop = eina_main_loop_is();                   \
>       static Eo_Op ___op = EO_NOOP;                                      \
>       if (___op == EO_NOOP)                                              \
>         ___op = _eo_api_op_id_get(EO_FUNC_COMMON_OP_FUNC(Name)); \
> -     if (!_eo_call_resolve(#Name, ___op, &___call, ___is_main_loop,
__FILE__, __LINE__)) return DefRet; \
> +     if (!_eo_call_resolve(#Name, ___op, &___call, __FILE__, __LINE__))
return DefRet; \
>       _Eo_##Name##_func _func_ = (_Eo_##Name##_func) ___call.func;       \
>
>  // to define an EAPI function
> @@ -538,7 +537,7 @@ EAPI extern Eo_Hook_Call eo_hook_call_post;
>  EAPI Eo_Op _eo_api_op_id_get(const void *api_func);
>
>  // gets the real function pointer and the object data
> -EAPI Eina_Bool _eo_call_resolve(const char *func_name, const Eo_Op op,
Eo_Op_Call_Data *call, Eina_Bool is_main_loop, const char *file, int line);
> +EAPI Eina_Bool _eo_call_resolve(const char *func_name, const Eo_Op op,
Eo_Op_Call_Data *call, const char *file, int line);
>
>  // start of eo_do barrier, gets the object pointer and ref it, put it on
the stask
>    EAPI Eina_Bool _eo_do_start(const Eo *obj, const Eo_Class *cur_klass,
Eina_Bool is_super, const char *file, const char *func, int line);
> diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
> index 8006318..5f56dfa 100644
> --- a/src/lib/eo/eo.c
> +++ b/src/lib/eo/eo.c
> @@ -491,10 +491,9 @@ _eo_do_internal(const Eo *eo_id, const Eo_Class
*cur_klass_id,
>  EAPI Eina_Bool
>  _eo_do_start(const Eo *eo_id, const Eo_Class *cur_klass_id, Eina_Bool
is_super, const char *file EINA_UNUSED, const char *func EINA_UNUSED, int
line EINA_UNUSED)
>  {
> -   Eina_Bool is_main_loop = eina_main_loop_is();
>     Eina_Bool ret = EINA_TRUE;
>     Eo_Stack_Frame *fptr, *pfptr;
> -   Eo_Call_Stack *stack = _eo_call_stack_get(is_main_loop);
> +   Eo_Call_Stack *stack = _eo_call_stack_get(eina_main_loop_is());
>
>     if (stack->frame_ptr == stack->last_frame)
>       _eo_call_stack_resize(stack, EINA_TRUE);
> @@ -543,14 +542,14 @@ _eo_do_end(void)
>  }
>
>  EAPI Eina_Bool
> -_eo_call_resolve(const char *func_name, const Eo_Op op, Eo_Op_Call_Data
*call, Eina_Bool is_main_loop, const char *file, int line)
> +_eo_call_resolve(const char *func_name, const Eo_Op op, Eo_Op_Call_Data
*call, const char *file, int line)
>  {
>     Eo_Stack_Frame *fptr;
>     const _Eo_Class *klass;
>     const op_type_funcs *func;
>     Eina_Bool is_obj;
>
> -   fptr = _eo_call_stack_get(is_main_loop)->frame_ptr;
> +   fptr = _eo_call_stack_get(eina_main_loop_is())->frame_ptr;
>
>     if (EINA_UNLIKELY(!fptr->o.obj))
>        return EINA_FALSE;
>
> --
>
>
>
------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to