On Thu, 15 Dec 2016 10:21:51 -0600 Derek Foreman <der...@osg.samsung.com> said:

> On 14/12/16 06:58 PM, Carsten Haitzler (The Rasterman) wrote:
> > On Tue, 13 Dec 2016 11:54:32 -0800 Derek Foreman <der...@osg.samsung.com>
> > said:
> >
> > just a note. i know the original code was wrong and used unix time... unix
> > time is gettimeofday and thus can go forward and back (eg ntp changes) and
> > also thus its a huge number rather than ecore_time_get(). still it'll wrap
> > at about 49.7 days...
> 
> Ahh, I just assumed the original code used an apropriate efl time 
> function. :/
> 
> I've updated to use ecore_time_get() - I still get a base time at the 
> first use of a wayland pixmap because I notice ecore_time_get()'s start 
> time is undefined.
> 
> Thanks!
> 
> > why not just keep a global serial # and ++ it each time? at least it'll wrap
> > only after 4 billion or so pixmap frees (that's going to be an exceedingly
> > long time i would guess vs using ms)? isn't this just meant to be some
> > unique serial number not a timestamp? technically this also means multiple
> > pixmap frees in a row there will get the same serial...
> 
> The wayland spec for surface.frame states:
> "The callback_data passed in the callback is the current time, in 
> milliseconds, with an undefined base."
> 
> I'm actually pinging a few people about this since I'm pretty sure 
> that's not what anyone meant, but it appears to be what we've implemented.
> 
> Surely this should be the time that a frame submitted immediately will 
> actually hit scanout (this can be checked with an asynchronous vblank 
> wait ioctl).
> 
> Will try to sort this out today, need to confer with some other wayland 
> devs and maybe have the spec text clarified.

hmm ok. because "current time" since some undefined point i dont see as
particularly useful... the time it hits scanout makes sense. but now what it
currently is or even after stopping being unix time and being monotonic...

> Thanks,
> Derek
> 
> >> derekf pushed a commit to branch master.
> >>
> >> http://git.enlightenment.org/core/enlightenment.git/commit/?id=0493abf457331fc604e2aa64eb51448fada09913
> >>
> >> commit 0493abf457331fc604e2aa64eb51448fada09913
> >> Author: Derek Foreman <der...@osg.samsung.com>
> >> Date:   Tue Dec 13 13:53:18 2016 -0600
> >>
> >>     Fix wayland frame callback times
> >>
> >>     ecore_time_unix_get() * 1000 is too big to fit in a uint32, so take the
> >>     time we instantiate the wayland pixmap hash and use that as a base.
> >> ---
> >>  src/bin/e_pixmap.c | 10 ++++++++--
> >>  1 file changed, 8 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c
> >> index f46a994..8e072a0 100644
> >> --- a/src/bin/e_pixmap.c
> >> +++ b/src/bin/e_pixmap.c
> >> @@ -64,6 +64,8 @@ struct _E_Pixmap
> >>
> >>  #ifdef HAVE_WAYLAND
> >>
> >> +double wayland_time_base;
> >> +
> >>  static void
> >>  _e_pixmap_cb_deferred_buffer_destroy(struct wl_listener *listener, void
> >> *data EINA_UNUSED) {
> >> @@ -342,7 +344,10 @@ e_pixmap_new(E_Pixmap_Type type, ...)
> >>                 }
> >>            }
> >>          else
> >> -          pixmaps[type] = eina_hash_int64_new
> >> ((Eina_Free_Cb)_e_pixmap_free);
> >> +          {
> >> +             pixmaps[type] = eina_hash_int64_new
> >> ((Eina_Free_Cb)_e_pixmap_free);
> >> +             wayland_time_base = ecore_time_unix_get();
> >> +          }
> >>          cp = _e_pixmap_new(type);
> >>          cp->win = id;
> >>          eina_hash_add(pixmaps[type], &id, cp);
> >> @@ -798,7 +803,8 @@ e_pixmap_image_clear(E_Pixmap *cp, Eina_Bool cache)
> >>               cd->frames = NULL;
> >>               EINA_LIST_FREE(free_list, cb)
> >>                 {
> >> -                  wl_callback_send_done(cb, ecore_time_unix_get() * 1000);
> >> +                  double t = ecore_time_unix_get() - wayland_time_base;
> >> +                  wl_callback_send_done(cb, t * 1000);
> >>                    wl_resource_destroy(cb);
> >>                 }
> >>            }
> >>
> >> --
> >>
> >>
> >
> >
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to