On 02/09/16 15:40, Cedric BAIL wrote:
> On Sep 2, 2016 07:15, "Tom Hacohen" <t...@osg.samsung.com> wrote:
>>
>> Good job trying to tackle it, but this is wrong.
>>
>> This is not thread-safe and the Eo infrastructure should be. So
>> essentially, this optimisation is not allowed. You could maybe do a
>> cache per-thread, raster claims that __thread is actually quite alright
>> nowadays with GCC, I'm not sure, but this, and the following patch
>> should be reverted.
>>
>> If you have anything to say to defend this approach, please do so by
>> Monday, otherwise I'll revert both patches then.
>
> Raster has already added lock around all the use of it. There is maybe one
> missing on isa will check later today.

Ah missed that. Sorry, catching up with things.

Is it still an improvement, even with the lock?

--
Tom.

>
>> --
>> Tom.
>>
>> On 26/08/16 20:14, Cedric BAIL wrote:
>>> cedric pushed a commit to branch master.
>>>
>>>
> http://git.enlightenment.org/core/efl.git/commit/?id=93a706a947cd2d6ef80f8704f4e23737fea1258f
>>>
>>> commit 93a706a947cd2d6ef80f8704f4e23737fea1258f
>>> Author: Cedric BAIL <ced...@osg.samsung.com>
>>> Date:   Fri Aug 26 12:03:08 2016 -0700
>>>
>>>     eo: general speedup of all Eo related operation.
>>>
>>>     This change rely on the fact that we do fetch the same
>>>     object id over and over again. _efl_object_call_resolve got
>>>     15% faster, efl_data_scope_get 20%.
>>> ---
>>>  src/lib/eo/eo_base_class.c      |  3 +++
>>>  src/lib/eo/eo_ptr_indirection.x | 20 +++++++++++++++++++-
>>>  2 files changed, 22 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
>>> index 732d063..35c7a9c 100644
>>> --- a/src/lib/eo/eo_base_class.c
>>> +++ b/src/lib/eo/eo_base_class.c
>>> @@ -11,6 +11,9 @@
>>>
>>>  static int event_freeze_count = 0;
>>>
>>> +_Eo_Object *cached_object = NULL;
>>> +Eo_Id cached_id = 0;
>>> +
>>>  typedef struct _Eo_Callback_Description Eo_Callback_Description;
>>>
>>>  typedef struct
>>> diff --git a/src/lib/eo/eo_ptr_indirection.x
> b/src/lib/eo/eo_ptr_indirection.x
>>> index d89b1ec..cae59a4 100644
>>> --- a/src/lib/eo/eo_ptr_indirection.x
>>> +++ b/src/lib/eo/eo_ptr_indirection.x
>>> @@ -269,6 +269,9 @@ extern Generation_Counter _eo_generation_counter;
>>>  /* Macro used for readability */
>>>  #define TABLE_FROM_IDS _eo_ids_tables[mid_table_id][table_id]
>>>
>>> +extern _Eo_Object *cached_object;
>>> +extern Eo_Id cached_id;
>>> +
>>>  static inline _Eo_Object *
>>>  _eo_obj_pointer_get(const Eo_Id obj_id)
>>>  {
>>> @@ -289,6 +292,10 @@ _eo_obj_pointer_get(const Eo_Id obj_id)
>>>          DBG("obj_id is not a valid object id.");
>>>          return NULL;
>>>       }
>>> +   else if (obj_id == cached_id)
>>> +     {
>>> +        return cached_object;
>>> +     }
>>>
>>>     EO_DECOMPOSE_ID(obj_id, mid_table_id, table_id, entry_id,
> generation);
>>>
>>> @@ -297,7 +304,13 @@ _eo_obj_pointer_get(const Eo_Id obj_id)
>>>       {
>>>          entry = &(TABLE_FROM_IDS->entries[entry_id]);
>>>          if (entry && entry->active && (entry->generation ==
> generation))
>>> -          return entry->ptr;
>>> +          {
>>> +             // Cache the result of that lookup
>>> +             cached_object = entry->ptr;
>>> +             cached_id = obj_id;
>>> +
>>> +             return entry->ptr;
>>> +          }
>>>       }
>>>
>>>     ERR("obj_id %p is not pointing to a valid object. Maybe it has
> already been freed.",
>>> @@ -477,6 +490,11 @@ _eo_id_release(const Eo_Id obj_id)
>>>                    if (_current_table == table)
>>>                      _current_table = NULL;
>>>                 }
>>> +
>>> +             // In case an object is destroyed, wipe out the cache
>>> +             cached_id = 0;
>>> +             cached_object = NULL;
>>> +
>>>               return;
>>>            }
>>>       }
>>>
>>
>>
>>
> ------------------------------------------------------------------------------
>> _______________________________________________
>> 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

Reply via email to