<br><br><div class="gmail_quote">On Mon, Mar 11, 2013 at 12:59 PM, Pekka Paalanen <span dir="ltr"><<a 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">
<div class="im">On Sun, 10 Mar 2013 15:53:30 +0100<br>
Hardening <<a href="mailto:rdp.effort@gmail.com">rdp.effort@gmail.com</a>> wrote:<br>
<br>
> This patch adds a wlrandr extension. It is useful to test<br>
> mode switching. The patch provides the weston-switch-mode<br>
> utility that can be use quite the same way as xrandr to<br>
> change graphical modes. For now only the DRM backend supports<br>
> mode switching, but other may follow.<br>
> ---<br>
>  clients/Makefile.am   |   10 ++<br>
>  clients/switch-mode.c |  300 +++++++++++++++++++++++++++++++++++++++++++++++++<br>
>  protocol/Makefile.am  |    3 +-<br>
>  protocol/wlrandr.xml  |   62 ++++++++++<br>
>  src/Makefile.am       |    5 +<br>
>  src/compositor.c      |    1 +<br>
>  src/compositor.h      |    3 +<br>
>  src/wlrandr.c         |  105 +++++++++++++++++<br>
>  8 files changed, 488 insertions(+), 1 deletion(-)<br>
>  create mode 100644 clients/switch-mode.c<br>
>  create mode 100644 protocol/wlrandr.xml<br>
>  create mode 100644 src/wlrandr.c<br>
</div>...<br>
<div><div class="h5">> diff --git a/protocol/wlrandr.xml b/protocol/wlrandr.xml<br>
> new file mode 100644<br>
> index 0000000..192ba24<br>
> --- /dev/null<br>
> +++ b/protocol/wlrandr.xml<br>
> @@ -0,0 +1,62 @@<br>
> +<protocol name="wlrandr"><br>
> +  <copyright><br>
> +    Copyright © 2013 Hardening, <a href="mailto:rdp.effort@gmail.com">rdp.effort@gmail.com</a><br>
> +<br>
> +    Permission to use, copy, modify, distribute, and sell this<br>
> +    software and its documentation for any purpose is hereby granted<br>
> +    without fee, provided that the above copyright notice appear in<br>
> +    all copies and that both that copyright notice and this permission<br>
> +    notice appear in supporting documentation, and that the name of<br>
> +    the copyright holders not be used in advertising or publicity<br>
> +    pertaining to distribution of the software without specific,<br>
> +    written prior permission.  The copyright holders make no<br>
> +    representations about the suitability of this software for any<br>
> +    purpose.  It is provided "as is" without express or implied<br>
> +    warranty.<br>
> +<br>
> +    THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS<br>
> +    SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND<br>
> +    FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY<br>
> +    SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES<br>
> +    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN<br>
> +    AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,<br>
> +    ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF<br>
> +    THIS SOFTWARE.<br>
> +  </copyright><br>
> +<br>
> +<br>
> +  <interface name="wlrandr" version="1"><br>
> +    <description summary="xRandr for weston"><br>
> +    This is a port of the xRandr extension for weston<br>
> +    </description><br>
> +<br>
> +    <request name="switch_mode"><br>
> +      <description summary="switch mode"><br>
> +        Asks weston to switch graphical mode for the given output.<br>
> +      </description><br>
> +<br>
> +      <arg name="output" type="object" interface="wl_output"/><br>
> +      <arg name="width" type="int"/><br>
> +      <arg name="height" type="int"/><br>
> +      <arg name="refresh" type="int"/><br>
> +    </request><br>
> +<br>
> +    <enum name="switch_mode_result"><br>
> +      <description summary="switch mode result"><br>
> +        The result of a switch_mode request<br>
> +      </description><br>
> +<br>
> +     <entry name="ok" value="0"<br>
> +             summary="the mode switch completed successfully"/><br>
> +     <entry name="failed" value="1"<br>
> +             summary="something failed during mode switch (internal error)"/><br>
> +     <entry name="not_available" value="2"<br>
> +             summary="the requested mode was not available"/><br>
> +    </enum><br>
> +<br>
> +    <event name="done"><br>
> +     <arg name='result' type='uint'/><br>
> +    </event><br>
> +  </interface><br>
> +<br>
> +</protocol><br>
<br>
</div></div>Let's assume you have 3 outputs, and you change the modes on all of<br>
them in a bunch. How do you know which 'done' event corresponds to<br>
which 'switch_mode' request?<br>
<br>
I think if you want this kind of a one-shot reply for a request,<br>
the request should create a new protocol object. That new object<br>
then would have a single event and no requests defined, and it will<br>
selfdestruct when the event leaves the server.<br>
<br>
wl_display.sync and wl_surface.frame are examples of such requests,<br>
and I think you could reuse wl_callback as the reply object type,<br>
as it carries an integer payload.<br>
<br>
That way you let the protocol object management take care of which<br>
reply was for which request.<br>
<br>
Mode switching can take time, and it might even be best to be<br>
performed with all outputs at once, instead of one output at a time<br>
sequentially. So, maybe you should also think whether the protocol<br>
itself should also have a concept of atomic mode setting for many<br>
outputs in one go, so that a server does not have to guess how many<br>
outputs you might want to change at a time.<br></blockquote><div><br>Indeed, multiple outputs introduces complexities. I think we should be able to follow most of the default xrandr assumptions here. These are a few random thoughts I have with that idea in mind:<br>
<br>1) A second output should be added to the right (or left) of the primary by default. (Is there a concept of a primary output in weston? Maybe the one at 0,0?)<br>2) There is no concept of --same-as with weston currently. (i.e. clone mode)<br>
3) Outputs are generally ordered in a vertical fashion by default.<br>4) For multiple outputs, all of the outputs' positions should be recalculated even if only one of the output changes mode. (Perhaps it could be intelligent enough to detect when the positions do not need to be reset)<br>
<br>- Scott<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Thanks,<br>
pq<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</div></div></blockquote></div><br>