Я получаю много аварий в EAGLContext presentRenderbuffer
на iOS 11, но только на iPhone 6/6 + и старше.
По этот пост, я думаю, что мы уже исключили проблемы, связанные с VBO, переписывая все, чтобы не использовать VBO/VAO, но авария не была зафиксирована этим.
Есть еще несколько вопросов по поводу этого, но нет решения - кто-нибудь еще видел всплеск в этом сбое и смог его решить?
TL; ДР:
Вот что мы знаем до сих пор:
- Авария относится к iOS11, iPhone 5S/6/6+. Это не происходит на 6S и выше.
- Ядро стека OpenGL возвращает gpus_ReturnGuiltyForHardwareRestart
- Это происходит, когда мы пытаемся вызвать [EAGLContext presentRenderbuffer] из CAEAGLLayer
- У нас нет репрограммы.
Что мы пробовали до сих пор:
- Удалите любую ссылку на VBO/VAO в нашем стеке рендеринга. Не помогло.
- Мы попробовали репродукцию с большим спектром сценариев рисования (вращение, изменение размера, фон/передний план). Не повезло.
- Насколько мы можем судить, в нашей логике приложений нет ничего конкретного в отношении семейства iPhone 6 и семейства iPhone 6S.
Некоторые подсказки (которые могут быть релевантными, но не обязательно):
- Мы знаем, что когда текущийRenderBuffer вызывается из основного потока, и некоторое CATransaction происходит одновременно в основном потоке, скорость сбоя увеличивается.
- Когда presentRenderBuffer вызывается в основном потоке (вместе со всем контуром чертежа), скорость сбоя идет немного вниз, но не сильно.
- Существенный кусок (~ 20%) сбоев возникает, когда слой выходит из экрана и/или выходит из иерархии представления.
Вот трассировка стека:
libGPUSupportMercury.dylib gpus_ReturnGuiltyForHardwareRestart
1 AGXGLDriver gldUpdateDispatch
2 libGPUSupportMercury.dylib gpusSubmitDataBuffers
3 AGXGLDriver gldUpdateDispatch
4 GLEngine gliPresentViewES_Exec
5 OpenGLES -[EAGLContext presentRenderbuffer:]