<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 9, 2017 at 9:51 AM Frediano Ziglio <<a href="mailto:fziglio@redhat.com">fziglio@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">><br>
> Agent can now send just the coordinates of the window that has changed.<br>
> In the case window has been hidden or closed, width of the window must be<br>
> set to 0.<br>
><br>
> This reduces CPU load because the agent doesn't have to cycle through all the<br>
> windows and decide which to send. It mainly concerns Windows agent as there<br>
> are often hundreds of windows and majority of them is not visible to the<br>
> user.<br>
<br>
So basically you can trace single windows events and send the update<br>
instead of enumerating all windows in the system every time, right?<br></blockquote><div><br></div><div>Correct. On Windows, the client receives the complete list after the request to enable seamless mode and afterwards receives only single window updates, never the whole list.</div><div>It works very similarly on linux, but the list is re-sent after each destroy event (turns out the window passed to the function with the event is not the visible one, needs further investigation).</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Potentially the old way could be used to send not rectangular windows<br>
splitting the windows in different rectangles while with this change<br>
is harder to achieve this.<br></blockquote><div><br></div><div>If you mean by non-rectangular windows the same as Marc-André - windows with rounded corners, then I don't see how this would help. How would you split these?</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> ---<br>
>  spice/vd_agent.h | 2 ++<br>
>  1 file changed, 2 insertions(+)<br>
><br>
> diff --git a/spice/vd_agent.h b/spice/vd_agent.h<br>
> index 235f152..056817a 100644<br>
> --- a/spice/vd_agent.h<br>
> +++ b/spice/vd_agent.h<br>
> @@ -93,6 +93,7 @@ enum {<br>
>      VD_AGENT_AUDIO_VOLUME_SYNC,<br>
>      VD_AGENT_SEAMLESS_MODE,<br>
>      VD_AGENT_SEAMLESS_MODE_LIST,<br>
> +    VD_AGENT_SEAMLESS_MODE_CHANGE,<br>
>      VD_AGENT_END_MESSAGE,<br>
>  };<br>
><br>
> @@ -258,6 +259,7 @@ typedef struct SPICE_ATTR_PACKED<br>
> VDAgentSeamlessModeWindow {<br>
>      int32_t y;<br>
>      uint32_t w;<br>
>      uint32_t h;<br>
> +    uint64_t id;<br>
>  } VDAgentSeamlessModeWindow;<br>
><br>
<br>
This changes also mode_list message. Not a big deal as 01/12 is not<br>
merged too. But how is the id used in mode_list?<br></blockquote><div><br></div><div>The list could be removed, being replaced by sending a batch of individual windows.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I suppose id is xid on Xwindows and the handle in Windows.<br></blockquote><div> </div><div>Yes, these should not change during the lifetime of a window afaik. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
>  typedef struct SPICE_ATTR_PACKED VDAgentSeamlessModeList {<br>
<br>
Frediano<br></blockquote><div><br></div><div>Regards,</div><div>Jakub Janků </div></div></div>