Discrepancies in object IDs printed by $WAYLAND_DEBUG output
Hoosier, Matt
Matt.Hoosier at garmin.com
Wed Aug 25 21:06:54 UTC 2021
> -----Original Message-----
> From: Derek Foreman <derek.foreman at collabora.com>
> Sent: Wednesday, August 25, 2021 3:54 PM
> To: Hoosier, Matt <Matt.Hoosier at garmin.com>; wayland-
> devel at lists.freedesktop.org
> Subject: Re: Discrepancies in object IDs printed by $WAYLAND_DEBUG
> output
>
> CAUTION - EXTERNAL EMAIL: Do not click any links or open any attachments
> unless you trust the sender and know the content is safe.
>
>
> On 2021-08-25 3:08 p.m., Hoosier, Matt wrote:
> > I observe that the IDs used to denote some wl_buffer protocol objects
> > created by a server-side factory in the $WAYLAND_DEBUG trace, differ
> > between the moment they're first announced in the callback event and
> > the later use-sites when the objects are passed to subsequent Wayland
> > protocol method invocations.
>
>
> This happens because internally the id is replaced with a pointer to the object
> for the next steps in event queuing, and the debug printing code runs too
> late to see the original ids.
>
>
> This is a timely complaint, as I wrote a patch for this just yesterday:
>
> https://urldefense.com/v3/__https://gitlab.freedesktop.org/wayland/wayla
> nd/-/merge_requests/172__;!!EJc4YC3iFmQ!Eph6m9-
> gz6SOpNOFygfXEu3p4Mc03jqKztjF1slUZHBatS5WVR6pkxqADKUehzk_zA$
>
>
> Thanks,
>
> Derek
Ah, makes sense. Thanks.
>
>
> > For example, using weston-simple-dmabuf-egl normally uses
> > "non-immediate" allocation of wl_buffers through the
> > zwp_linux_dmabuf_v1 protocol extension. One distinguishing feature of
> > this non-immediate technique is that the ID of the newly-built
> > protocol object is not known at the time the method to request
> > creation is made. The compositor is expected to supply it later in an
> > asynchronous event.
> >
> > This all works fine, but I notice in the log output that the ID of the
> > newly built object is different at point it's first announced to the
> > client:
> >
> > [2902569.971] ->
> > zwp_linux_explicit_synchronization_v1 at 6.get_synchronization(new id
> > zwp_linux_surface_synchronization_v1 at 10, wl_surface at 3) [2902570.062]
> > -> zwp_linux_dmabuf_v1 at 5.create_params(new id
> > zwp_linux_buffer_params_v1 at 11)
> > [2902570.076] -> zwp_linux_buffer_params_v1 at 11.add(fd 8, 0, 0, 1024,
> > 16777216, 2) [2902570.095] ->
> > zwp_linux_buffer_params_v1 at 11.create(256, 256, 875713112, 1)
> > [2902572.072] -> zwp_linux_dmabuf_v1 at 5.create_params(new id
> > zwp_linux_buffer_params_v1 at 12)
> > [2902572.105] -> zwp_linux_buffer_params_v1 at 12.add(fd 10, 0, 0, 1024,
> > 16777216, 2) [2902572.124] ->
> > zwp_linux_buffer_params_v1 at 12.create(256, 256, 875713112, 1)
> > [2902572.240] -> zwp_linux_dmabuf_v1 at 5.create_params(new id
> > zwp_linux_buffer_params_v1 at 13)
> > [2902572.249] -> zwp_linux_buffer_params_v1 at 13.add(fd 12, 0, 0, 1024,
> > 16777216, 2) [2902572.262] ->
> > zwp_linux_buffer_params_v1 at 13.create(256, 256, 875713112, 1) ...
> > [2902576.893] zwp_linux_buffer_params_v1 at 11.created(new id
> > wl_buffer at 2372643520)
> > [2902576.901] -> zwp_linux_buffer_params_v1 at 11.destroy()
> > [2902576.906] zwp_linux_buffer_params_v1 at 12.created(new id
> > wl_buffer at 2372643856)
> > [2902576.913] -> zwp_linux_buffer_params_v1 at 12.destroy()
> > [2902576.918] zwp_linux_buffer_params_v1 at 13.created(new id
> > wl_buffer at 2372644240)
> > [2902576.924] -> zwp_linux_buffer_params_v1 at 13.destroy()
> >
> > So, here are the ID's of the buffers built using the non-immediate mode:
> >
> > * wl_buffer at 2372643520 (0x8d6baac0)
> > * wl_buffer at 2372643856 (0x8d6bac10)
> > * wl_buffer at 2372644240 (0x8d6bad90)
> >
> >
> > These ID's look suspicious to begin with. They do not have ID's in the
> > usual range of server-allocated object ID's (these are supposed to
> > begin at 0xff000000).
> >
> > But then later when the application uses these objects as parameter to
> > subsequent requests, the ID's are printed differently:
> >
> > [2902577.702] -> wl_surface at 3.attach(wl_buffer at 4278190080, 0, 0)
> > ...
> > [3183676.812] -> wl_surface at 3.attach(wl_buffer at 4278190081, 0, 0)
> > ...
> >
> > So here, those are:
> >
> > * wl_buffer at 4278190080 (0xff000000)
> > * wl_buffer at 4278190081 (0xff000001)
> >
> >
> >
> > Those ID's are in the expected range for server-allocated protocol
> > objects. Despite this discrepancy, the application clearly works fine;
> > the right contents appear on-screen.
> >
> > Is there some quirk that causes object ID's passed as parameters to
> > events to be mis-printed?
> >
> > -Matt
More information about the wayland-devel
mailing list