On Thu, 29 Aug 2013 10:26:50 -0300 Ulisses Furquim <uliss...@gmail.com> said:
> Raster, > > On Thu, Aug 29, 2013 at 9:18 AM, Carsten Haitzler - Enlightenment Git > <no-re...@enlightenment.org> wrote: > > raster pushed a commit to branch master. > > > > commit 42a46214c4f9b35c0e1f5a84c56ea76ba2235eae > > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> > > Date: Thu Aug 29 21:18:04 2013 +0900 > > > > other async render issue - sync ALL rendering canvases, not just one > > --- > > src/lib/evas/canvas/evas_render.c | 2 ++ > > src/lib/evas/common/evas_thread_render.c | 21 ++++++++++++++++++++- > > src/lib/evas/include/evas_common_private.h | 4 +++- > > 3 files changed, 25 insertions(+), 2 deletions(-) > > > > diff --git a/src/lib/evas/canvas/evas_render.c > > b/src/lib/evas/canvas/evas_render.c index b04d606..4fbe9e2 100644 > > --- a/src/lib/evas/canvas/evas_render.c > > +++ b/src/lib/evas/canvas/evas_render.c > > @@ -2235,6 +2235,7 @@ _canvas_render_dump(Eo *eo_e EINA_UNUSED, void *_pd, > > va_list *list EINA_UNUSED) Evas_Public_Data *e = _pd; > > Evas_Layer *lay; > > > > + evas_thread_queue_block(); > > evas_render_rendering_wait(e); > > evas_cache_async_freeze(); > > This might deadlock. If the queue is no empty and we have there the > commands for e then we'll wait forever in _rendering_wait() in the > main thread and the render thread will sleep forever trying to acquire > the evas_thread_block_lock. Right? fixed. i didnt notice evas->rendering was set in evas_render as opposed to the rendering handle in the async thread. :) > > @@ -2263,6 +2264,7 @@ _canvas_render_dump(Eo *eo_e EINA_UNUSED, void *_pd, > > va_list *list EINA_UNUSED) GC_ALL(evas_object_image_load_opts_cow); > > GC_ALL(evas_object_image_state_cow); > > evas_cache_async_thaw(); > > + evas_thread_queue_unblock(); > > } > > > > void > > diff --git a/src/lib/evas/common/evas_thread_render.c > > b/src/lib/evas/common/evas_thread_render.c index f37f43a..3474469 100644 > > --- a/src/lib/evas/common/evas_thread_render.c > > +++ b/src/lib/evas/common/evas_thread_render.c > > @@ -4,6 +4,7 @@ > > > > static Eina_Thread evas_thread_worker; > > static Eina_Condition evas_thread_queue_condition; > > +static Eina_Lock evas_thread_block_lock; > > static Eina_Lock evas_thread_queue_lock; > > static Eina_Bool evas_thread_queue_ready = EINA_FALSE; > > static Eina_Inarray evas_thread_queue; > > @@ -55,7 +56,19 @@ evas_thread_queue_flush(Evas_Thread_Command_Cb cb, void > > *data) evas_thread_queue_append(cb, data, EINA_TRUE); > > } > > > > -static void* > > +EAPI void > > +evas_thread_queue_block(void) > > +{ > > + eina_lock_take(&evas_thread_block_lock); > > +} > > + > > +EAPI void > > +evas_thread_queue_unblock(void) > > +{ > > + eina_lock_release(&evas_thread_block_lock); > > +} > > + > > +static void * > > evas_thread_worker_func(void *data EINA_UNUSED, Eina_Thread thread > > EINA_UNUSED) { > > while (1) > > @@ -83,6 +96,8 @@ evas_thread_worker_func(void *data EINA_UNUSED, > > Eina_Thread thread EINA_UNUSED) continue; > > } > > > > + eina_lock_take(&evas_thread_block_lock); > > + > > cmd = evas_thread_queue.members; > > evas_thread_queue.members = evas_thread_queue_cache; > > evas_thread_queue_cache = cmd; > > @@ -109,6 +124,7 @@ evas_thread_worker_func(void *data EINA_UNUSED, > > Eina_Thread thread EINA_UNUSED) cmd++; > > len--; > > } > > + eina_lock_release(&evas_thread_block_lock); > > } > > I'm not sure this will sync all rendering canvases. At least not in > the same way the _rendering_wait() works. What do you want? > > -- Ulisses > > > out: > > @@ -128,6 +144,8 @@ evas_thread_init(void) > > > > if (!eina_lock_new(&evas_thread_queue_lock)) > > CRIT("Could not create draw thread lock"); > > + if (!eina_lock_new(&evas_thread_block_lock)) > > + CRIT("Could not create draw thread block lock"); > > if (!eina_condition_new(&evas_thread_queue_condition, > > &evas_thread_queue_lock)) CRIT("Could not create draw thread condition"); > > if (!eina_thread_create(&evas_thread_worker, EINA_THREAD_NORMAL, 0, > > @@ -154,6 +172,7 @@ evas_thread_shutdown(void) > > evas_async_events_process(); > > > > eina_thread_join(evas_thread_worker); > > + eina_lock_free(&evas_thread_block_lock); > > eina_lock_free(&evas_thread_queue_lock); > > eina_condition_free(&evas_thread_queue_condition); > > > > diff --git a/src/lib/evas/include/evas_common_private.h > > b/src/lib/evas/include/evas_common_private.h index 336b7a6..24c9d87 100644 > > --- a/src/lib/evas/include/evas_common_private.h > > +++ b/src/lib/evas/include/evas_common_private.h > > @@ -1253,7 +1253,9 @@ void evas_thread_init(void); > > void evas_thread_shutdown(void); > > EAPI void evas_thread_cmd_enqueue(Evas_Thread_Command_Cb cb, void > > *data); EAPI void evas_thread_queue_flush(Evas_Thread_Command_Cb > > cb, void *data); - > > +EAPI void evas_thread_queue_block(void); > > +EAPI void evas_thread_queue_unblock(void); > > + > > typedef enum _Evas_Render_Mode > > { > > EVAS_RENDER_MODE_UNDEF, > > > > -- > > > > ------------------------------------------------------------------------------ > > 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 > > ------------------------------------------------------------------------------ > 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 > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ 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 _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel