Le 16 oct. 2015 08:43, "Tom Hacohen" <t...@osg.samsung.com> a écrit : > On 16/10/15 16:22, Tom Hacohen wrote: > > On 16/10/15 15:53, Cedric BAIL wrote: > >> 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 ? > > > > See the code, it was already used only once, so it was not actually > > reused at all. Since this is code in the header, this could have never > > been changed without breaking ABI anyway, which means this change > > actually has 0 performance impact. Well, actually, it is a slight > > positive impact, as you now pass less things on the stack and the "code > > size" is a bit smaller. > > > > I'm working on a follow up patch that improves speed drastically that > > actually caches some values among calls. I already finished and it's > > pretty awesome, but I need to just see if I can improve it a bit further > > before I push. I guess I can puhs now and worst can improve in a > > separate patch. > > There you go, now it's in. This should be the end of this series of ABI > breaks and hopefully the end of ABI breaks in Eo in general. This was > requested by Carsten so all of the ABI breaks that lead to significant > performance improvements will be in now. > > I have a few more improvements in my branch, and I think I reach a total > of around 30% speed improvement with my whole patch series. I plan on > maybe doing a quick write up with some graphs and more info soon.
Seems you addressed all my worry already. That's all great news ! Cool job ! Have fun, Cedric > -- > Tom > > > > > > > -- > > Tom. > > > >> > >>> --- > >>> 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 > >> > > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > > enlightenment-devel mailing list > > enlightenment-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > > > ------------------------------------------------------------------------------ > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel