<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-07-28 12:29 GMT+02:00 Giulio Camuffo <span dir="ltr"><<a href="mailto:giuliocamuffo@gmail.com" target="_blank">giuliocamuffo@gmail.com</a>></span>:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2014-07-28 13:19 GMT+03:00 Daniel Stone <<a href="mailto:daniel@fooishbar.org" target="_blank">daniel@fooishbar.org</a>>:<br>

<div>> Hi Eugen,<br>
><br>
> On 27 July 2014 22:16, Eugen Friedrich <<a href="mailto:friedrix@gmail.com" target="_blank">friedrix@gmail.com</a>> wrote:<br>
>><br>
>> Hi Daniel,<br>
>><br>
>> thanks, i understood we should add the wl_display_dispatch_pending call in<br>
>> the application<br>
>> there is currently no way to avoid this and basically it does not harm.<br>
>> I only wanted to understand if there is something missing.<br>
><br>
><br>
> Doing that is not enough. Firstly, it requires the application to do this,<br>
> or else EGL will break, which will make your stack appear broken with<br>
> different applications. Secondly, as an application may do this in any<br>
> thread, you could run into locking issues.<br>
><br>
> wl_display_sync() does the following (paraphrased):<br>
>   callback = wl_display_roundtrip(); /* creates wl_callback object on<br>
> default queue */<br>
>   while (!callback_signalled)<br>
>       wl_display_dispatch(); /* dispatch default queue until callback<br>
> processed */<br>
<br>
</div>Daniel, you swapped wl_display_sync() and wl_display_roundtrip() :).<br>
<div><br>
><br>
> This violates the rule that EGL must not intefere with the default queue -<br>
> meaning that the wl_callback object _cannot_ be placed on the main queue.<br>
><br>
> In order to do this correctly, you will see Mesa does:<br>
>   callback = wl_display_roundtrip();<br>
>   wl_callback_set_queue(callback, internal_egl_queue);<br>
>   while (!callback_signalled)<br>
>       wl_display_dispatch_queue(internal_egl_queue);<br>
><br>
> As with all objects created by your EGL implementation, the wl_callback<br>
> object must be moved to the queue immediately after it is created by<br>
> wl_display_roundtrip(). Doing this will ensure correctness and also not<br>
> require apps to be constantly dispatching the main queue. You can search the<br>
> Mesa codebase for uses of wl_display_roundtrip() to find some examples of<br>
> this pattern.<br>
><br>
> Again - any object created by your EGL implementation that is not<br>
> immediately moved to your internal event queue is a bug.<br>
><br>
</div></blockquote><div>Understood and our driver is basically is very similar to mesa in this respect but the wayland-compositor will send the delete_id event(delete the wl_display_sync callback) which is always goes to the default queue  which is in some applications not dispatched, therefore the memory consumption is increasing in those applications.<br>
<br></div><div>So as conclusion: each egl wayland client has to dispatch the default display queue on there own!? <br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>> Cheers,<br>
> Daniel<br>
><br>
</div><div><div>> _______________________________________________<br>
> wayland-devel mailing list<br>
> <a href="mailto:wayland-devel@lists.freedesktop.org" target="_blank">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>
><br>
</div></div></blockquote></div><br></div></div>