diff options
author | Mathias Agopian <mathias@google.com> | 2012-03-25 00:49:46 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2012-03-25 00:49:46 -0700 |
commit | 7db993a98b9239bd4e384cc4aa128262fe3cf52c (patch) | |
tree | eaae74ffe09790c10cb331ed5671a4ef73f0a185 | |
parent | 94ff71fd6a4eeb36f02d277a0d2c96230b5c9ee6 (diff) | |
download | frameworks_native-7db993a98b9239bd4e384cc4aa128262fe3cf52c.zip frameworks_native-7db993a98b9239bd4e384cc4aa128262fe3cf52c.tar.gz frameworks_native-7db993a98b9239bd4e384cc4aa128262fe3cf52c.tar.bz2 |
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
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 12 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.cpp | 9 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.h | 1 |
3 files changed, 21 insertions, 1 deletions
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 @@ EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) #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 @@ extern void setGLHooksThreadSpecific(gl_hooks_t const *value); 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 @@ EGLBoolean egl_display_t::initialize(EGLint *major, EGLint *minor) { 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 @@ private: public: DisplayImpl disp; + bool finishOnSwap; private: uint32_t refs; |