Aproveite milhões dos mais recentes aplicativos, jogos, músicas, filmes, TV, livros, revistas e muito mais para Android. A qualquer hora, em qualquer lugar, em todos os seus dispositivos.
Este aplicativo é direcionado a desenvolvedores ou qualquer pessoa curiosa sobre as diferenças de desempenho entre OpenGL e Canvas. Especificamente, ele mede o desempenho do desenho de sprites 2D explicitamente usando OpenGL ES 2.0 com um híbrido de Java e C, e do desenho de sprites 2D usando Canvas com Java.
Quando terminar de executar um teste, você poderá ver uma análise de benchmark do desempenho pressionando o botão Voltar do dispositivo.
É semelhante ao Sprite Method Test de Chris Pruett, mas é atualizado para OpenGL ES 2.0. Seu Sprite Method Test executa o ES 1.0 desatualizado e está quebrado no Jelly Bean (por causa do buffer triplo).
Este aplicativo funciona em todos os dispositivos compatíveis com OpenGL ES 2.0.
Isso é livre de anúncios e de problemas.
Mais detalhes:
Especificamente, este aplicativo mede o desempenho do desenho de sprites 2D explicitamente usando OpenGL ES 2.0 com um híbrido de Java e C, e do desenho de sprites 2D usando Canvas com Java.
Em cada quadro:
A cor de fundo muda ligeiramente, pulsando entre o vermelho e o branco.
Cada sprite move uma quantidade aleatória (Gaussiana). Se o centro de um sprite ultrapassar uma borda da tela, o sprite se moverá para um local aleatório da tela.
O teste Canvas usa SurfaceView e Canvas.drawBitmap(). Todos os cálculos são feitos em Java (usando Random.nextGaussian() e Random.nextFloat()) em um float[].
Os testes do OpenGL ES 2.0 usam um GLSurfaceView em Java. O cálculo é feito em C (usando drand48() e um equivalente C embutido do algoritmo Gaussiano de Java) em um float nativo[]. O desenho também é feito em C, usando glDrawArrays(GL_POINTS, ...). Os métodos C (NDK) são chamados a cada quadro de Java por meio do JNI.
Todos os testes têm sobrecarga idêntica às operações de criação de perfil em Java.
Estatísticas:
As informações de FPS são sobre quando os quadros são realmente postados na tela (tecnicamente, o SurfaceFlinger).
As informações do Draw são sobre o tempo que leva para emitir (e glFlush() + glFinish(), no teste OpenGL) os comandos de desenho. Não conta o tempo para realmente virar os buffers da tela.
As informações de push (somente VBO) são sobre o tempo que leva para enviar os dados do vértice para o buffer da GPU. Geralmente, isso será <0,5ms (que é arredondado para 0,000s) por quadro. Ao usar o teste OpenGL não VBO, esse tempo é essencialmente incluído no tempo de sorteio. Em aplicações práticas, pode demorar mais para enviar dados para a GPU. Este exemplo contém apenas um VBO (ou array Vertex) com 2 floats por sprite. Aplicações práticas teriam mais dados (como informações de tamanho e textura).
As informações do Calc referem-se ao tempo necessário para calcular a cor de fundo de um quadro e a nova posição de cada sprite. Quando o JIT está habilitado, o tempo de cálculo é comparável entre o teste Java (Canvas) e os testes nativos (Open GL), mas com o JIT desabilitado, o Java sofre uma penalidade significativa.
Leia mais