OpenGL ES 2.0 を使用して、さまざまな Android デバイスでレンダリング パフォーマンスを測定したいと考えています。これを行うには、画面のサイズの (テクスチャ付きの) クワッドを描画し、それを N 回描画します。基本的な考え方は次のようになります。
start = System.currentTimeMillis();
for (int i = 0; i < N; ++i) {
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, v_n);
}
GLES20.glFinish();
time = System.currentTimeMillis()-start;
実際には、値を保存し、一定量のレンダー パスの平均を測定しますが、それは問題ではありません。このアプローチは、私のデバイス (Samsung Galaxy SIII) と HTC Legend でうまくいくように見えました。ただし、Samsung Galaxy S は、glFinish()
レンダリング速度が非常に激しい (ただし誤り) という結果を無視しているようです。一部のデバイスは実際には をリッスンしないことを以前に読みましglFinish()
たが、そうでない場合、レンダリング速度を測定するにはどうすればよいですか?
また、インターネット全体で見た別の方法も試しました (主に FPS の測定のコンテキストで)。
@Override
public void onDrawFrame(GL10 unused) {
time = System.currentTimeMillis()-start;
//store time somewhere
start = System.currentTimeMillis();
...
//rendering here
...
}
onDrawFrame(..)
ここでは、前のレンダリングが完了しない限り呼び出されないという考えで、次の呼び出しの開始時の時間を測定します。しかし、これは同じ問題を引き起こします。
別の方法はありますか?それとも、パフォーマンス測定のためにこれらのデバイスを避けるべきですか?