<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.6.1">
</HEAD>
<BODY>
[ In reverse order ]<BR>
<BR>
We start off with my patches. I haven't yet written docs for cogl-output.c (trying to get this out tonight)<BR>
<BR>
========<BR>
commit 55ea53b5b4e7c8352bea59d25cc0cdf47a968229<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Mon Nov 12 11:31:16 2012 -0500<BR>
<BR>
    Add CoglOutput and track for the GLX backend<BR>
    <BR>
    The CoglOutput object represents one output such as a monitor or<BR>
    laptop panel, with information about attributes of the output such as<BR>
    the position of the output within the global coordinate space, and<BR>
    the refresh rate.<BR>
    <BR>
    We don't yet publically export the ability to get output information but<BR>
    we track it for the GLX backend, where we'll use it to track the refresh<BR>
    rate.<BR>
<BR>
commit a0de9e74d97ef44c327bd1daef800aa8667e9938<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Mon Jan 7 12:24:13 2013 -0500<BR>
<BR>
    Add missing cogl-output.c<BR>
    <BR>
    Should have been part of "Add CoglOutput and track for the GLX backend"<BR>
<BR>
commit 394a162738f30f9cbf975f93bb9e15399715c423<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Mon Nov 12 11:52:31 2012 -0500<BR>
<BR>
    Prefer OML_sync_control over SGI_video_sync when waiting for swap<BR>
    <BR>
    When we block waiting for the swap, prefer doing that using<BR>
    glXWaitForMsc() from OML_sync_control because that returns a system<BR>
    time value for the precise time of the swap.<BR>
<BR>
commit 646c2805342db272a1af53537aacbee1fbb477b2<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Mon Nov 12 11:58:10 2012 -0500<BR>
<BR>
    Add CoglFrameTimings<BR>
    <BR>
    Add a CoglFrameTimings object that tracks timing information<BR>
    for frames that are drawn. We track a frame counter and frame<BR>
    timing information for each CoglOnscreen. Frames timing information<BR>
    is deliminated by a new cogl_onscreen_begin_frame() and retrieved using<BR>
    cogl_onscreen_get_frame_timings().<BR>
========<BR>
<BR>
Then a bunch of fixes and minor changes from you that I have no issues with.<BR>
<BR>
========<BR>
commit 98d2be959c02ef911fdfe038590c226dc8681a1b<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Dec 3 23:23:37 2012 +0000<BR>
<BR>
    pedantic style fixes<BR>
    <BR>
    TODO: squash back into owen's patch<BR>
<BR>
commit 4a881b2fed030981558e02ff1b28f07606cc0692<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Dec 3 23:15:48 2012 +0000<BR>
<BR>
    use c99 types if applicable and s/gboolean/CoglBool/<BR>
    <BR>
    TODO: squash back into owen's patch<BR>
<BR>
commit ac24c9db3ed126f8c4c450b258bd26f73489b4be<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Dec 3 23:35:14 2012 +0000<BR>
<BR>
    move outputs member up to CoglRenderer<BR>
    <BR>
    TODO: squash back into owen's patch<BR>
<BR>
commit 2619778124ba347343fb62bd5c9b22e8bbdcabc2<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Dec 3 23:00:15 2012 +0000<BR>
<BR>
    rename CoglFrameTimings to CoglSwapInfo<BR>
    <BR>
    The aim is to pass an opaque structure to the swap buffers notification<BR>
    callbacks and enable access to frame timing information this way. Since<BR>
    there could be numerous non-timing related things to report here too<BR>
    this gives the structure a more general name.<BR>
    <BR>
    TODO: fold this back into owen's patch<BR>
<BR>
commit 1b6ccda7b65a1b13f60cdd10fa166d4ac9a4ed79<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Dec 3 23:16:01 2012 +0000<BR>
<BR>
    use c99 types if applicable and s/gboolean/CoglBool/<BR>
    <BR>
    TODO: squash back into owen's patch<BR>
