ulisses pushed a commit to branch master.
commit 31b1cc6e3e158e9f47c4395888be9b227e172807
Author: Ulisses Furquim <[email protected]>
Date: Mon Sep 2 19:38:52 2013 -0300
evas/render: introduce evas_render_sync().
evas_render_sync() will loop through all canvases and wait for their
rendering to finish. Since this function will execute from the main
thread that will sync all of them.
---
src/lib/evas/canvas/evas_main.c | 10 ++++++++++
src/lib/evas/canvas/evas_render.c | 15 +++++++++++++++
src/lib/evas/include/evas_common_private.h | 1 +
src/lib/evas/include/evas_private.h | 2 ++
4 files changed, 28 insertions(+)
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 0d13a27..23d8f32 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -16,8 +16,11 @@ EAPI Eina_Bool lockdebug = EINA_FALSE;
EAPI int lockmax = 0;
#endif
+Eina_List *all_evases = NULL;
+
static int _evas_init_count = 0;
int _evas_log_dom_global = -1;
+
EAPI int
evas_init(void)
{
@@ -108,6 +111,9 @@ evas_shutdown(void)
evas_object_image_load_opts_cow = NULL;
evas_object_image_state_cow = NULL;
+ eina_list_free(all_evases);
+ all_evases = NULL;
+
evas_thread_shutdown();
_evas_preload_thread_shutdown();
evas_async_events_shutdown();
@@ -171,6 +177,8 @@ _constructor(Eo *eo_obj, void *class_data, va_list *list
EINA_UNUSED)
EVAS_ARRAY_SET(e, texts_unref_queue);
#undef EVAS_ARRAY_SET
+
+ all_evases = eina_list_append(all_evases, e);
}
EAPI void
@@ -266,6 +274,8 @@ _destructor(Eo *eo_e, void *_pd, va_list *list EINA_UNUSED)
if (e->engine.module) evas_module_unref(e->engine.module);
+ all_evases = eina_list_remove(all_evases, e);
+
eina_array_flush(&e->delete_objects);
eina_array_flush(&e->active_objects);
eina_array_flush(&e->restack_objects);
diff --git a/src/lib/evas/canvas/evas_render.c
b/src/lib/evas/canvas/evas_render.c
index bd0c715..10b81a1 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -1473,6 +1473,21 @@ evas_render_rendering_wait(Evas_Public_Data *evas)
while (evas->rendering) evas_async_events_process_blocking();
}
+/* syncs ALL async rendering canvases */
+void
+evas_render_sync(void)
+{
+ Eina_List *l;
+ void *d;
+
+ EINA_LIST_FOREACH(all_evases, l, d)
+ {
+ Evas_Public_Data *e = d;
+ if (!e->rendering) continue;
+ evas_render_rendering_wait(e);
+ }
+}
+
static Eina_Bool
_drop_scie_ref(const void *container EINA_UNUSED, void *data, void *fdata
EINA_UNUSED)
{
diff --git a/src/lib/evas/include/evas_common_private.h
b/src/lib/evas/include/evas_common_private.h
index 24c9d87..c4728bd 100644
--- a/src/lib/evas/include/evas_common_private.h
+++ b/src/lib/evas/include/evas_common_private.h
@@ -1248,6 +1248,7 @@ void evas_font_dir_cache_free(void);
EAPI int evas_async_events_process_blocking(void);
void evas_render_rendering_wait(Evas_Public_Data *evas);
+void evas_render_sync(void);
void evas_thread_init(void);
void evas_thread_shutdown(void);
diff --git a/src/lib/evas/include/evas_private.h
b/src/lib/evas/include/evas_private.h
index 5a9867b..f8daeaf 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -443,6 +443,8 @@ struct _Evas_Public_Data
Eina_Bool rendering : 1;
};
+extern Eina_List *all_evases;
+
struct _Evas_Layer
{
EINA_INLIST;
--
------------------------------------------------------------------------------
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