安卓OpenGL|ES卡顿(可能是CPU占用率过高。正在尝试重新启动。)

37

前一段时间我遇到了一个问题,使用eglSwapBuffers会导致手机冻结,并在设备日志中显示以下消息:

W/SharedBufferStack( 1110): waitForCondition(LockCondition) timed out (identity=28, status=0). CPU may be pegged. trying again.

我在网上看到了讨论这个问题的文章,但是唯一一个对我有影响的解决方案是在 eglSwapBuffers 之后调用 glFinish。然而,这个解决方案会使帧率下降10-20,这远不可接受。

已经有人提出了问题,可以在这里找到。

有人评论说使用正方形纹理可以消除这个问题。最初我以为他指的是2的幂次方纹理,但在确认我没有使用任何非2的幂次方纹理并且问题仍未解决后,我开始认为他可能实际上是指具有相同宽度和高度的纹理?

我正在HTC Desire上进行测试,搭载Android 2.3.3系统。有人评论说未来版本应该已经解决了这个问题,但是2.3.3安装在如此多的设备上,我们不能忽视它。

无论如何,有人对此有什么想法吗?我们即将发布一个游戏,这个问题威胁着我们的计划。


2
可能是你的驱动程序出现了问题。 - robermorales
1
这个人在另一个gl swapbuffers上遇到了问题,并且在评论中提出了一种可能有帮助的缓解措施:https://dev59.com/2WnWa4cB1Zd3GeqP3bhj。 - Yakk - Adam Nevraumont
1
尝试运行 dumpsys SurfaceFlinger 并查看 eglSwapbuffers() 报告的内容...与您的测量结果进行比较。 - Shark
1个回答

1

我也遇到过这个问题,我曾经尝试重新安装该应用程序,这对我有用。如果不行,那么就简单地重启您的设备。这个问题与OpenGLES的内部问题有关。您可以参考此链接:Android "cpu may be pegged" bug


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接