Android GL deadlock timeout error
CRASH
在 PBR&IBL 的开发过程中,在 Linux 验证程序运行正常后,移植到 Android 平台,发现程序 crash. 程序的逻辑是,响应页面某按钮点击事件,在gl线程加载渲染模型以及做PBR和IBL的预计算工作,之后渲染模型以及场景。程序 crash 的地点在 IBL 的所有预计算结束后,在第一次渲染调用之前,而且与此同时没有任何的 OpenGL ERROR. 具体导致 crash 的函数是 SurfaceTexture.updateTexImage()
这个 SurfaceTexture 是从摄像头获取数据的,与主要的预计算以及渲染没有任何关系,看起来十分诡异。错误信息如下:
Adreno-GSL: <gsl_ldd_control:548>: ioctl fd 74 code (IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID) failed: errno 35 Resource deadlock would occur
ioctl fd 60 code 0xc040094a (IOCTL_KGSL_GPU_COMMAND) failed: errno 35 Resource deadlock would occur
syncForReleaseLocked: error creating EGL fence: 0x3003
at android.graphics.SurfaceTexture.nativeUpdateTexImage(Native Method)
错误信息看了一头雾水吧。
DEBUG
调试:首先,Android 程序在没有 PBR 时运行一切正常,肯定是新增的代码导致