handle EGL errors

for now we just restart the runtime.

bug: 7225248
Change-Id: I7638ffe82075a4db9e7e6f9e35cf48afcb5a387a
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::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 {