jsuya pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6d465b0b1ffec1cf0f87243143c5a1a5b441b496
commit 6d465b0b1ffec1cf0f87243143c5a1a5b441b496 Author: JunsuChoi <[email protected]> Date: Tue Sep 10 20:06:18 2019 +0900 evas_vg_cache: Hashkey in cache uses evas Summary: Vg_entry is shared by different child windows. When two or more objects load the same file When resizing, cache_vg_entry_render can delete an active entry while creating a new entry and deleting an existing entry. Therefore, use cache data added evas Test Plan: [enable json loader] --- a/meson_options.txt +++ b/meson_options.txt @@ -203,7 +203,7 @@ option('evas-loaders-disabler', type : 'array', description : 'List of modular image/vector load ..... choices : ['gst', 'pdf', 'ps', 'raw', 'svg', 'rs ..... - value : ['webp', 'json'] + value : ['webp'] [Test] elementary_test -> Animation View click -> play -> Animation View click again -> ... Reviewers: Hermet, smohanty, kimcinoo Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9740 --- src/lib/evas/canvas/efl_canvas_vg_object.c | 3 ++- src/lib/evas/canvas/evas_vg_private.h | 3 ++- src/lib/evas/vg/evas_vg_cache.c | 8 +++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c b/src/lib/evas/canvas/efl_canvas_vg_object.c index 1617bc1025..6fc21e1de7 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_object.c +++ b/src/lib/evas/canvas/efl_canvas_vg_object.c @@ -289,7 +289,8 @@ _efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd) Evas_Object_Protected_Data *obj; obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); - pd->vg_entry = evas_cache_vg_entry_create(file, key, + pd->vg_entry = evas_cache_vg_entry_create(evas_object_evas_get(eo_obj), + file, key, obj->cur->geometry.w, obj->cur->geometry.h); evas_object_change(eo_obj, obj); diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h index d8a07b24f1..c3752b003b 100644 --- a/src/lib/evas/canvas/evas_vg_private.h +++ b/src/lib/evas/canvas/evas_vg_private.h @@ -18,6 +18,7 @@ typedef struct _Vg_Cache typedef struct _Vg_Cache_Entry { + Evas *evas; char *hash_key; const Eina_File *file; Eina_Stringshare *key; @@ -124,7 +125,7 @@ struct _Efl_Canvas_Vg_Interpolation void evas_cache_vg_init(void); void evas_cache_vg_shutdown(void); Vg_Cache_Entry* evas_cache_vg_entry_resize(Vg_Cache_Entry *entry, int w, int h); -Vg_Cache_Entry* evas_cache_vg_entry_create(const Eina_File *file, const char *key, int w, int h); +Vg_Cache_Entry* evas_cache_vg_entry_create(Evas *evas, const Eina_File *file, const char *key, int w, int h); Efl_VG* evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num); void evas_cache_vg_entry_del(Vg_Cache_Entry *vg_entry); Vg_File_Data * evas_cache_vg_file_open(const Eina_File *file, const char *key); diff --git a/src/lib/evas/vg/evas_vg_cache.c b/src/lib/evas/vg/evas_vg_cache.c index dd85349ee9..f6a1c1cab2 100644 --- a/src/lib/evas/vg/evas_vg_cache.c +++ b/src/lib/evas/vg/evas_vg_cache.c @@ -365,11 +365,12 @@ evas_cache_vg_file_open(const Eina_File *file, const char *key) Vg_Cache_Entry* evas_cache_vg_entry_resize(Vg_Cache_Entry *vg_entry, int w, int h) { - return evas_cache_vg_entry_create(vg_entry->file, vg_entry->key, w, h); + return evas_cache_vg_entry_create(vg_entry->evas, vg_entry->file, vg_entry->key, w, h); } Vg_Cache_Entry* -evas_cache_vg_entry_create(const Eina_File *file, +evas_cache_vg_entry_create(Evas *evas, + const Eina_File *file, const char *key, int w, int h) { @@ -381,7 +382,7 @@ evas_cache_vg_entry_create(const Eina_File *file, //TODO: zero-sized entry is useless. how to skip it? hash_key = eina_strbuf_new(); - eina_strbuf_append_printf(hash_key, "%p/%s/%d/%d", file, key, w, h); + eina_strbuf_append_printf(hash_key, "%p/%p/%s/%d/%d", evas, file, key, w, h); vg_entry = eina_hash_find(vg_cache->vg_entry_hash, eina_strbuf_string_get(hash_key)); if (!vg_entry) { @@ -396,6 +397,7 @@ evas_cache_vg_entry_create(const Eina_File *file, vg_entry->key = eina_stringshare_add(key); vg_entry->w = w; vg_entry->h = h; + vg_entry->evas = evas; vg_entry->hash_key = eina_strbuf_string_steal(hash_key); eina_hash_direct_add(vg_cache->vg_entry_hash, vg_entry->hash_key, vg_entry); } --
