<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi,<br>
      <br>
      I like very much the rewording proposed by Pekka.<br>
      <br>
      But I dislike your proposition to send frame callbacks right away
      if the attached buffer has been attached for a long time.<br>
      <br>
      Your argument seems to be that the client may manage to get to the
      next pageflip if the frame callback is called right away. But with
      this argument, I don't see why this behaviour would be only for
      buffers attached long ago (and then we refresh at a higher
      frequency than the screen refresh)<br>
      <br>
      Moreover we may say we can always get the two behaviours with
      client side code:<br>
      . If we keep the current behaviour, the client could know it has
      attached a buffer for a long time (and that the frame callback it
      had put, was already called), so if it wants to try to hit next
      pageflip, it could just commit right away with a new attach<br>
      . With your proposition the client could always attach (and
      perhaps +damage) with a frame+commit (even with the old buffer not
      released), to be sure to get current behaviour.<br>
      <br>
      I don't think having to do an attach with the old buffer is a good
      idea, and I favor Pekka's proposition.<br>
      <br>
      Axel Davy<br>
      <br>
      On 22/02/2014, Jason Ekstrand wrote :<br>
    </div>
    <blockquote
cite="mid:CAOFGe94MrimarVE6DMgBns82H2eHnpBoG0qJNSUoSGmi5sDTJw@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>
            <div>
              <div>Pekka,<br>
              </div>
              Sorry this e-mail took so long to send.  Not much time
              lately.  The first time or two I read this suggested
              re-wording I didn't like it, but now it's starting to grow
              on me.  I still kind of like the idea of "the buffer you
              sent is now in use, go ahead and send the next one" but I
              don't know that it's that much better or that it actually
              changes anything.<br>
              <br>
              The big thing I'd like to leave open (and I think your
              change does) is the following:  Suppose a client commits a
              buffer and then, several seconds later (after the attached
              buffer was first used), the user does something that
              causes the client to refresh.  If it does a frame+commit
              without an attach, the server should be able to respond
              immediately without waiting for another pageflip.  This
              way the client may be able to render in time for the next
              flip.  Sure, the client might be too slow and miss the
              flip, but that's really no worse than waiting before
              sending the frame callback.<br>
              <br>
              Point is, it should be a compositor decision and I think
              you made that clear enough.<br>
              <br>
            </div>
            Looks good to me.<br>
          </div>
          --Jason Ekstrand<br>
          <br>
        </div>
        Reviewed-by: Jason Ekstrand <<a moz-do-not-send="true"
          href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
        <div>
          <div>
            <div>
              <div class="gmail_extra"><br>
                <div class="gmail_quote">On Fri, Feb 21, 2014 at 7:46
                  AM, Pekka Paalanen <span dir="ltr"><<a
                      moz-do-not-send="true"
                      href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span>
                  wrote:<br>
                  <blockquote class="gmail_quote" style="margin:0 0 0
                    .8ex;border-left:1px #ccc solid;padding-left:1ex">From:
                    Pekka Paalanen <<a moz-do-not-send="true"
                      href="mailto:pekka.paalanen@collabora.co.uk">pekka.paalanen@collabora.co.uk</a>><br>
                    <br>
                    "the callback event will arrive after the next
                    output refresh" is wrong,<br>
                    if you interpret "output refresh" as framebuffer
                    flip or the moment when<br>
                    the new pixels turn into light the first time.
                    Weston has probably never<br>
                    worked this way.<br>
                    <br>
                    Weston triggers the frame callbacks when it submits
                    repainting commands<br>
                    to the GPU, which is before the framebuffer flip.<br>
                    <br>
                    Strike the incorrect claim, and the rest of the
                    paragraph which no<br>
                    longer offers useful information.<br>
                    <br>
                    As a replacement, expand on the "throttling and
                    driving animations"<br>
                    characteristic. The main purpose is to let clients
                    animate at the<br>
                    display refresh rate, while avoiding drawing frames
                    that will never be<br>
                    presented.<br>
                    <br>
                    The new claim is that the server should give some
                    time between<br>
                    triggering frame callbacks and repainting itself,
                    for clients to draw<br>
                    and commit. This is somewhat intimate with the
                    repaint scheduling<br>
                    algorithm a compositor uses, but hopefully the right
                    intention. <br>
                  </blockquote>
                  <blockquote class="gmail_quote" style="margin:0 0 0
                    .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    <br>
                    Another point of this update is to imply, that frame
                    callbacks should<br>
                    not be used to count compositor repaint cycles nor
                    monitor refresh<br>
                    cycles. It has never been guaranteed to work.
                    Removing the mention of<br>
                    frame callback without an attach hopefully
                    discourages such use.<br>
                    <br>
                    v2: don't just remove a paragraph, but add useful
                    information about the<br>
                    request's intent.<br>
                    <br>
                    Signed-off-by: Pekka Paalanen <<a
                      moz-do-not-send="true"
                      href="mailto:pekka.paalanen@collabora.co.uk">pekka.paalanen@collabora.co.uk</a>><br>
                    Cc: Axel Davy <<a moz-do-not-send="true"
                      href="mailto:axel.davy@ens.fr">axel.davy@ens.fr</a>><br>
                    Cc: Jason Ekstrand <<a moz-do-not-send="true"
                      href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
                    ---<br>
                     protocol/wayland.xml | 26
                    ++++++++++++++++++--------<br>
                     1 file changed, 18 insertions(+), 8 deletions(-)<br>
                    <br>
                    diff --git a/protocol/wayland.xml
                    b/protocol/wayland.xml<br>
                    index e1edbe5..6e370ad 100644<br>
                    --- a/protocol/wayland.xml<br>
                    +++ b/protocol/wayland.xml<br>
                    @@ -1059,22 +1059,32 @@<br>
                         </request><br>
                    <br>
                         <request name="frame"><br>
                    -      <description summary="request repaint
                    feedback"><br>
                    -       Request notification when the next frame is
                    displayed. Useful<br>
                    -       for throttling redrawing operations, and
                    driving animations.<br>
                    +      <description summary="request a frame
                    throttling hint"><br>
                    +       Request a notification when it is a good
                    time start drawing a new<br>
                    +       frame, by creating a frame callback. This is
                    useful for throttling<br>
                    +       redrawing operations, and driving
                    animations.<br>
                    +<br>
                    +       When a client is animating on a wl_surface,
                    it can use the 'frame'<br>
                    +       request to get notified when it is a good
                    time to draw and commit the<br>
                    +       next frame of animation. If the client
                    commits an update earlier than<br>
                    +       that, it is likely that some updates will
                    not make it to the display,<br>
                    +       and the client is wasting resources by
                    drawing too often.<br>
                    +<br>
                            The frame request will take effect on the
                    next wl_surface.commit.<br>
                            The notification will only be posted for one
                    frame unless<br>
                            requested again.<br>
                    <br>
                    +       The server must send the notifications so
                    that a client<br>
                    +       will not send excessive updates, while still
                    allowing<br>
                    +       the highest possible update rate for clients
                    that wait for the reply<br>
                    +       before drawing again. The server should give
                    some time for the client<br>
                    +       to draw and commit after sending the frame
                    callback events to let them<br>
                    +       hit the next output refresh.<br>
                    +<br>
                            A server should avoid signalling the frame
                    callbacks if the<br>
                            surface is not visible in any way, e.g. the
                    surface is off-screen,<br>
                            or completely obscured by other opaque
                    surfaces.<br>
                    <br>
                    -       A client can request a frame callback even
                    without an attach,<br>
                    -       damage, or any other state changes.
                    wl_surface.commit triggers a<br>
                    -       display update, so the callback event will
                    arrive after the next<br>
                    -       output refresh where the surface is visible.<br>
                    -<br>
                            The object returned by this request will be
                    destroyed by the<br>
                            compositor after the callback is fired and
                    as such the client must not<br>
                            attempt to use it after that point.<br>
                    <span class="HOEnZb"><font color="#888888">--<br>
                        1.8.3.2<br>
                        <br>
                      </font></span></blockquote>
                </div>
                <br>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>