zmike pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=08b291e540902dccced85591f40ba2624d5cb0d4
commit 08b291e540902dccced85591f40ba2624d5cb0d4 Author: Mike Blumenkrantz <zm...@samsung.com> Date: Fri Feb 14 08:33:13 2020 -0500 Revert "evas: remove unused function evas_cache_engine_image_request." Summary: This reverts commit 90e1ca715402371575104814162bcddd3664a8ba. Depends on D11334 Reviewers: raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11335 --- src/lib/evas/cache/evas_cache.h | 1 + src/lib/evas/cache/evas_cache_engine_image.c | 69 ++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/src/lib/evas/cache/evas_cache.h b/src/lib/evas/cache/evas_cache.h index cccb986afd..7475bc8a79 100644 --- a/src/lib/evas/cache/evas_cache.h +++ b/src/lib/evas/cache/evas_cache.h @@ -150,6 +150,7 @@ EAPI int evas_cache_engine_image_usage_get(Evas_Cache_Engin EAPI int evas_cache_engine_image_get(Evas_Cache_Engine_Image *cache); EAPI void evas_cache_engine_image_set(Evas_Cache_Engine_Image *cache, int limit); +EAPI Engine_Image_Entry* evas_cache_engine_image_request(Evas_Cache_Engine_Image *cache, const char *file, const char *key, Evas_Image_Load_Opts *lo, void *engine_data, int *error); EAPI void evas_cache_engine_parent_not_needed(Engine_Image_Entry *eim); EAPI Engine_Image_Entry* evas_cache_engine_image_engine(Evas_Cache_Engine_Image *cache, void *engine_data); EAPI void evas_cache_engine_image_drop(Engine_Image_Entry *eim); diff --git a/src/lib/evas/cache/evas_cache_engine_image.c b/src/lib/evas/cache/evas_cache_engine_image.c index 65d073aa71..3e98c01e5b 100644 --- a/src/lib/evas/cache/evas_cache_engine_image.c +++ b/src/lib/evas/cache/evas_cache_engine_image.c @@ -288,6 +288,75 @@ evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache) free(cache); } +EAPI Engine_Image_Entry * +evas_cache_engine_image_request(Evas_Cache_Engine_Image *cache, + const char *file, const char *key, + Evas_Image_Load_Opts *lo, void *data, + int *error) +{ + Engine_Image_Entry *eim; + Image_Entry *im; + const char *ekey; + + assert(cache != NULL); + + *error = EVAS_LOAD_ERROR_NONE; + + ekey = NULL; + eim = NULL; + + im = evas_cache_image_request(cache->parent, file, key, lo, error); + if (!im) goto on_error; + + if (cache->func.key) ekey = cache->func.key(im, file, key, lo, data); + else ekey = eina_stringshare_add(im->cache_key); + if (!ekey) + { + *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; + goto on_error; + } + + eim = eina_hash_find(cache->activ, ekey); + if (eim) + { + evas_cache_image_drop(im); + goto on_ok; + } + + eim = eina_hash_find(cache->inactiv, ekey); + if (eim) + { + _evas_cache_engine_image_remove_activ(cache, eim); + _evas_cache_engine_image_make_active(cache, eim, ekey); + evas_cache_image_drop(im); + goto on_ok; + } + + eim = _evas_cache_engine_image_alloc(cache, im, ekey); + if (!eim) + { + *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; + return NULL; + } + + *error = cache->func.constructor(eim, data); + if (*error != EVAS_LOAD_ERROR_NONE) goto on_error; + if (cache->func.debug) cache->func.debug("constructor-engine", eim); + +on_ok: + eim->references++; + return eim; + +on_error: + if (!eim) + { + if (im) evas_cache_image_drop(im); + } + else _evas_cache_engine_image_dealloc(cache, eim); + + return NULL; +} + EAPI void evas_cache_engine_image_drop(Engine_Image_Entry *eim) { --