RFC: Change OML_sync_control UST to CLOCK_MONOTONIC

Michel Dänzer michel at daenzer.net
Mon Jun 11 03:02:28 PDT 2012


On Son, 2012-06-10 at 11:56 +0000, Joakim Plate wrote: 
> Hi, 
> 
> I'm currently trying to make use of OML_sync_control extension to schedule 
> presentation of video frames in xbmc.
> 
> I've run into somewhat of a snag. It seem the spec doesn't specify what
> time the UST clock really is, nor can i find any mention of it elsewhere
> in docs.
> 
> Code wise it seem to be using do_gettimeofday(), which seems like a rather
> poor choice given that it can jump forward and back in time due to
> settimeofday calls. 
> 
> We normally make use of clock_gettime(CLOCK_MONOTONIC) to timestamp display
> of video frames, so to avoid major changes I'd need a way to convert to 
> gettimeofday (seem same as CLOCK_REALTIME).
> 
> Currently i'm trying:
>   struct timespec mon, rel;
>   clock_gettime(CLOCK_MONOTONIC, &mon);
>   clock_gettime(CLOCK_REALTIME , &rel);
> 
>   ticks += (rel.tv_sec  - mon.tv_sec)  * 1000000000;
>   ticks += (rel.tv_nsec - mon.tv_nsec);
> 
> To convert between the two, but that is quite a hack both in the
> possibility of clock changes and scheduling errors.
> 
> Is there a better way, or perhaps the DRI code should use CLOCK_MONOTONIC
> in the first place?

From the GLX_OML_sync_control spec:

        The Unadjusted System Time (or UST) is a 64-bit monotonically
        increasing counter [...]

So, without having thought a lot about potential ramifications, I'm
inclined to say that CLOCK_MONOTONIC should indeed be used.


-- 
Earthling Michel Dänzer           |                   http://www.amd.com
Libre software enthusiast         |          Debian, X and DRI developer


More information about the dri-devel mailing list