7.7 KiB
Ergebnis
Systemauslastung von Flutter
Aus dem "System Informationen" Feature konnte abgelesen werden, dass direkt nach dem Start von Flutter-Pi ein RAM Verbrauch von ungefähr 130 MB und bei Flutter-Auto ungefähr 160 MB angezeigt wird. Die 30MB Differenz liegt daran, dass bei Flutter-Auto zusätzlich noch Cage und Wayland gestartet werden.
Die CPU Auslastung schwankt bei beiden Embeddern ungefähr zwischen 15 und 20 Prozent. Hier ist zu beachten, dass das nicht die CPU Auslastung im vollem Leerlauf ist, da auch die Graphen angezeigt werden, doch ist es ein guter Annäherungs-Wert für einen ungefähren Wert bei Inhalten mit wenig Animationen.
Benchmark Ergebnisse
Flame Sprite Rendering Benchmark Ergebnis
Der Flame Sprite Rendering Benchmark wurde drei mal auf jedem Gerät und Embedder durchgeführt, am Raspberry Pi 4 wurde zusätzlich noch Flutter im normalen Desktop Modus vom Raspberry Pi OS getestet. Die Ergebnisse sind in Tabelle \ref{flameSpriteRenderingBenchmark} und \ref{flameSpriteRenderingBenchmark2} zu sehen.
Mit einem Benchmark an einem Macbook Air mit dem Apple M2 Chip konnte ein Wert von ungefähr 1680 erreicht werden. Dieser Wert wird als Referenzwert für den Maximalwert genommen, der bei dem Benchmark mit der Verzögerung innerhalb der 30 Minuten erreicht werden kann, denn ohne Verzögerung erreicht der M2 Chip über 22000 Animationen bevor die Framerate auf unter 60 Bilder pro Sekunde fällt. Im Benchmark Test wird der M2 Chip so nicht ausgelastet und die 1680 Animationen sind rein durch die Verzögerung bedingt. Keiner der Embedder an den Testgeräten konnte den Referenzwert erreichen, es wird also kein Embedder "ausgebremst" im Test.
\begin{center}
\begin{table}[h] \caption{Flame Sprite Rendering Benchmark Ergebnisse am Pi 4} \label{flameSpriteRenderingBenchmark} \resizebox{\textwidth}{!}{% \begin{tabular}{|l|l|l|} \hline Flutter Embedder & Ergebnisse (Animationen nach 30 Minuten) & Durchschnittlich (gerundet) \ \hline Flutter-Pi & 537, 543, 544 & 541 \ \hline Flutter-Auto mit Cage & 1025, 1163, 1129 & 1106 \ \hline Flutter Desktop & 223, 211, 212 & 215 \ \hline \end{tabular}% } \end{table}
\end{center}
\begin{center}
\begin{table}[h] \caption{Flame Sprite Rendering Benchmark Ergebnisse am Pi 0 2W} \label{flameSpriteRenderingBenchmark2} \resizebox{\textwidth}{!}{% \begin{tabular}{|l|l|l|} \hline Flutter Embedder & Ergebnisse (Animationen nach 30 Minuten) & Durchschnittlich (gerundet) \ \hline Flutter-Pi & 376, 427, 390 & 398 \ \hline Flutter-Auto mit Cage & 736, 739, 712 & 729 \ \hline \end{tabular}% } \end{table}
\end{center}
Es lässt sich festhalten, dass Flutter-Auto eine deutlich bessere Leistung aufweist als Flutter-Pi. Am Pi 4 ist Flutter-Auto im Durchschnitt ungefähr 68.6 Prozent schneller als Flutter-Pi und am Pi Zero 2W ist Flutter-Auto im Durchschnitt ungefähr 58.74 Prozent schneller.
Außerdem lässt sich festhalten, dass Flutter im normalen Desktop Modus mit dem offiziellen Embedder für Linux sehr schlecht abschneidet. Die Anwendung ist spürbar langsamer und hat zusätzlich große Probleme bei der Touch-Eingabe, denn Wischgesten werden nicht erkannt und man kann nicht die Liste im News Feature scrollen, nur normale Klicks werden erkannt.
Rogue Shooter Benchmark Ergebnis
Der Rogue Shooter zeigt wie auch der Flame Sprite Rendering Benchmark, dass Flutter-Auto die beste Leistung aufweist. Mit Flutter-Auto am Pi 4 ist die Framerate meistens im Bereich von 50 Bildern pro Sekunde und bricht manchmal kurz auf den 40er Bereich ein, selten kommt es zu einem Einbruch auf den 30er Bereich. Flutter-Pi hingegen bricht sehr oft in den 40er und 30er Bereich ein. Am Pi Zero 2W ist die Leistung anfangs auch gleichermaßen deutlich besser, sie bricht jedoch sowohl bei Flutter-Pi und Flutter-Auto auf ungefähr genau 30 Bilder pro Sekunde ein und bleibt durchgehend auf diesem Niveau. Hier ist nicht genau klar weshalb die Framerate förmlich auf 30 Bilder pro Sekunde eingefroren wird, es erscheint ähnlich zu einem "Framerate Lock" auf 30 Bilder was jedoch nicht in Flutter oder Flame eingestellt wurde und Flutter sollte immer versuchen die maximale Framerate zu erreichen.
VSync Test Ergebnis
Der VSync Test zeigt, dass sowohl Flutter-Pi als auch Flutter-Auto auf beiden Testgeräten ohne Tearing Effekte laufen. Wird in den Einstellungen das Performance-Overlay aktiviert, so kann man sehen, dass besonders bei Flutter-Pi leichte Tearing Effekte auftreten. Es lässt sich also festhalten, dass allein das Betrachten der Leistung mit dem Overlay die Leistung beeinträchtigt.
Video Benchmark Ergebnis
Sowohl der Raspberry Pi 4 als auch der Raspberry Pi Zero 2W können das Video in der Auflösung von 720p flüssig wiedergeben. Schon bei der Auflösung von 1080p gibt es jedoch Probleme. Der Pi 4 kann das Video noch fast flüssig wiedergeben mit einer leicht verzögerten Wiedergabe und der Pi Zero 2W zeigt starke Verzögerungen beim Abspielen des Videos. Die Wiedergabe in 4K ist auf beiden Geräten nicht möglich, es ruckelt stark am Pi 4 und der Pi Zero 2W friert beim Video fast komplett ein. Wie bereits genannt unterstützt nur Flutter-Pi die Wiedergabe von Videos.
Simple Tiles Map Benchmark Ergebnis
Die Karte kann am Raspberry Pi 4 flüssig ohne Probleme gerendert werden und auch Multi-Touch Eingaben werden ohne Ruckler oder Verzögerungen verarbeitet. Beim Raspberry Pi Zero 2W gibt es jedoch Probleme, wenn man die Sicht zu schnell die Sicht über die Karte bewegt kann die Karte nicht mehr flüssig gerendert werden und es kann dazu kommen, dass die Anwendung kurz einfriert und manchmal auch abstürzt. Hier kommt der Pi Zero 2W an seine Grenzen vom Arbeitsspeicher.
Bewertung von Flutter als Entwicklungsplattform für eingebettetes Linux
Alle der Anforderungen für die geplante Flutter Anwendung konnten erfüllt werden und die Anwendung konnte erfolgreich mit beiden Embeddern in einer angepassten Linux Distribution getestet werden. Besonders herauszustellen ist, dass durch das Hot-Reload Feature von Flutter die Entwicklung sehr effizient und schnell von statten ging. Zusätzlich ist die Dokumentation von Flutter sehr gut, doch speziell für die Entwicklung von Flutter in eingebetteten Systemen und anderen Embeddern als Desktop und Mobile, gibt es nur wenige Informationen, welche verstreut im Internet herausgesucht werden mussten um das Projekt erfolgreich umzusetzen. Der Einsatz der CustomPainter in Flutter zeigte auch, dass man falls notwendig in Flutter relativ einfach angepasste komplexere Widgets erstellen kann wie die Pixel-Matrix für die Ansteuerung der RGB-Matrix.
Zukünftige Verbesserungen und Ideen
Behebung von Fehlern
Das Fokus-Problem bei Flutter-Auto muss behoben werden um die es produktionsbereit zu machen. Es sollte hier untersucht werden, ob das Problem durch die Nutzung von Cage als Wayland-Kiosk verursacht wird.
Des weiteren sollte analysiert werden, weshalb die SharedPreferences bei der ersten Verwendung nicht abgespeichert werden.
Neue Rendering-Engine
Flutter bekommt in Zukunft eine neue Rendering-Engine names "Impeller" welche SKIA ersetzen wird. Hier kann untersucht werden ob Impeller die Leistung von Flutter mit Linux und den anderen Embeddern verbessert. Zum Zeitpunkt der Arbeit unterstützt Impeller offiziell nur iOS und die Unterstützung für Android ist in der Beta Phase. Unter macOS kann Impeller auch bereits als "Preview" getestet werden. Impeller wird zusätzlich auch in Zukunft unter allen anderen Plattformen als iOS und macOS die Vulkan API unterstützen. Der zusätzliche Wechsel von OpenGL zu Vulkan könnte die Leistung eventuell auch verbessern, da Vulkan eine modernere API ist und der Nachfolger von OpenGL ist. [@googleinc.ImpellerRenderingEngine]