surfaceflinger: use RE::Surface in DisplayDevice

This allows us to eliminate all direct use of EGL from
DisplayDevice.

Test: SurfaceFlinger_test
Change-Id: Ic7b006dfd8e3f067625896c3020b55914b9fc65b
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index 2143c78..994d857 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -183,8 +183,17 @@
     return mEGLConfig;
 }
 
-bool RenderEngine::setCurrentSurface(EGLSurface surface) {
-    return eglMakeCurrent(mEGLDisplay, surface, surface, mEGLContext) == EGL_TRUE;
+bool RenderEngine::setCurrentSurface(const RE::Surface& surface) {
+    bool success = true;
+    EGLSurface eglSurface = surface.getEGLSurface();
+    if (eglSurface != eglGetCurrentSurface(EGL_DRAW)) {
+        success = eglMakeCurrent(mEGLDisplay, eglSurface, eglSurface, mEGLContext) == EGL_TRUE;
+        if (success && surface.getAsync()) {
+            eglSwapInterval(mEGLDisplay, 0);
+        }
+    }
+
+    return success;
 }
 
 void RenderEngine::resetCurrentSurface() {