summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/surfaceflinger/DisplayDevice.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 81ce27e..56852da 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -205,27 +205,34 @@ void DisplayDevice::flip(const Region& dirty) const
}
void DisplayDevice::swapBuffers(HWComposer& hwc) const {
+ EGLBoolean success = EGL_TRUE;
if (hwc.initCheck() != NO_ERROR) {
// no HWC, we call eglSwapBuffers()
- eglSwapBuffers(mDisplay, mSurface);
+ success = eglSwapBuffers(mDisplay, mSurface);
} else {
// We have a valid HWC, but not all displays can use it, in particular
// the virtual displays are on their own.
// TODO: HWC 1.2 will allow virtual displays
if (mType >= DisplayDevice::DISPLAY_VIRTUAL) {
// always call eglSwapBuffers() for virtual displays
- eglSwapBuffers(mDisplay, mSurface);
+ success = eglSwapBuffers(mDisplay, mSurface);
} else if (hwc.supportsFramebufferTarget()) {
// as of hwc 1.1 we always call eglSwapBuffers if we have some
// GLES layers
if (hwc.hasGlesComposition(mType)) {
- eglSwapBuffers(mDisplay, mSurface);
+ success = eglSwapBuffers(mDisplay, mSurface);
}
} else {
// HWC doesn't have the framebuffer target, we don't call
// eglSwapBuffers(), since this is handled by HWComposer::commit().
}
}
+
+ // TODO: we should at least handle EGL_CONTEXT_LOST, by recreating the
+ // context and resetting our state.
+ LOG_ALWAYS_FATAL_IF(!success,
+ "eglSwapBuffers(%p, %p) failed with 0x%8x",
+ mDisplay, mSurface, eglGetError());
}
void DisplayDevice::onSwapBuffersCompleted(HWComposer& hwc) const {