我想使用 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;
实际上,我存储这些值并测量一定数量的渲染通道的平均值,但这不是问题。这种方法似乎很适合我的设备(三星 Galaxy SIII)和 HTC Legend。然而,三星 Galaxy S 似乎忽略了glFinish()
由此产生的相当激烈(但错误)的渲染速度。我之前读过一些设备真的不听glFinish()
,但如果不是这样,我如何测量渲染速度?
我还尝试了我在互联网上看到的另一种方式(主要是在测量 FPS 的情况下):
@Override
public void onDrawFrame(GL10 unused) {
time = System.currentTimeMillis()-start;
//store time somewhere
start = System.currentTimeMillis();
...
//rendering here
...
}
在这里,您测量下一次调用开始时的时间,并onDrawFrame(..)
认为除非先前的渲染完成,否则不会调用它。但这会导致同样的问题。
还有其他方法吗?还是我应该避免使用这些设备进行性能测量?