raster pushed a commit to branch master.

commit 175335ae085b2c0a6dffe05a56baeb6d159bb593
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Wed Aug 28 16:43:58 2013 +0900

    evas - restore ability for evas_render_dump() to dump out referenced data
---
 src/lib/ecore_evas/ecore_evas.c       |  1 -
 src/lib/evas/cache/evas_cache.h       |  4 ++++
 src/lib/evas/cache/evas_cache_image.c | 20 ++++++++++++++++++++
 src/lib/evas/canvas/evas_render.c     |  2 ++
 src/lib/evas/common/evas_image_main.c |  3 ++-
 5 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 3bd8b11..f31819e 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 88abc24..3046f7c 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 475afba..d8ed655 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 72e08bf..b04d606 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 862e6cd..56b8c37 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;
 

-- 

------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk

Reply via email to