debug.egl.finish can be used to force a glFinish() when eglSwapBuffers() is called

this debug property is evaludated at eglInitialize() time.

Change-Id: Ie439e4aac87f7fdc6ab2add86183d6d042f3ee8b
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index a1bd82d..8bfa16d 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -30,6 +30,7 @@
 
 #include <cutils/log.h>
 #include <cutils/atomic.h>
+#include <cutils/compiler.h>
 #include <cutils/properties.h>
 #include <cutils/memory.h>
 
@@ -732,6 +733,17 @@
 #endif
 
     egl_surface_t const * const s = get_surface(draw);
+
+    if (CC_UNLIKELY(dp->finishOnSwap)) {
+        uint32_t pixel;
+        egl_context_t * const c = get_context( egl_tls_t::getContext() );
+        if (c) {
+            // glReadPixels() ensures that the frame is complete
+            s->cnx->hooks[c->version]->gl.glReadPixels(0,0,1,1,
+                    GL_RGBA,GL_UNSIGNED_BYTE,&pixel);
+        }
+    }
+
     return s->cnx->egl.eglSwapBuffers(dp->disp.dpy, s->surface);
 }
 
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index f1e493d..b80afd6 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -22,6 +22,7 @@
 #include "egl_tls.h"
 #include "egl_impl.h"
 #include "Loader.h"
+#include <cutils/properties.h>
 
 // ----------------------------------------------------------------------------
 namespace android {
@@ -66,7 +67,7 @@
 egl_display_t egl_display_t::sDisplay[NUM_DISPLAYS];
 
 egl_display_t::egl_display_t() :
-    magic('_dpy'), refs(0) {
+    magic('_dpy'), finishOnSwap(false), refs(0) {
 }
 
 egl_display_t::~egl_display_t() {
@@ -232,6 +233,12 @@
 
     egl_cache_t::get()->initialize(this);
 
+    char value[PROPERTY_VALUE_MAX];
+    property_get("debug.egl.finish", value, "0");
+    if (atoi(value)) {
+        finishOnSwap = true;
+    }
+
     refs++;
     if (major != NULL)
         *major = VERSION_MAJOR;
diff --git a/opengl/libs/EGL/egl_display.h b/opengl/libs/EGL/egl_display.h
index 6348228..43738ea 100644
--- a/opengl/libs/EGL/egl_display.h
+++ b/opengl/libs/EGL/egl_display.h
@@ -107,6 +107,7 @@
 
 public:
     DisplayImpl     disp;
+    bool    finishOnSwap;
 
 private:
             uint32_t                    refs;