수백만 개의 최신 Android 앱, 게임, 음악, 영화, TV, 책, 잡지 등을 즐겨보세요. 언제 어디서나 모든 기기에서 가능합니다.
이 앱은 개발자 또는 OpenGL과 Canvas 간의 성능 차이에 대해 궁금한 모든 사람을 대상으로 합니다. 구체적으로, Java와 C가 혼합된 OpenGL ES 2.0을 사용하여 명시적으로 2D 스프라이트를 그리는 성능과 Java와 Canvas를 사용하여 2D 스프라이트를 그리는 성능을 측정합니다.
테스트 실행이 끝나면 장치의 뒤로 버튼을 눌러 성능에 대한 벤치마크 분석을 볼 수 있습니다.
Chris Pruett의 Sprite Method Test와 유사하지만 OpenGL ES 2.0용으로 업데이트되었습니다. 그의 Sprite Method Test는 오래된 ES 1.0을 실행하며 Jelly Bean에서는 작동하지 않습니다(3중 버퍼링으로 인해).
이 앱은 OpenGL ES 2.0을 지원하는 모든 장치에서 작동합니다.
광고도 없고 잔소리도 없습니다.
자세한 내용:
특히 이 앱은 Java와 C가 혼합된 OpenGL ES 2.0을 사용하여 명시적으로 2D 스프라이트를 그리는 성능과 Java와 Canvas를 사용하여 2D 스프라이트를 그리는 성능을 측정합니다.
모든 프레임에서:
배경색이 빨간색과 흰색 사이를 오가며 약간 이동합니다.
각 스프라이트는 무작위(가우스) 양만큼 이동합니다. 스프라이트의 중심이 화면 가장자리를 넘어가면 스프라이트는 임의의 화면 위치로 이동합니다.
Canvas 테스트는 SurfaceView 및 Canvas.drawBitmap()을 사용합니다. 모든 계산은 float[]에서 Java(Random.nextGaussian() 및 Random.nextFloat() 사용)로 수행됩니다.
OpenGL ES 2.0 테스트는 Java에서 GLSurfaceView를 사용합니다. 계산은 기본 float[]에서 C(drand48() 및 Java의 가우스 알고리즘에 해당하는 인라인 C 사용)로 수행됩니다. 그리기는 glDrawArrays(GL_POINTS, ...)를 사용하여 C에서도 수행됩니다. C(NDK) 메소드는 JNI를 통해 Java에서 매 프레임마다 호출됩니다.
모든 테스트에는 Java의 프로파일링 작업과 동일한 오버헤드가 있습니다.
통계:
FPS 정보는 프레임이 실제로 화면(기술적으로는 SurfaceFlinger)에 게시되는 시점에 관한 것입니다.
Draw 정보는 그리기 명령을 실행(OpenGL 테스트에서는 glFlush() + glFinish())하는 데 걸리는 시간에 관한 것입니다. 실제로 화면 버퍼를 뒤집는 데 걸리는 시간은 계산되지 않습니다.
푸시 정보(VBO에만 해당)는 정점 데이터를 GPU 버퍼로 푸시하는 데 걸리는 시간에 대한 것입니다. 이는 프레임당 <.5ms(0.000초로 반올림)인 경우가 많습니다. VBO가 아닌 OpenGL 테스트를 사용하는 경우 이 시간은 기본적으로 그리기 시간에 포함됩니다. 실제 애플리케이션에서는 데이터를 GPU로 푸시하는 데 시간이 더 오래 걸릴 수 있습니다. 이 예제에는 스프라이트당 2개의 부동 소수점이 있는 하나의 VBO(또는 Vertex 배열)만 포함되어 있습니다. 실제 응용 프로그램에는 더 많은 데이터(예: 크기 및 질감 정보)가 있습니다.
Calc 정보는 프레임의 배경색과 각 스프라이트의 새 위치를 계산하는 데 걸리는 시간에 관한 것입니다. JIT가 활성화되면 계산 시간은 Java(Canvas) 테스트와 기본(Open GL) 테스트 간에 비슷하지만 JIT가 비활성화되면 Java는 상당한 불이익을 받습니다.
더 읽어보세요