Was ist neu in Weston 13?

Vergangenen Dienstag wurde Weston 13.0 released. Der Release enthält einige neue Features, die wir für unsere Anwendungsfälle in Embedded Systems entwickelt und nach Upstream gebracht haben. In diesem Blogpost wollen wir die für uns relevanten neuen Features — Multi-Backend, OpenGL Renderer für die PipeWire und VNC Backends, und Überlappende Outputs — erläutern und zeigen, wieso diese für Embedded wichtig sind.

Neue Features

Durch Multi-Backend ist es möglich, ein System, bei dem sich Weston um die Ausgabe auf einem lokal angeschlossenen Display kümmert, zusätzlich mit Fernwartung oder Streaming auszustatten. Bisher war Weston darauf begrenzt, dass nur ein Backend gleichzeitig geladen werden konnte und dadurch nur Outputs von einem Typ, zum Beispiel DRM oder VNC, zur Verfügung standen. Da diese Einschränkung aufgehoben wurde, kann Weston Outputs mit verschiedenen Typen erstellen. Damit ist es möglich in einem Weston gleichzeitig DRM, VNC und PipeWire Outputs zu betreiben. Für Embedded Systems, die in vielen Fällen sowieso Netzwerk haben, ist Fernwartung ein willkommenes Feature.

Aufgrund relativ schwacher Hardware, ist es bei Embedded Systems wichtig, möglichst immer hardwarebeschleunigt zu rendern. Bisher konnten das VNC und das PipeWire Backend nur den Pixman Software-Renderer benutzen. Mit Weston 13 kann auch bei diesen Backends der OpenGL-Renderer für das Rendern benutzt werden. Da Weston nur einen Renderer lädt, der für alle Backends genutzt wird, erlaubt dies auch, im Multi-Backend Szenario den GL-Renderer für das DRM-Backend weiter zu nutzen, wenn ein PipeWire oder VNC Output hinzukommt. Damit können Zeichenoperation statt auf der CPU auf der GPU erledigt und Hardware-Ressourcen besser ausgenutzt werden.

Die Unterstützung von überlappenden Outputs ("overlapping outputs") hat zwei spannende Effekte auf unsere üblichen Anwendungsfälle. Zum Einen können dadurch Hardware-Planes auch für Fenster, die auf mehreren Outputs angezeigt werden, benutzt werden. Hardware-Planes erlauben in begrenztem Maß, das Zusammenrendern von mehreren Fenstern auf dem Display-Pfad statt auf der GPU zu erledigen und damit die GPU zu entlasten. Als Zweites wird es dadurch möglich, den selben Desktop-Inhalt auf mehreren Outputs anzuzeigen. Bisher mussten Outputs aufgrund von Einschränkungen beim Damage-Tracking immer komplett voneinander getrennt sein, wodurch Workarounds nötig waren, um zum Beispiel ein Fenster gleichzeitig über DRM und VNC anzuzeigen.

Ausblick

Aber die Arbeit wird nicht ausgehen. Folgende Features und Aufgaben stehen bei uns auf dem Plan, um die Performance und Konfigurierbarkeit von Weston für Embedded Systems weiter zu verbessern.

Bereits als Merge Request steht DMABUF-Support für das PipeWire-Backend bereit. Durch dieses Feature kann Weston mit GL gerenderte Frames direkt an PipeWire übergeben und von da ohne Kopie an einen hardware-beschleunigten JPEG- oder h.264-Encoder weitergereicht werden. Dadurch können Kopien von großen Bilddaten entfallen, wodurch sich eine Performance-Verbesserung beim Streaming und Recording ergibt.

Für das VNC-Backend wäre eine ähnliche Optimierung wünschenswert. Dazu ist aber noch weiterer Support in Neat VNC nötig.

Außerdem sind im Moment die Konfigurationsmöglichkeiten für mehrere Outputs sehr eingeschränkt. Hier fehlen noch Möglichkeiten, die Outputs per Konfiguration (ähnlich dem Clone-Mode) oder auch programmatisch mit einem Plugin auf dem Desktop zu positionieren und deren Größe zu bestimmen. Der programmatische Teil könnte sich auch mit einer hypothetischen Window Management Infrastruktur kombinieren lassen. Auch möchte man die VNC und PipeWire Outputs zur Laufzeit anlegen und entfernen können.

Nichtsdestotrotz ist Weston ein sehr geeigneter Wayland-Compositor für Embedded Systems und es lohnt sich, die eigenen Systeme auf Weston 13 zu aktualisieren.


Weiterführende Links

Weston, VNC Server

Im März letzten Jahres habe ich auf der Konferenz "Embedded Recipes" über unsere Arbeiten am Wayland-Kompositor Weston gesprochen und die gleichzeitige Nutzung mehrerer Backends demonstriert, wobei eine Weston-Instanz ihre Inhalte über unterschiedliche Pfade ausgibt, z.B.: