Louvre ist eine leistungsstarke C++-Bibliothek, die für die Erstellung von Wayland-Compositors entwickelt wurde, wobei der Schwerpunkt auf einer einfachen Entwicklung liegt.
Das Erstellen eines Wayland-Compositors kann ein entmutigendes Unterfangen sein, das sich oft über Monate oder sogar Jahre hinzieht. Diese anspruchsvolle Aufgabe umfasst die Beherrschung der Linux-Eingabe- und Grafik-APIs, die Verwaltung von Grafikpuffern und die sorgfältige Implementierung zahlreicher Wayland-Protokolle und ihrer jeweiligen Schnittstellen.
Glücklicherweise vereinfacht Louvre diesen komplizierten Prozess, indem es alle komplexen, einfachen Aufgaben in Ihrem Namen übernimmt. Es bietet sogar eine Standardmethode zum Verwalten von Protokollen, sodass Sie vom ersten Tag an über einen einfachen, aber funktionalen Compositor verfügen und dessen Funktionalität nach und nach erkunden und anpassen können, um sie genau an Ihre Anforderungen anzupassen.
Innerhalb von Louvre haben Sie die Flexibilität, entweder Ihre eigenen OpenGL ES 2.0-Shader/Programme zu verwenden, die LPainter-Klasse für grundlegendes 2D-Rendering zu verwenden oder das LScene- und LView-System zu nutzen, das Pufferschäden verwaltet und auch Eingabeereignisse für Sie verarbeiten kann. Darüber hinaus ist es möglich, diese drei Ansätze je nach Bedarf zu kombinieren.
Louvre bietet hervorragende Leistung. Ein Benchmark bestehend aus dem Rendern zahlreicher beweglicher wl_subsurfaces (undurchsichtig und durchscheinend), in dem der Beispiel-Compositor louvre-weston-clone getestet wurde, zeigt, dass Louvre auch in komplexen Szenarien eine hohe FPS-Rate aufrechterhalten kann. Darüber hinaus verbraucht es weniger CPU- und GPU-Ressourcen als beliebte Compositoren wie Weston und Sway.
Maschine | MacBook Pro A1398 (Retina, 15 Zoll, Mitte 2015) |
CPU | Intel Core i7-4770HQ bei 2,20 GHz (bis zu 3,4 GHz) mit 6 MB gemeinsam genutztem L3-Cache |
Erinnerung | 16 GB 1600 MHz DDR3L |
GPU | Intel Iris Pro Graphics – i915 (Intel Graphics) Version 1.6.0 (20201103) |
Anzeige | 15-Zoll-Retina-Display mit Einzelmodus 2880 x 1800 bei 60 Hz |
Betriebssystem | Linux Mint 21 – Linux 5.15.0-86-generisch |
Wenn Sie an den Einzelheiten der Funktionsweise des Benchmarks interessiert sind und ihn selbst ausprobieren möchten, klicken Sie bitte auf diesen Link.
Hier ist eine Grafik, die die Benchmark-Ergebnisse veranschaulicht. Es zeigt die durchschnittlichen FPS jedes Compositors an, der 1 bis 50 bewegte Oberflächen mit doppelter Pufferung auf einem HiDPI-Display rendert.
Die Benchmark-Ergebnisse wurden seit 2023 nicht mehr aktualisiert und spiegeln möglicherweise nicht genau die aktuelle Leistung der getesteten Compositors wider.
Die meisten Wayland-Compositoren verwenden einen einzelnen Thread, was ihre Leistung beim Rendern komplexer Szenarien drastisch verlangsamt. Der Grund dafür liegt in der vertikalen Synchronisierung , bei der der Compositor einige Millisekunden warten muss, bevor er den gerade gerenderten Framebuffer mit dem auf dem Bildschirm angezeigten austauschen kann. Dies geschieht, um den Austausch mit der Bildwiederholfrequenz ( vblank ) zu synchronisieren und den Tearing-Effekt zu vermeiden. Bei der Arbeit mit einem einzelnen Thread kommt es bei Compositoren zu „Totzeiten“, die sie daran hindern, den Inhalt rechtzeitig für den nächsten Frame zu verarbeiten und zu rendern. Aus diesem Grund überspringen sie am Ende ein vblank , was dazu führt, dass ihre Aktualisierungsrate um die Hälfte (oder mehr) sinkt. Um dieses Problem zu vermeiden, arbeitet Louvre mit mehreren Threads. Jede Ausgabe (Anzeige) rendert ihren Inhalt in einem eigenen Thread, sodass der Compositor weiterhin Anforderungen verarbeiten und an andere Ausgaben rendern kann, während einer auf einen leeren Wert wartet. Dies verhindert, dass Louvre-Compositors „Totzeiten“ haben und ermöglicht ihnen daher, eine hohe Bildwiederholfrequenz aufrechtzuerhalten.
Die Grafik auf der linken Seite zeigt die rohen CPU-Verbrauchsergebnisse, was darauf hindeuten könnte, dass Louvre mehr CPU-Ressourcen verbraucht. Dieser Vergleich ist jedoch nicht ganz fair, da die Bildwiederholfrequenz von Louvre fast doppelt so hoch ist wie die der anderen (60 FPS gegenüber durchschnittlich 30 FPS). Wenn wir den CPU-Verbrauch durch die Frames pro Sekunde (FPS) dividieren, wie in der Grafik rechts dargestellt, wird deutlich, dass Louvre im Vergleich zu den anderen Compositors tatsächlich weniger CPU-Ressourcen im Verhältnis zu FPS verbraucht.
Ähnlich wie beim CPU-Verbrauch können wir beobachten, dass Louvre im Verhältnis zu FPS weniger GPU-Ressourcen verbraucht als die anderen Compositors.