2024-03-22 01:37:32 +01:00
|
|
|
## 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.
|
|
|
|
|
2024-03-22 03:20:50 +01:00
|
|
|
\pagebreak
|
|
|
|
|
2024-03-22 01:37:32 +01:00
|
|
|
\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.
|
|
|
|
|
2024-03-22 03:20:50 +01:00
|
|
|
\pagebreak
|
|
|
|
|
2024-03-22 01:37:32 +01:00
|
|
|
\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}).
|
2024-03-22 03:20:50 +01:00
|
|
|
|
|
|
|
\pagebreak
|
2024-03-22 01:37:32 +01:00
|
|
|
|
|
|
|
\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}
|
|
|
|
|
|
|
|
<!-- \begin{figure}[h]
|
|
|
|
\caption{Example caption}
|
|
|
|
\centering
|
|
|
|
\begin{minipage}{7cm}
|
|
|
|
\dirtree{%
|
|
|
|
.1 benchmark/.
|
|
|
|
.2 business/.
|
|
|
|
.3 flame/.
|
|
|
|
.4 rogue\char`\_shooter/.
|
|
|
|
.4 sprite\char`\_renderer/.
|
|
|
|
.2 data/.
|
|
|
|
.3 models/.
|
|
|
|
.4 benchmark.dart.
|
|
|
|
.4 ember.dart.
|
|
|
|
.3 benchmarks\char`\_list.dart.
|
|
|
|
.2 presentation/.
|
|
|
|
.3 widgets/.
|
|
|
|
.4 benchmark\char`\_card.dart.
|
|
|
|
.3 benchmark\char`\_screen.dart.
|
|
|
|
.3 map\char`\_benchmark\char`\_screen.dart.
|
|
|
|
.3 rogue\char`\_shooter\char`\_screen.dart.
|
|
|
|
.3 sprite\char`\_benchmark\char`\_screen.dart.
|
|
|
|
.3 video\char`\_benchmark\char`\_screen.dart.
|
|
|
|
.3 vsync\char`\_benchmark\char`\_screen.dart.
|
|
|
|
}
|
|
|
|
\end{minipage}
|
|
|
|
\end{figure} -->
|