eglSwapBuffers()有时花费比其他帧长30倍的时间

我正在Android-9 Xiaomi mi A3设备上运行OpenGL ES3.2应用程序。

框架断断续续,因为应用程序有时会冻结一会儿。

借助我的profiler,我已经确定暂停发生在eglSwapBuffers()通话中。

eglSwapBuffers()有时花费比其他帧长30倍的时间

现在,通常,eglSwapBuffers()耗时约0.7ms。很好,因为对于60Hz帧,我有16.6毫秒。

但是在上面运行的配置文件中,当缓冲区交换花费的时间多了 30 时,它显示了停顿。

还请注意:这是壁钟时间,cpu时间似乎很好,因此,不是CPU繁忙,而是CPU等待。 (可能正在等待GPU。)

发生这种情况的框架,与其他框架没有什么不同:没有额外的图纸,没有额外的负荷。

OpenGL上下文非常原始:

  • 24位深度
  • 32位RGBA
  • 没有模具
  • ES 3.2上下文
  • Adreno 610 GPU
I/hexa    (31916): GL_VENDOR   Qualcomm
I/hexa    (31916): GL_RENDERER Adreno (TM) 610
I/hexa    (31916): GL_VERSION  OpenGL ES 3.2 V@378.0 (GIT@6cbc6c9,Ib736691963) (Date:04/25/19)

我制作了许多其他的Android OpenGL应用程序,但都没有这种行为。

该应用基于NDK,使用Nativityactivity类,还使用android_native_app_glue.h

这是在电话充电时发生的,所以我怀疑这可以节省一些能源。

更新:我在eglSwapBuffers()之前添加了glFlush(),并且延迟转移到了刷新。因此,确实是在这种情况下,即使场景大小没有改变,突然也执行了许多额外的OpenGL工作。

wenhaoyu123 回答:eglSwapBuffers()有时花费比其他帧长30倍的时间

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3134263.html

大家都在问