diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index 3bd8b1167f..f31819e6fe 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -97,7 +97,6 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED) if (ee->engine.func->fn_render) rend |= ee->engine.func->fn_render(ee); } - #ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG if ((ee->in_async_render) && (ee->async_render_start <= 0.0)) { diff --git a/src/lib/evas/cache/evas_cache.h b/src/lib/evas/cache/evas_cache.h index 88abc24b7f..3046f7c20e 100644 --- a/src/lib/evas/cache/evas_cache.h +++ b/src/lib/evas/cache/evas_cache.h @@ -169,6 +169,10 @@ EAPI void evas_cache_image_preload_cancel(Image_Entry *im, c EAPI void evas_cache_image_wakeup(void); +EAPI int evas_cache_async_frozen_get(void); +EAPI void evas_cache_async_freeze(void); +EAPI void evas_cache_async_thaw(void); + #ifdef __cplusplus } #endif diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c index 475afbad88..d8ed6555c6 100644 --- a/src/lib/evas/cache/evas_cache_image.c +++ b/src/lib/evas/cache/evas_cache_image.c @@ -1231,6 +1231,26 @@ evas_cache_image_unload_all(Evas_Cache_Image *cache) eina_hash_foreach(cache->inactiv, _evas_cache_image_unload_cb, NULL); } +static int async_frozen = 0; + +EAPI int +evas_cache_async_frozen_get(void) +{ + return async_frozen; +} + +EAPI void +evas_cache_async_freeze(void) +{ + async_frozen++; +} + +EAPI void +evas_cache_async_thaw(void) +{ + async_frozen--; +} + EAPI Eina_Bool evas_cache_image_is_loaded(Image_Entry *im) { diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 72e08bffa1..b04d606ed0 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2236,6 +2236,7 @@ _canvas_render_dump(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) Evas_Layer *lay; evas_render_rendering_wait(e); + evas_cache_async_freeze(); EINA_INLIST_FOREACH(e->layers, lay) { @@ -2261,6 +2262,7 @@ _canvas_render_dump(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) GC_ALL(evas_object_image_pixels_cow); GC_ALL(evas_object_image_load_opts_cow); GC_ALL(evas_object_image_state_cow); + evas_cache_async_thaw(); } void diff --git a/src/lib/evas/common/evas_image_main.c b/src/lib/evas/common/evas_image_main.c index 862e6cda4c..56b8c373c3 100644 --- a/src/lib/evas/common/evas_image_main.c +++ b/src/lib/evas/common/evas_image_main.c @@ -271,7 +271,8 @@ evas_common_rgba_image_unload(Image_Entry *ie) if (!ie->flags.loaded) return; if ((!ie->info.module) && (!ie->data1)) return; if (!ie->file && !ie->f) return; - if (ie->references > 0) return; + if ((evas_cache_async_frozen_get() == 0) && + (ie->references > 0)) return; ie->flags.loaded = 0;