<div dir="ltr"><div><div><div><div>Hello Pekka,<br></div>now i have the complete picture,<br></div>the mentioned commit describes exactly the problem which was found by me.<br></div>we are still using wayland 1.3 version.<br>
<br></div>thanks a lot !!!<br><div><div><br><br><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-07-30 8:38 GMT+02:00 Pekka Paalanen <span dir="ltr"><<a href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, 29 Jul 2014 23:32:34 +0200<br>
<div><div class="h5">Eugen Friedrich <<a href="mailto:friedrix@gmail.com">friedrix@gmail.com</a>> wrote:<br>
<br>
> 2014-07-29 20:19 GMT+02:00 Pekka Paalanen <<a href="mailto:ppaalanen@gmail.com">ppaalanen@gmail.com</a>>:<br>
><br>
> > On Tue, 29 Jul 2014 13:00:14 +0200<br>
> > Eugen Friedrich <<a href="mailto:friedrix@gmail.com">friedrix@gmail.com</a>> wrote:<br>
> ><br>
> > > 2014-07-28 12:29 GMT+02:00 Giulio Camuffo <<a href="mailto:giuliocamuffo@gmail.com">giuliocamuffo@gmail.com</a>>:<br>
> > ><br>
> > > > 2014-07-28 13:19 GMT+03:00 Daniel Stone <<a href="mailto:daniel@fooishbar.org">daniel@fooishbar.org</a>>:<br>
> > > > > Hi Eugen,<br>
> > > > ><br>
> > > > > On 27 July 2014 22:16, Eugen Friedrich <<a href="mailto:friedrix@gmail.com">friedrix@gmail.com</a>> wrote:<br>
> > > > >><br>
> > > > >> Hi Daniel,<br>
> > > > >><br>
> > > > >> thanks, i understood we should add the wl_display_dispatch_pending<br>
> > call<br>
> > > > in<br>
> > > > >> the application<br>
> > > > >> there is currently no way to avoid this and basically it does not<br>
> > 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<br>
> > > > 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<br>
> > 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>
> > > > Daniel, you swapped wl_display_sync() and wl_display_roundtrip() :).<br>
> ><br>
> > Yeah. :-P<br>
> ><br>
> > So, wl_display_roundtrip() is the function you should never use<br>
> > inside an EGL implementation.<br>
> ><br>
> > > ><br>
> > > > ><br>
> > > > > This violates the rule that EGL must not intefere with the default<br>
> > queue<br>
> > > > -<br>
> > > > > meaning that the wl_callback object _cannot_ be placed on the main<br>
> > 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<br>
> > 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<br>
> > not<br>
> > > > > require apps to be constantly dispatching the main queue. You can<br>
> > search<br>
> > > > the<br>
> > > > > Mesa codebase for uses of wl_display_roundtrip() to find some<br>
> > 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>
> > > ><br>
> > > Understood and our driver is basically is very similar to mesa in this<br>
> > > respect but the wayland-compositor will send the delete_id event(delete<br>
> > the<br>
> > > wl_display_sync callback) which is always goes to the default queue<br>
> >  which<br>
> > > is in some applications not dispatched, therefore the memory consumption<br>
> > is<br>
> > > increasing in those applications.<br>
> > ><br>
> > > So as conclusion: each egl wayland client has to dispatch the default<br>
> > > display queue on there own!?<br>
> ><br>
> > Obviously. See<br>
> > <a href="http://cgit.freedesktop.org/wayland/weston/tree/clients/simple-egl.c" target="_blank">http://cgit.freedesktop.org/wayland/weston/tree/clients/simple-egl.c</a><br>
> > for a stand-alone example that uses only libwayland-client, and not<br>
> > a toolkit.<br>
> ><br>
> > How did your app connect to Wayland and create the wl_surface that<br>
> > EGL then targets in the first place?<br>
> ><br>
> > It simply cannot do that without dispatching the default event<br>
> > queue. All properly written Wayland apps do that. Dispatching must<br>
> > also be part of the main loop.<br>
> ><br>
> > at the initialization app does dispatch the default queue but not during<br>
> run time.<br>
><br>
> > I get a feeling there is something strange going on. What kind of<br>
> > app is this? Does it use a toolkit, or does it call<br>
> > libwayland-client directly? Is it perhaps running in an endless<br>
> > loop calling just GL functions and eglSwapBuffers but never any<br>
> > wayland functions?<br>
> ><br>
> yes, the last one, just calling GL and eglSwapBuffers,<br>
> for all input events it uses own queue and only this is dispatched.<br>
><br>
> So at the end we have a 3 queues:<br>
><br>
> - one for egl -> egl is taking care for dispatching<br>
><br>
> - one for input events -> app is taking care for dispatching<br>
><br>
> - one default queue -> no body, which is a bug since the wayland<br>
>   display was created by the app and app is responsible to dispatch this<br>
>   even the event on this are triggered by egl.<br>
><br>
> Will force application developers to include wl_display_dispatch_pending<br>
> in their main loop.<br>
><br>
> Thanks for the support, your comments are very welcome<br>
<br>
</div></div>Hmm, which version of libwayland are you using again?<br>
<br>
I am looking at wayland-client.c, and the client wl_display contains<br>
two queues: the default queue, and the internal display queue.<br>
<br>
All events on the wl_display object go to the internal display queue,<br>
and it seems that queue is dispatched always when any queue is<br>
dispatched. That means that wl_display.delete_id events would be handled<br>
regardless of which queue you dispatch.<br>
<br>
Before adding the internal queue for wl_display, libwayland-client<br>
indeed did rely on the app to dispatch the main queue regularly.<br>
<br>
So I'm not completely sure you absolutely have to regularly dispatch the<br>
default queue anymore, but if you want to be compatible with the older<br>
releases of libwayland, you definitely should dispatch it.<br>
<br>
Sorry I did not recall this earlier. For reference:<br>
<a href="http://cgit.freedesktop.org/wayland/wayland/commit/?id=b9eebce0aa5559855d835e403ba3bb5960baaadc" target="_blank">http://cgit.freedesktop.org/wayland/wayland/commit/?id=b9eebce0aa5559855d835e403ba3bb5960baaadc</a><br>

<br>
This commit seems to have been put in after 1.4.0, so was released in<br>
Wayland 1.5.0.<br>
<br>
<br>
Thanks,<br>
pq<br>
</blockquote></div><br></div>