# 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.

Mit dem zusätzlichen Testgerät Raspberry Pi Zero 2W konnte gezeigt werden,
dass Flutter auch auf schwächeren Geräten lauffähig ist und die Anwendung
läuft auf diesem Gerät auch weitesgehend flüssig, kam jedoch hin und wieder
an seine Grenzen. Der Leistungsbereich eines Pi Zero 2W scheint hier also im
Bereich der minimalen Anforderungen von Flutter zu liegen. Für Anwendungen
ohne stark aufwendige Animationen und an kleinen Displays mit einer niedrigen
Auflösung ist der Pi Zero 2W durchaus noch gut zur Nutzung geeignet. In der
Programmierung sollte auch besser versucht werden den Verbrauch vom Arbeitsspeicher
gering zu halten und Sicherheitsmaßnahmen treffen, welche verhindern, dass
der Arbeitsspeicher überläuft und die Anwendung abstürzt.

## 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]

### Nutzung von Rust

Mit dem Projekt "_rinf_" (Rust in Flutter) ist es möglich ohne
großen Aufwand Rust Code in Flutter zu nutzen [@CunaristRinf2024]. Rust ist eine
sehr performante Programmiersprache die genutzt werden könnte
um die Leistung von Flutter im eingebetteten Bereich zu verbessern,
indem Funktionen die viel Rechenleistung benötigen in Rust
implementiert werden. Besonders bei leistungsschwachen Geräten
wie dem Raspberry Pi Zero 2W könnte dies die Leistung
verbessern. Die Nutzung von Rinf mit Yocto müsste dazu
getestet werden.

# Schlussfolgerung
