【发布时间】:2012-01-17 09:52:56
【问题描述】:
我正在编写的动态壁纸应用程序遇到一些问题。
我正在使用 OpenGL 1.0 进行渲染。总的来说,我得到的表现相当不错。在三星 Galaxy S2 (2.3.4) 上,我可以在没有帧限制的情况下获得 60 FPS。
但有时我会得到一些比其他帧大得多的帧(假设正常帧为 33 毫秒,尖峰帧约为 70-100 毫秒)。这会定期发生,大约每秒一次。
我的代码每帧都进行完全相同的处理,因此这种行为是异常的。看起来我的线程由于某种原因被操作系统交换/延迟,或者只是 VM 在某个时候开始执行较慢。
减速不是由于 GPU 处理,因为 eglSwapBuffers 从不等待。我也很确定我的进程不会导致 GC 运行,因为我确保循环中没有任何短期对象(在 DDMS 分配跟踪器中验证)。
有趣的是,如果我将手指放在屏幕上,帧时间的尖峰往往会变得相当小。好像操作系统因此提高了进程的优先级。
解决这个问题非常重要,因为当出现尖峰时我的动画看起来很糟糕。
有没有其他人遇到过同样的问题?任何有关可能导致问题的提示也将不胜感激。
【问题讨论】:
标签: java android performance opengl-es