On 10/07/13 11:00, Cedric BAIL wrote:
> On Wed, Jul 10, 2013 at 6:02 PM, Jérémy Zurcher <jer...@asynk.ch> wrote:
>> On Wednesday 10 July 2013  16:41, Cedric BAIL wrote :
>>> On Tue, Jul 9, 2013 at 11:08 PM, Jérémy Zurcher <jer...@asynk.ch> wrote:
>>>> On Tuesday 09 July 2013  13:40, Tom Hacohen wrote :
>>>>> On 09/07/13 03:55, Carsten Haitzler (The Rasterman) wrote:
>>>>>> On Mon, 08 Jul 2013 18:00:15 +0100 Tom Hacohen <tom.haco...@samsung.com> 
>>>>>> said:
>>>>>>
>>>>>>> Hey guys,
>>>>>>>
>>>>>>> The hero Jeremy Zurcher has been playing around and looking for ways to
>>>>>>> improve Eo and address all the issues that have been raised by everyone.
>>>>>>> We revisited some old ideas, tried some new ideas and changed our
>>>>>>> compromises and preferences to better suit our needs (followed by the
>>>>>>> extensive trial period). We think we made things better and we'd like to
>>>>>>> hear your thoughts and suggestions.
>>>>>>>
>>>>>>> The code resides in devs/tasn/eo2. The differences are not major
>>>>>>> usage-wise (i.e eo_do), but are major internally and 
>>>>>>> class-creation-wise.
>>>>>>> There's an example of the usage of the new API in the eo2test directory.
>>>>>>> The existing code-base hasn't been changed to use the new API, so
>>>>>>> there's not a lot to review.
>>>>>>> Eo2 is not complete, we'd like to hear your thoughts before finishing
>>>>>>> things.
>>>>>>>
>>>>>>> Major changes:
>>>>>>> 1. No more va_args, good ol' normal functions instead.
>>>>>>
>>>>>> good and bad. good as varags is a bit unwieldy. bad as in more symbols 
>>>>>> and
>>>>>> either more function calls inlined in app code OR more code in general 
>>>>>> inlined
>>>>>> (with macros or inline funcs). end result? unknown until we try. also 
>>>>>> another
>>>>>> bad... work to port the existing eo code over. without full details, 
>>>>>> amount of
>>>>>> work unknown. (missing git tree).
>>>>>
>>>>> I think it's better to inline those in the app, yeah. I don't think a
>>>>> function call + an if are much to worry about.
>>>>> Amount of work is known: everything needs to be done. This is a draft,
>>>>> not even a complete solution. This example doesn't handle eo_do_super
>>>>> and the eo_data_scope_get.
>>>>
>>>> I pushed some stuff in devs/tasn/eo2,
>>>> nothing inlined (real method call performed),
>>>> basic eo_data_scope_get support (+ real eo fct call)
>>>
>>> I think that in your design eo2_func_get need to return the klass
>>> somehow or it won't work.
>>
>> that's why i replaced it with eo2_call_resolve
>
> Yeah, saw that later on.
>
>>>> and a stupid benchmark
>>>
>>> Ok, I pushed my own benchmark and fixed Eo.h compilation with C++. The
>> can't compile anymore, gcc and clang yels
>> ./src/lib/eo/Eo.h:619:47: error: expected expression before ‘=’ token
>>        __##Name##_func func = (__##Name##_func) = call.func;  \
>> can you fix please
>
> Oh ! Stupid merge issue. Fixed now.
>
>>> benchmark is half done has the event can't be tested as those function
>>> are eo_do for the moment. Never the less, eo_do2 does create an around
>>> 25% slow down in that benchmark. I have yet to understand why and what
>>> is going on. I tried to play with pure and const __attribute__, but to
>>> no change. Please check what is going on (Also with latest change, I
>>> don't think the compiler can optimize the request to
>>> _eo_data_scope_get anymore).
>
>> I think so, maybe we should go back to eo2_func_get && eo2_data_scope_get,
>> (and return klass somehow) instead of eo2_call_resolve
>
> I am thinking that having a function that return the klass would be
> better and then get the func and data from it. All this function could
> be marked with __attribute__((const)) I guess and lead to further
> automatic elimination of duplicated call.
>
>>> Signal/Benchmark: eo call: OK
>>>    Benchmark: callback loop: 18.260155ns per round: OK
>>> Signal/Benchmark: eo2 call: OK
>>>    Benchmark: callback loop: 23.235780ns per round: OK
>> bad !!
>
> Apparently the main issue come from the call to eo_unref. Using
> _eo_unref directly would give an almost 10% speed increase. Same goes
> for eo2_do_start that has a potential for 7% increase if we can call
> _eo_ref directly. But the biggest benefit would be to reduce the cost
> of calling eo2_call_resolve_internal. Having a const function there
> would definitively help the compiler to call those function a limited
> amount of time.
>
> Funny enough, the time spend in __inc is 2% of the all benchmark with
> eo2 and 2.30% with eo, so it doesn't require a big leap to do.

By direct you mean the same without the id/magic check? If so, that can 
easily be done and is planned. Won't be inlined though, which is an 
annoyance.

--
Tom.



------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to