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