6.8 KiB
Benchmark Feature
Das Benchmark Feature zeigt auf der Startseite einen Raster aus Karten mit den verschiedenen Benchmark Tests, welche ausgewählt werden können (siehe Abbildung \ref{benchmark}). Im folgenden wird jeder Benchmark Test genauer beschrieben.
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Die Startseite des Benchmark Features} \label{benchmark} \centering \shadowimage[width=7cm]{./assets/screenshots/benchmark.png} \end{figure}
\begin{figure}[H] \caption{Flame Sprite Rendering Benchmark mit Ergebnis} \label{benchmarkSpriteFinished} \centering \shadowimage[width=7cm]{./assets/screenshots/benchmarkSpriteFinished.png} \end{figure}
\end{multicols}
Flame Sprite Rendering Benchmark
Der "Flame Sprite Rendering Benchmark" testet die Fähigkeit der Engine, eine große Anzahl von Sprites zu rendern. Der Test basiert auf einen offiziellen Benchmark der Flame Engine, welcher auf GitHub verfügbar ist [@FlameExamplesLib]. In diesem kann der Nutzer auf eine beliebige Position auf dem Bildschirm klicken und pro Klick werden 100 weitere animierte Sprites hinzugefügt. Dabei kann die Framerate beobachtet werden. Das Problem bei diesem Test ist, dass der Test nicht automatisiert ist und 100 Animationen pro Klick eine hohe Anzahl ist, besonders für leistungsschwache Geräte wie dem Raspberry Pi. Daher wurde der Test so angepasst, dass mit einer Verzögerung von 50 Millisekunden automatisch für 30 Minuten ein weiterer Sprite immer dann hinzugefügt wird, wenn die Framerate über 59 liegt. Am Ende des Tests wird die Anzahl der Animationen ausgegeben, die in den 30 Minuten hinzugefügt werden konnten. Dies ist in Abbildung \ref{benchmarkSpriteFinished} zu sehen.
Der Benchmark Test ist aus verschiedenen Gründen nach mehreren Versuchen so entstanden. Ohne die Verzögerung von 50 Millisekunden werden zu viele Sprites zu schnell hinzugefügt, was dazu führt, dass das Ergebnis immer wieder große Schwankungen aufweist. Ein Grund dafür ist, dass in der kurzen Zeit so schnell Sprites hinzugefügt werden, dass die Framerate Anzeige nicht mehr hinterherkommt und zufällig an verschiedenen Stellen das Limit erreicht. Mit der Verzögerung fiel dann auf, dass die Render Engine sich immer wieder nach einer gewissen Zeit von wenigen Sekunden oder manchmal bis zu ungefähr einer Minute wieder einfangen kann. Das bedeutet, dass die Framerate dann wieder für einen kurzen Moment über 59 Bilder pro Sekunden erreicht. Der Test wurde deswegen auf 30 Minuten gesetzt, da in diesem Zeitraum sicherer der tatsächlich höchste Wert erreicht wird. In den Ergebnissen konnte auch bewiesen werden, wie der Test sehr genau immer sehr ähnliche Ergebnisse liefert und so die Leistung der Render Engine von Flutter gut getestet werden kann.
Rogue Shooter Benchmark
Der "Rogue Shooter Benchmark" ist ein weiterer Leistungstest mit der Flame Engine, welcher auch auf einen offiziellen Benchmark der Flame Engine basiert und auf GitHub verfügbar ist [@FlameExamplesGames].
Dieser Test ist ein Demo Spiel, welches nicht weiter im Code verändert wurde von seiner Quelle. Im Spiel bewegt man das Raumschiff per Touch Steuerung und schießt auf eine hohe Anzahl von anderen Raumschiffen, dabei wird nur bei der Bewegung geschossen. Mit dem Test wird kein Ergebnis automatisch ausgegeben, sondern man kann interaktiv die Reaktionszeit und die Framerate beobachten. Das Ergebnis ist so nicht ganz genau, aber das muss es hier nicht sein, da es nur um einen groben Stresstest geht bei dem visuell beobachtet werden kann, ob die Framerate stabil bleibt und ob das Raumschiff flüssig bewegt werden kann (siehe Abbildung \ref{benchmarkFlame}).
VSync Test
Der "VSync Test" testet aus, ob es so genannte "Tearing" Effekte gibt, welche entstehen, wenn die Framerate nicht mit der Bildwiederholrate des Bildschirms synchronisiert ist. Im Test werden schwarze Rechtecke von rechts nach links über den Bildschirm bewegt (siehe Abbildung \ref{benchmarkVsync}). Falls es zu Tearing Effekten kommt, kann man das an den Rechtecken beobachten, dass diese dann nicht mehr flüssig bewegt werden. Der Test nutzt zur Grafikkartenbeschleunigung einen Shader, welcher auf der bekannten Shader Toy Webseite verfügbar ist [@beautypiShadertoy]. Dadurch wird der Test durch die Grafikkarte beschleunigt. Flutter erlaubt es normalen GLSL Shader Code in der Engine zu verwenden, der Code muss dazu nur manchmal leicht angepasst werden [@googleinc.WritingUsingFragment]. Der Shader Code von Shader Toy musste nur leicht angepasst werden.
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Der Rogue Shooter Benchmark} \label{benchmarkFlame} \centering \shadowimage[width=7cm]{./assets/screenshots/benchmarkFlame.png} \end{figure}
\begin{figure}[H] \caption{Der VSync Test} \label{benchmarkVsync} \centering {\shadowimage[width=7cm]{./assets/screenshots/benchmarkVsync.png}} \end{figure}
\end{multicols}
Video Benchmark
Im Video Benchmark kann ein Video in den Auflösungen 720p, 1080p und 4K abgespielt werden. Dieser Test funktioniert nur mit dem Flutter-Pi Embedder, da zum Zeitpunkt der Implementierung nur für Flutter-Pi eine einfache Video Unterstützung durch das flutterpi_gstreamer_video_player Paket verfügbar war [@Flutter_packagesPackagesFlutterpi_gstreamer_video_player]. Im Test kann man visuell beobachten, ob das Video flüssig abgespielt werden kann.
Simple Tiles Map Benchmark
Der "Simple Tiles Map Benchmark" testet die Fähigkeit der Engine, eine Karte mit einer hohen Anzahl von Bildern zu rendern, welche als Kacheln in einem Raster aneinandergesetzt werden. Es wurde hierfür das bestehendes Paket simple_tiles_map verwendet, der Code ist auf GitHub verfügbar [@danielquisbertDanielquisbertSimple_tiles_map2023]. Im Test kann man visuell beobachten, ob die Karte flüssig bewegt werden kann und wie schnell die Tiles aus dem Internet geladen werden können (siehe Abbildung \ref{benchmarkMap}).
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Der Video Benchmark} \label{benchmarkVideo} \centering \shadowimage[width=7cm]{./assets/screenshots/benchmarkVideo.png} \end{figure}
\begin{figure}[H] \caption{Der Map Benchmark} \label{benchmarkMap} \centering \shadowimage[width=7cm]{./assets/screenshots/benchmarkMap.png} \end{figure}
\end{multicols}