<BR>
commit 30ad78f96af0cc4bea8a1aca442500d16ba496e6<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Wed Jan 9 20:46:43 2013 +0000<BR>
<BR>
    rename SwapInfo to FrameInfo<BR>
    <BR>
    As discussed on the mailing list we can be slightly more consistent with gtk<BR>
    by using "frame" instead of "swap" here. Also we discussed the potential<BR>
    for being able to query information for a frame that's still in progress<BR>
    and in that case "swap" wouldn't make much sense.<BR>
    <BR>
    TODO: squash this back into owen's patch<BR>
<BR>
commit 0dd495d28418db0ad6ffd0d8078a27f01c2eba42<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Tue Jan 15 15:37:49 2013 +0000<BR>
<BR>
    frame-info: s/_refresh_interval/_refresh_rate/<BR>
    <BR>
    For consistency this reworks the cogl_frame_info_get_refresh_interval<BR>
    api to instead be cogl_frame_info_get_refresh_rate() and return a<BR>
    frequency in Hertz instead of an interval in milliseconds. This is<BR>
    consistent with cogl_output_get_refresh_rate().<BR>
<BR>
commit c7bda39491fd63cedec92ef79cf2cb9fe3df0fbd<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Mon Jan 21 01:18:25 2013 +0000<BR>
<BR>
    renderer: expose CoglOutputs<BR>
    <BR>
    This adds a cogl_renderer_foreach_output() function that can be used to<BR>
    iterate the display outputs for a particular renderer.<BR>
    <BR>
    This also updates cogl-info to use this new api so it can dump out all<BR>
    the output information.<BR>
========<BR>
<BR>
I also have no issue with the basic idea of the new frame callback API<BR>
<BR>
========<BR>
commit 8a1a1f56135af22c7316529f9e6f400059e305b8<BR>
Author: Robert Bragg <<A HREF="mailto:robert@linux.intel.com">robert@linux.intel.com</A>><BR>
Date:   Thu Jan 10 19:23:48 2013 +0000<BR>
<BR>
    onscreen: Provide more general CoglFrameCallback api<BR>
    <BR>
    This reworks the cogl_onscreen_add_swap_complete_callback api to instead<BR>
    be named cogl_onscreen_add_frame_callback and to take a callback that<BR>
    can accept other events besides just swap completion events. This means<BR>
    we can add more events in the future that signal the progression of a<BR>
    frame without needing lots of new callback api for each event.<BR>
    <BR>
    TODO: squash this back into owen's patch<BR>
========<BR>
<BR>
At this point, we get to a bunch of things extracted from your patch that I don't quite agree with,<BR>
but I'm willing to  go with. cogl_frame_info_get_output() doesn't seem useful to me:<BR>
<BR>
========<BR>
commit 5cc26c82555e01ca7370772b73b93ca00772c37a<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 17:38:38 2013 -0500<BR>
<BR>
    Add cogl_frame_info_get_output()<BR>
    <BR>
    If available from the windowing system, it could potentially be useful<BR>
    to know something other than the refresh rate of the output that the<BR>
    monitor is currently presenting on. (Note however, an onscreen may span<BR>
    multiple outputs. The windowing system has to pick *one* for timing,<BR>
    but most other attibutes of the window will apply to the parts of the<BR>
    onscreen on that output.)<BR>
========<BR>
<BR>
See discussion of frame time elsewhere. I think it simplifies the lives of people trying to<BR>
use CoglFrameInfo, but it's not required, minimal low-level functionality, certainly.<BR>
<BR>
========<BR>
commit 38ac56be4a0af4048091cfa3f7fd206a0d4db424<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 22:12:47 2013 -0500<BR>
<BR>
    Remove cogl_frame_info_get_frame_time()<BR>
    <BR>
    The frame_time isn't closely associated with an onscreen - an update<BR>
    could involve multiple stages (in a stage-per-output scenario, perhaps.)<BR>
    If an application or toolkit needs to know the frame time for a FrameInfo<BR>
    it will have to do that association itself.<BR>
