[PATCH weston v11 03/13] compositor-drm: Add DRM property cache

Pekka Paalanen ppaalanen at gmail.com
Tue Jul 25 10:28:17 UTC 2017


On Mon, 24 Jul 2017 18:13:39 +0100
Daniel Stone <daniel at fooishbar.org> wrote:

> Hi Pekka,
> I've made a mental note to make as careful passes over the
> documentation as the code before I send for review ...
> 
> On 19 July 2017 at 15:43, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> > On Tue, 18 Jul 2017 14:14:25 +0100
> > Daniel Stone <daniels at collabora.com> wrote:  
> >> +             /* Map from raw value to enum value */
> >> +             for (j = 0; j < info->num_enum_values; j++) {
> >> +                     if (!info->enum_values[j].valid)
> >> +                             continue;
> >> +                     if (info->enum_values[j].value != props->prop_values[i])
> >> +                             continue;
> >> +
> >> +                     return j;
> >> +             }
> >> +
> >> +             /* We don't have a mapping for this enum; return default. */
> >> +             break;  
> >
> > When we have an enum property whose value we cannot interpret, would
> > this be a place for an assert(0) or an scream in the Weston log? It is
> > either a bug in Weston, libdrm, or in the kernel, right?  
> 
> Not really, it's just a new value. Consider, e.g., the 'scaling mode'
> property: if someone wanted to add a new scaling mode, doing so would
> instantly break Weston if it was started when that scaling mode is
> set.
> 
> I'm not really sure if there's a better way to communicate that we've
> got an enum we don't properly handle. I think the behaviour is OK for
> now, but we can definitely revisit it if we start adding support for
> more and varied plane types.

Hi,

oh yes, that makes sense.

> >> +/**
> >> + * Cache DRM property values
> >> + *
> >> + * Update a per-object-type array of drm_property_info structures, given the
> >> + * current property values for a particular object.  
> >
> > I think that should instead say:
> >
> > * Cache DRM property IDs
> > *
> > * Update a per-object array of drm_property_info structures, given the
> > * DRM properties of the object.
> >
> > The original implementation I had actually cached the current values as
> > well rather than only property IDs and enum value IDs, but we do not do
> > that anymore.
> >  
> >> + *
> >> + * Call this every time an object newly appears (note that only connectors
> >> + * can be hotplugged), the first time it is seen, or when its status changes
> >> + * in a way which invalidates the potential property values (currently, the
> >> + * only case for this is connector hotplug).  
> >
> > I believe this should shorten to: "Call this for every DRM object
> > individually once."
> >
> > The language about status changes is probably a remnant of the value
> > caching days.  
> 
> When a connector is hotplugged, that can invalidate the enum
> properties, so we still need to re-scan.

Does that not mean that a new DRM connector object appears? Or that an
existing DRM connector object magically becomes rewritten in which case
what do we use for triggering the re-scan?

Do we need to re-scan all DRM connector objects every time we get a
hotplug event?

I mean, now that you said that, and I have read the doc comment a dozen
times more, I'm getting a feeling of what it's trying to say in a very
very compressed form. Expand a bit, please. :-)


Thanks,
pq

> >> +                     drmModeFreeProperty(prop);
> >> +                     continue;
> >> +             }
> >> +
> >> +             if (!(prop->flags & DRM_MODE_PROP_ENUM)) {
> >> +                     weston_log("DRM: expected property %s to be an enum,"
> >> +                                " but it is not; ignoring\n", prop->name);
> >> +                     drmModeFreeProperty(prop);
> >> +                     info[j].prop_id = 0;
> >> +                     continue;
> >> +             }
> >> +
> >> +             for (k = 0; k < info[j].num_enum_values; k++) {
> >> +                     int l;
> >> +
> >> +                     if (info[j].enum_values[k].valid)  
> >
> > This should never be true, should it?
> > If it was, it would seem odd to skip updating it, when we happily
> > update everything else.  
> 
> As above, it'll be true when running on, e.g., hotplug.
> 
> Cheers,
> Daniel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20170725/709f9910/attachment-0001.sig>


More information about the wayland-devel mailing list