Анализ Logcat
Здесь происходит сбой вашего кода EglManager.cpp :
void EglManager::damageFrame(const Frame& frame, const SkRect& dirty) {
#ifdef EGL_KHR_partial_update
if (EglExtensions.setDamage && mSwapBehavior == SwapBehavior::BufferAge) {
EGLint rects[4];
frame.map(dirty, rects);
if (!eglSetDamageRegionKHR(mEglDisplay, frame.mSurface, rects, 1)) {
LOG_ALWAYS_FATAL("Failed to set damage region on surface %p, error=%s",
(void*)frame.mSurface, egl_error_str());
}
}
#endif
}
Вызывается из SkiaOpenGLPipeline.cpp :
SkiaOpenGLPipeline::draw //method
mEglManager.damageFrame(frame, dirty);
Почему?
Кажется, у вас может быть 'Failed to set damage region on surface
', вероятно, после onResume()
из screen rotation
или onPause()
в вашем Activity
.См. fixing-common-android-lifecycle-questions
Исправления
Я начинал получать этот сбой после обновления до Oreo
, каждый раз, когда начинал свойapp, с сообщением "Failed to set damage region on
surface
", за которым следуют все эти строки о libhwui.so
и EglManager
. И оказалось, что по какой-то неясной причине это было каким-то образом вызвано совершенно не связанной проблемой в моем приложении ( слишком много открытых файлов [забыл закрыть их]).После исправления этой ошибки больше не происходит сбоев на EglManager
.[ также обратите внимание, что сбои происходят, только если включено аппаратное ускорение ] Ссылка: issetracker.google.com {Issue 70259031}
См. Также: eglCreateWindowSurface {SO problem} , Ведение журнала , native-аварийные завершения при аварийном завершении в консоли разработчика с oreo-8-1 {SO problem} , аппаратное ускорение , opengl , GLSurfaceView