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

Reply via email to