Genießen Sie Millionen der neuesten Android-Apps, Spiele, Musik, Filme, TV, Bücher, Zeitschriften und mehr. Jederzeit, überall und auf Ihren Geräten.
Diese App richtet sich an Entwickler oder alle, die sich für Leistungsunterschiede zwischen OpenGL und Canvas interessieren. Insbesondere wird die Leistung beim expliziten Zeichnen von 2D-Sprites unter Verwendung von OpenGL ES 2.0 mit einem Hybrid aus Java und C und beim Zeichnen von 2D-Sprites unter Verwendung von Canvas mit Java gemessen.
Wenn Sie mit der Durchführung eines Tests fertig sind, können Sie eine Benchmark-Analyse der Leistung anzeigen, indem Sie die Zurück-Taste des Geräts drücken.
Es ähnelt Sprite Method Test von Chris Pruett, wurde jedoch für OpenGL ES 2.0 aktualisiert. Sein Sprite-Methodentest läuft mit der veralteten ES 1.0 und ist bei Jelly Bean fehlerhaft (aufgrund der dreifachen Pufferung).
Diese App funktioniert auf allen Geräten, die OpenGL ES 2.0 unterstützen.
Dies ist werbefrei und nörgelfrei.
Weitere Details:
Insbesondere misst diese App die Leistung des expliziten Zeichnens von 2D-Sprites mithilfe von OpenGL ES 2.0 mit einer Mischung aus Java und C und des Zeichnens von 2D-Sprites mithilfe von Canvas mit Java.
Auf jedem Frame:
Die Hintergrundfarbe verändert sich leicht und pulsiert zwischen Rot und Weiß.
Jedes Sprite bewegt sich um einen zufälligen (Gaußschen) Betrag. Wenn die Mitte eines Sprites über den Rand des Bildschirms hinausgeht, bewegt sich das Sprite an eine zufällige Position auf dem Bildschirm.
Der Canvas-Test verwendet SurfaceView und Canvas.drawBitmap(). Alle Berechnungen werden in Java (mit Random.nextGaussian() und Random.nextFloat()) auf einem float[] durchgeführt.
Die OpenGL ES 2.0-Tests verwenden eine GLSurfaceView in Java. Die Berechnung erfolgt in C (mit drand48() und einem Inline-C-Äquivalent des Gaußschen Algorithmus von Java) auf einem nativen float[]. Das Zeichnen erfolgt ebenfalls in C mit glDrawArrays(GL_POINTS, ...). C-Methoden (NDK) werden in jedem Frame von Java über das JNI aufgerufen.
Alle Tests haben den gleichen Aufwand an Profilierungsvorgängen in Java.
Statistiken:
Bei den FPS-Informationen geht es darum, wann Frames tatsächlich auf dem Bildschirm gepostet werden (technisch gesehen der SurfaceFlinger).
Bei den Draw-Informationen geht es um die Zeit, die zum Ausgeben (und glFlush() + glFinish() im OpenGL-Test) der Zeichenbefehle benötigt wird. Die Zeit, die zum tatsächlichen Umdrehen der Bildschirmpuffer benötigt wird, wird nicht gezählt.
Die Push-Informationen (nur VBO) beziehen sich auf die Zeit, die benötigt wird, um die Vertex-Daten in den GPU-Puffer zu übertragen. Dies beträgt häufig weniger als 0,5 ms (was auf 0,000 s gerundet wird) pro Frame. Bei Verwendung des Nicht-VBO-OpenGL-Tests ist diese Zeit stattdessen im Wesentlichen in der Zeichenzeit enthalten. In praktischen Anwendungen kann es länger dauern, Daten an die GPU zu übertragen. Dieses Beispiel enthält nur ein VBO (oder Vertex-Array) mit 2 Floats pro Sprite. Praktische Anwendungen würden über mehr Daten verfügen (z. B. Größen- und Texturinformationen).
Die Berechnungsinformationen beziehen sich auf die Zeit, die zum Berechnen der Hintergrundfarbe eines Rahmens und der neuen Position jedes Sprites benötigt wird. Wenn JIT aktiviert ist, ist die Berechnungszeit zwischen dem Java-Test (Canvas) und den nativen Tests (Open GL) vergleichbar, aber wenn JIT deaktiviert ist, erleidet Java einen erheblichen Nachteil.
Mehr lesen