========<BR>
<BR>
Switching away from g_get_monotonic_time() is needed if Cogl is to be compiled<BR>
without GLib. The patch here keeps the translation of gettimeofday() UST values into<BR>
clock_gettime(CLOCK_MONOTONIC, ...).<BR>
<BR>
========<BR>
commit 67bc4064ea0f63fdc3a751c4cf1df3edfeeceb2f<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 22:32:39 2013 -0500<BR>
<BR>
    Don't use g_get_monotonic_time()<BR>
    <BR>
    Avoid a hard dependency on GLib and on however GLib is implementing<BR>
    g_get_monotonic_time() by directly referencing clock_gettime(CLOCK_MONOTONIC).<BR>
    <BR>
    The translation of timestamp values for unidentified types of UST is<BR>
    also removed, since it's going to have a big error, and<BR>
    glXGetSyncValues() doesn't return the *current* UST anyways - it returns<BR>
    the UST for the last frame.<BR>
========<BR>
<BR>
Hopefully multiplying by 1000 is safe - in which case, I don't care about usec vs. nanosec.<BR>
<BR>
========<BR>
commit 36bbcb083156926f50c0b3c3e0b42e24f42fdbf7<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 22:43:10 2013 -0500<BR>
<BR>
    Switch presentation time to nanoseconds<BR>
    <BR>
    In the future, we may want to track frame timings with very high precision<BR>
    for profiling purposes, so to be consistent with that, use nanoseconds,<BR>
    not microseconds. 63-bits in nanoseconds is 270+ years, so hopefully<BR>
    clock_gettime(CLOCK_MONOTONIC,) will fit.<BR>
========<BR>
<BR>
The next patch is a big hunk of changes, but is mostly about removing the history ring in favor<BR>
of a queue. I don't know how this will work out when we start implementing more complex<BR>
scenarios than we have currently implemented - like the compositor scenario with<BR>
_NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS - but if we expose nothing,<BR>
we can always adjust later. There is a potential problem of having a queue of unlimited<BR>
length - if someone wrote a all-draw-no-events program, the queue would grow without<BR>
bound.<BR>
<BR>
========<BR>
commit 41de98629a23f594715c703d26671d039085cf93<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 23:16:25 2013 -0500<BR>
<BR>
    Replace frame history with a queue<BR>
    <BR>
    An arbitrary-length frame history seems hard to size, and can be implemented<BR>
    at the application level, so ditch it for a queue of frame info objects<BR>
    that are not yet complete.<BR>
========<BR>
<BR>
cogl_frame_info_get_complete() would be useful - e.g., if an application is keeping an application-side<BR>
history - knowing what frames can be used now and aren't waiting for COMPLETE events. Though<BR>
with COMPLETE events it can be emulated. Can be added later.<BR>
<BR>
========<BR>
commit 47bf79c31f0d8de8c1165d3fe9818a5021a17f1c<BR>
Author: Owen W. Taylor <<A HREF="mailto:otaylor@fishsoup.net">otaylor@fishsoup.net</A>><BR>
Date:   Thu Jan 24 23:29:04 2013 -0500<BR>
<BR>
    Remove cogl_frame_info_get_complete()<BR>
    <BR>
    An application gets a callback when a frame info is complete, so there<BR>
    may not be a need for a flag as well.<BR>
========<BR>
<BR>
I think the main question for me is whether you are OK with gettimeofday => CLOCK_MONOTONIC<BR>
conversion so we have a known scale. Otherwise, the diffs between the two branches are detail,<BR>
and there's nothing that I've pushed to wip/frame-synchronization that I have a hard objection to.<BR>
<BR>
- Owen<BR>
<BR>
</BODY>
</HTML>